Nie chcę uciekać się do konwertowania danych geograficznych do geometrii, aby zwracała true w STIntersect.Punkt geograficzny SQL wewnątrz wieloboku, który nie zwraca wartości true w STIntersect (ale zwraca wartość true za pomocą geometrii)
Oto kod 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)
Następujące zwraca false (0), jednak jeśli używam:
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)
Zwraca prawda, jest tam coś mi brakuje? Wiem tylko, że geografia jest płaszczyzną 3D, a geometria jest płaską mapą, jednak używam Ziemi do obliczeń, jeśli punkt znajduje się w wielokącie.
PS: To nie działa tak dobrze z STContains, STWithin, STOverlaps
pomocą programu Microsoft SQL Server 2012
Dzięki, pracowali dla mnie. – MilkTea027
To jest ładny wpis na blogu wyjaśniający regułę _left-hand_: http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position- no/ Na przykład: jeśli punkt odnosi się do _left_ wszystkich linii wielokąta, ma on _intersect_ wielobok. – bounav
Adres URL powyższego wpisu na blogu wyjaśniający regułę lewej ręki powinien być następujący: http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no/ – Daniel