Non voglio ricorrere alla conversione dei dati geografici in geometria solo per restituire true in STIntersect.Punto di geografia SQL all'interno del poligono che non restituisce true su STIntersect (ma restituisce true utilizzando Geometry)
Ecco il codice 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)
Le seguenti dichiarazioni false (0), se io uso:
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)
restituisce vero, c'è qualcosa che mi manca? Tutto quello che so è che la geografia è un piano 3D e la geometria è una mappa piatta, tuttavia sto usando la terra per il calcolo se il punto è nel poligono.
PS: Non funziona così con STContains, STWithin, STOverlaps
utilizza Microsoft SQL Server 2012
Grazie, ha funzionato per me. – MilkTea027
Questo è un bel post sul blog che spiega la regola _left-hand_: http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position- no/ Ad esempio: se un punto si trova su _left_ di tutte le linee del poligono, esegue _intersect_ il poligono. – bounav
L'URL del post del blog in alto che spiega la regola della mano sinistra dovrebbe essere: http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no/ – Daniel