Thursday, 25. march 2010 4 25 /03 /März /2010 20:00

Nach den Punkten kommen nun die Linien für den Datentypen Geography des Microsoft SQL Server 2008 dran. Das ist nichts weiter kompliziertes, es sind lediglich Auflistungen von Punkten, um eine Linie zu erhalten; da muss man auch nichts weiter beachten, jedenfalls sind mir hier keine Stolperfallen bekannt.

Es gibt dabei aber auch eine interessante Funktion Reduce(), um die Anzahl der Punkte abhängig von der Entfernung untereinander zu verringern.

Einfaches wie praktisches Beispiel: Man hat einen GPS Tracker und zeichnet damit ein Weg (z.B. zur Arbeit oder zum Kunden) auf, das ist eine Anreihung von einzelnen Punkten zu einem bestimmten Zeitpunkt, was wiederum eine Linie ergibt; die Route eben.

Werden die Punkte zeitgesteuert gespeichert, bekommt man bei Ampelstopps oder anderen Pause viele Messpunkte für einen einzelnen Standort; das sind redundante Daten, die unnötig auf die Performance von der Auswertung her bis hin zur Anzeige gehen.

Über die Reduce(tolerance) Funktion kann man nun diese redundante Punkte entfernen lassen, über den Parameter tolerance gibt man dabei die Mindest-Entfernung in Metern an.

Beispiel:

 

-- In Teil 1 angelegte Datenbank verwenden
USE [GeoTest];
GO
 
-- Tabelle für einfache Linie
CREATE TABLE Lines
   (ID int IDENTITY(1, 1) NOT NULL Primary Key,
    Line geography);
GO
 
-- Eine einfache, horizontal & halbwegs gerade Linie
INSERT INTO Lines (Line)
VALUES (geography::STGeomFromText(
        'LINESTRING( 9.73610  52.374401
                   , 9.73611  52.374400
                   , 9.73612  52.374401
                   , 9.73613  52.374400
                   , 9.73614  52.374401)', 4326));
 
-- Die gleiche Linie parallel dazu, nur etwas "krösselig"
-- und mit weiteren kurzen Zwischenpunkten
INSERT INTO Lines (Line)
VALUES (geography::STGeomFromText(
        'LINESTRING( 9.73610  52.374402
                   , 9.73611  52.374402
                   , 9.73612  52.374402
                   , 9.736121 52.374403
                   , 9.736122 52.374402
                   , 9.736123 52.374403
                   , 9.736124 52.374402
                   , 9.736125 52.374403
                   , 9.736126 52.374403
                   , 9.73613  52.374402
                   , 9.73614  52.374402)', 4326));
 
-- Selektion der Linie, zusätzlich mit Reduktion der
-- Punkte, die näher als 80 Meter sind.
SELECT Line                          -- Zur Anzeige in Spatial Result
      ,Line.Reduce(0.08) AS LineRed  -- Zur Anzeige in Spatial Result
      ,Line.ToString()
      ,Line.STNumPoints() AS AnzPunkte
      ,Line.Reduce(0.08).ToString()
      ,Line.Reduce(0.08).STNumPoints() AS AnzReduz
FROM Lines;


Jetzt wird die zusätzliche Anzeige von „Spatial result“ auch etwas interessanter; mit Betonung auf etwas.

Leider gibt es (meines Wissens) keine Möglichkeit Einfluss auf die Darstellung / Farben zu nehmen, die dünnen Linien kann man bestenfalls so gerade eben noch erkennen.

 
Spatial_Result_Line.jpg

von Olaf Helper - veröffentlicht in: Geo / GIS - Community: SQL Scripter
Kommentar hinzufügen - Kommentare (1)ansehen
Zurück zur Startseite

Kommentare

Vielen dank für die Fortsetzung. Wenigstens habe ich jetzt einige Anhaltspunkte.
Kommentarnr1 gepostet von Thomas Naugler am 1.04.2010 um 22h00

Über diesen Blog

Kategorien

Kalender

June 2012
M T W T F S S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
<< < > >>

Syndication (RSS)

  • RSS-Feed der Artikel

Suchen

Blog erstellen

Erstellen Sie einen Blog auf OverBlog - Kontakt - Nutzungsbedingungen - Werbung - Missbrauch melden - Impressum - Artikel mit den meisten Kommentaren