Wednesday, 7. april 2010 3 07 /04 /Apr. /2010 18:40

Kommen wir zur nächsten geografischen Form im Microsoft SQL Server Spatial Data (hier wieder Geography), den Polygonen. Auch hier gibt es ein paar einfache Punkte zu beachten.

 

-       Ein Polygon darf nicht größer als eine Hemisphäre sein, wobei es nicht auf eine bekannte (östlich / westliche oder nördliche / südliche) Hemisphäre beschränkte .Oder vereinfacht gesagt: Betrachtet man einen Globus aus einiger Entfernung, muss die definierte Fläche vollständig im sichtbaren Bereich sein. Das ist in erster Linie eine technische Einschränkung, praktisch dürfte es kein Problem sein; selbst der gesamte amerikanische Kontinent passt da rein.

-       Ein Polygon muss in sich geschlossen sein; das ist einfach, der Endpunkt muss mit dem Startpunkt über identisch sein.

-       Besteht ein Polygon aus mehreren separaten Flächen, dürfen die sich nicht überlappen, auch nicht teilweise.

-       Bei der Reihenfolge der einzelnen Eckpunkten muss man die „Links-Hand Regel“ (Left-Hand Rule) beachten, d.h. geht man die Punkte (in Gedanken) nacheinander ab, befindet sich die definierte Fläche zur Linken Seite hin. Die Punkte müssen also entgegen dem Uhrzeigersinn nach definiert werden.

Das muss man also im Hinterkopf behalten.

 

Bei dem ersten Beispiel mit den Punkten aus Teil 1 habe ich Städte mit deren realen Koordinaten verwendet, da bietet sich für dies hier Flächen wie Bundesländer o.ä als Beispiele an. Leider habe ich bisher keine frei verfügbare Koordinaten-Listen / Shape-Files oder vergleichbare Daten gefunden.

Deswegen habe ich mal selbst ein paar Eckpunkte heraus gesucht; aber eben nur ein paar groblegende, es soll ja nur ein Beispiel werden.

Ich habe hier Niedersachen genommen, denn es bietet gleich noch einen interessanten Aspekt: Bremen als „Insel“ innerhalb der Fläche. Wie man unten im T-SQL Script sehen kann, wird diese Insel durch eine weitere Fläche innerhalb des Polygons festgelegt. Die Punkte sind hier im Uhrzeiger-Sinn angeordnet, weil sich die eigentliche Fläche außerhalb befindet; so schneidet man die Fläche aus der anderen raus.

 

-- In Teil 1 angelegte Datenbank verwenden
USE [GeoTest];
GO
 
-- Tabelle für Bereiche anlegen
CREATE TABLE Area
   (ID int IDENTITY(1, 1) NOT NULL Primary Key,
    AreaName nvarchar(50),
    Area geography);
GO
 
-- Niedersachen; na ja, so irgendwie
-- Wichtig bei Geometry-Polygon: Die Links-Hand Regel beachten.
-- Die zweite Fläche in dem Polygon stellt Bremen dar,
-- das aus Niedersachsen ausgeschnitten wird, weil es innen liegt.
INSERT INTO Area
VALUES (N'Niedersachen'
       ,geography::STGeomFromText(
        'POLYGON(( 10.7080  51.6387 
                 , 10.5596  51.9899
                 , 10.9734  52.0562
                 , 10.7655  52.8280
                 , 11.6011  53.0335
                 , 10.3189  53.4344
                 ,  9.8703  53.4308
                 ,  9.7805  53.5456
                 ,  9.2144  53.8694
                 ,  8.6661  53.8665
                 ,  8.0329  53.7027
                 ,  7.0975  53.5748
                 ,  7.0556  52.6282
                 ,  6.7154  52.6183
                 ,  6.7284  52.4718
                 ,  7.0424  52.2062
                 ,  7.6176  52.4459
                 ,  8.0267  52.1244
                 ,  8.5208  52.1644
                 ,  8.3500  52.4635
                 ,  9.1354  52.4687
                 ,  9.7164  51.2969
                 , 10.7080  51.6387
                 )' 
            -- Ab hier der Ausschnitt "Bremen"     
              + ',
                 (  8.5009  53.2254
                 ,  8.9835  53.1127
                 ,  8.9287  52.9992
                 ,  8.7099  53.0355
                 ,  8.6237  53.1599
                 ,  8.5009  53.2254
                 )
                )'
       ,4326)
       );
       
-- Bremen; genau wie die Lücke in Niedersachen
-- nur die Punkte in umgedrehter Reihenfolge,
-- wegen der Links-Hand Regel!     
INSERT INTO Area
VALUES (N'Bremen'
       ,geography::STGeomFromText(
        'POLYGON((  8.5009  53.2254
                 ,  8.6237  53.1599
                 ,  8.7099  53.0355
                 ,  8.9287  52.9992
                 ,  8.9835  53.1127
                 ,  8.5009  53.2254
                 )
                )'
       ,4326)
       );
GO
 
-- Zur Anzeige selektieren:
SELECT *
FROM Area;
GO

 

Jetzt wird auch mal wirklich was im „Spatial results“ angezeigt, farbig ausgefüllte Flächen. Wenn man als „Projection“ dann „Mercator“, eine Landkarte daneben hält, ein Auge zukneift und nicht ganz so scharf hinsieht, kann man fast erkennen, dass es sich um den Umriss von Niedersachen handelt. J

Wenn man dann noch bei „Label column“ das „AreaName“ angibt, wird auch der Name des Landes angezeigt; schon fast eine kleine Geo-Visualisierung.

 

Spatial_Result_Polygon.jpg

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

Kommentare

Das klingt ja alles ganz schön kompliziert, wie schafft man es denn, da noch irgendwo durchzublicken?
Kommentarnr1 gepostet von Lars Gunthner am 10.04.2010 um 15h00

Hallo Lars,

ach, wenn man sich mit dem Thema Geodatn beschäftigt, ist das nicht so kompliziert, man muss sich nur an ein paar einfach Regeln halten; die ich ja aufgeführt haben.

Viele Grüße, Olaf Helper

Antwort von Olaf Helper am 12.04.2010 um 20h57

Ü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