SQL Server 2008 - mit STIntersects aus einer Tabelle, die definiert, ein Land
Ich habe eine Tabelle, wo jede Zeile ist Teil einer Neuseeland-Karte. Was ich eigentlich wissen will ist, ist ein Punkt innerhalb der Karte (dh die Daten der Länder) oder ist es im Wasser.
Verstehe ich, wie StIntersects
funktioniert, aber alle Beispiele sind für eine einzelne Polygon
oder LineString
aber ich habe eine Tabelle von LineStrings
- 130 Zeilen definieren die Landesgrenze.
Viele Zeilen wie diese
LINESTRING (6252032.7308424888 -3161950.9615992079, 6252033.7275789445 -3161929.3581238855, 6252011.5227283547 -3161906.1086780191, 6251992.0438580718 -3161880.6299652755)
So, ich glaube, ich brauche zu Sortieren, setzen, alle line-strings zusammen, um mein Land Grenze ein einzelnes polygon oder sowas, aber ich weiß nicht, wie das zu tun.
Kann mir jemand ein Beispiel, wie ich dies tun könnte?
Den ursprünglichen Daten von einem ShapeFile
aus www.koordinates.com
genannt Neuseelands Küsten. Ich habe dann Shape2Sql für den import in den SQL Server mit Planer Geometrie.
Geometrie (sphärische) in Shape2File sagte "Data-Projekte oder Umfang außerhalb der Grenzen dessen, was unterstützt wird durch die SqlGeography-Typ)
Hoffe ich habe genug Informationen geliefert?
Cheers Chris
MULTIPOLYGON
?InformationsquelleAutor Chris | 2011-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich verschoben, aber ich bin Entsendung für die zukünftige Verwendung.
Wenn ich Sie richtig verstehe, benötigen Sie zum erstellen eines polygon aus einer Tabelle von Linienfolgen, dass make-up die Grenze des Polygons?
Erste, kombinieren Sie alle LINESTRINGs in der Tabelle in einer geometrie wie diese:
Dann Sie möchten, erstellen Sie ein polygon aus Ihrem single-line-Grenze. Es gibt nur zwei Dinge, die sich zwischen Ihrem single-line-boundary-string und ein polygon, zuerst ersetzen wir "LINESTRING" mit "POLYGON". Dann fügen wir eine Reihe von Klammern, da ein polygon ist eine WKT-Zeichenfolge trennt mehrere Polygone mit Klammern wie diese:
Die geben Sie Ihrem polygon des Landes.
Dann kann man einfach sehen, wenn Ihr Punkt schneidet das polygon (@p ist der Punkt-geometrie):
ODER wenn Sie Ihre Punkte sind in einer Tabelle, wählen Sie die Liste der Punkte, die sich das Land, wie unten gezeigt, wenn der Punkt Tabelle der geometrie-Spalte wird als "Punkt".
Da gibt es viele von uns, die sich nicht bewegen können, um SQL server 2012 in absehbarer Zeit, dieses kommt in handliches. Hoffe, es hilft.
Es fiel mir ein, dass Sie könnte leicht finden ein shapefile von Neuseeland schon in polygon-format von irgendwo wie stats.govt.nz/browse_for_stats/people_and_communities/.... Dann importieren Sie das in sql server auf die gleiche Weise wie Ihre anderen shapefile und dann müssen Sie nicht haben, um mit dem erstellen des Polygons.
InformationsquelleAutor GreenGeo
Den klassischen Ansatz, um zu bestimmen, ob zwei Punkte auf der gleichen Seite (innen oder außen) eines Polygons, ist die Berechnung der Anzahl von Schnittpunkten zwischen einer Linie zwischen zwei und Grenzen des Polygons. Auch die Anzahl (inkl. 0) ist die gleiche Seite, ungerade, ist von verschiedenen Seiten.
So definieren Sie einen (beliebigen) Punkt, die in Neuseeland sicher (vorzugsweise in der Nähe der geometrischen Mitte), dann eine Linie, die verbindet Sie mit dem Punkt, den Sie überprüfen möchten, dann berechnen Sie die Anzahl der Linien schneidet. Wenn es 0 oder auch, das andere ist auf der gleichen Seite (das ist in Neuseeland.) Wenn es ungerade ist, wird der Punkt außerhalb der Landesgrenzen. Sie brauchen nicht zu sorgen über die Bestellung oder die Verbindung der Grenzlinien.
Wird es immer schwierig, wenn die Linie kreuzt, genau in einem gemeinsamen Punkt zwischen den beiden Grenzlinien, aber StIntersects wird dich nicht retten vor, dass, und außerdem, wenn Sie die Arbeit an realen Werten 17 signifikanten stellen, die likehood HIERFÜR ist minimal.
Der Algorithmus gut ist, dass es funktioniert für mehrere disjunkte Polygone (Inseln) genauso wie für einzelne unregelmäßigen Vieleck. Die einzige Voraussetzung ist, alle Linien sind geschlossen.
Natürlich, um die Arbeit, die Sie haben würden, zu transformieren linienfolgen in eine Reihe von einzelnen Linien und speichern diese, weil Sie brauchen, um zu finden, die Anzahl der Kreuzungen, nicht nur die Tatsache: line schneidet polygon (n-mal) vs 0 mal.
InformationsquelleAutor SF.
Lassen Sie mich sehen, ob ich dein problem verstanden.
Wollen Sie feststellen, wenn Sie einen vorher festgelegten Punkt ist entweder in NZ oder AUßERHALB. Nun haben Sie die Küste von NZ, richtig? Diese Küste ist rund 130 Zeilen ... aber wir brauchen, um dieses eine einzige Zeile .. und DANN sehen, wenn der Punkt liegt innerhalb dieser Grenze oder außerhalb.
Wenn dies richtig ist, dann das erste, was Sie tun müssen ist, sich alle linestrings in einem einzigen massiven polygon .. und wir brauchen diese letzten eine einzige Zeile als
Sql Server 2008 GEOGRAPHY type
.So - erste Hilfe. Springen auf Codeplex und schnappen Sie sich dieses library - sql spatial tools. In dieser Bibliothek gibt es eine Methode, um JOIN alle linestrings. Ich denke, es heißt GeographyUnionAggregate . Herauszufinden, wie führen Sie diese gespeicherte Prozedur, die beitreten werden alle linestrings zusammen (vorausgesetzt, keiner von Ihnen sind Durcheinander).
Sobald diese Aufgabe erledigt ist, haben Sie einen einzigen
GEOGRAPHY
Reihe, die repesents die gesamte Küste von NZ.Nun, es ist eine einfache sql-Anweisung, um zu sehen, wenn der Punkt vorhanden ist/schneidet die Grenze (das Land der NZ) oder nicht :-
Und das sollte Sie wieder ein Ergebnis 🙂
InformationsquelleAutor Pure.Krome