Ich möchte meine geographischen Daten nicht in Geometrie umwandeln, damit sie in STIntersect den Wert true zurückgibt. HierSQL-Geography-Punkt innerhalb eines Polygons, das bei STIntersect nicht True zurückgibt (aber True mit Geometry zurückgibt)
ist der Code in SQL:
DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(1, 1, 4326)
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 4326)
SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)
Der folgende Code gibt false (0), aber wenn ich benutze:
DECLARE @point GEOMETRY = GEOMETRY::Point(1, 1, 4326)
DECLARE @polygon GEOMETRY = GEOMETRY::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 4326)
SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)
Es gibt true zurück, gibt es etwas, das ich fehle? Alles, was ich weiß, ist Geographie ist 3D-Ebene und Geometrie ist eine flache Karte, aber ich verwende die Erde für die Berechnung, wenn der Punkt im Polygon ist.
PS: Es funktioniert nicht so gut mit STContains, STWithin, STOverlaps
mit Microsoft SQL Server 2012
Danke, arbeitete für mich. – MilkTea027
Dies ist ein schöner Blogeintrag, der die _left-hand_ Regel erklärt: http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position- no/ Beispiel: Wenn ein Punkt zu den _left_ aller Linien des Polygons gehört, wird das Polygon _intersect_. – bounav
Die URL zu dem obigen Blogbeitrag zur Erläuterung der Linke-Hand-Regel sollte lauten: http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-corrfect-position-no/ – Daniel