2013-12-18 40 views
6

Coğrafi verilerimi geometriye dönüştürmek için başvurmak istemiyorum, bu yüzden STIntersect'te doğru olarak döndürülür. İşte Çokgen içinde SQL Coğrafi nokta noktası STIntersect üzerinde true dönmüyor (ancak Geometri kullanarak doğru döndürür)

SQL kodudur:

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) 

aşağıdaki döndürür false (0), kullandığım ancak eğer:

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) 

Doğru döndürür Eksik bir şey mi var? Tek bildiğim coğrafya 3D düzlemdir ve geometri düz bir haritadır, ancak nokta çokgenin içinde ise hesaplama için dünyayı kullanıyorum.

Not: Bu Bu işleri Microsoft SQL Server 2012

cevap

8

kullanma STContains, STWithin, STOverlaps

ile de çalışmaz: Sen ile dikkatli olmak zorunda

DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(1, 1, 4326) 
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 4326) 

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon) 

" yön "geography için bir çokgen tanımladığınız - ekvator etrafında bir daire olarak tanımlanan bir çokgen düşünün - kuzey yarımküre veya güney birisini belirlemek niyetinde miydiniz?

here bakınız:

elipsoidal sisteminde, bir çokgen bir anlamı yoktur, ya da bir yönlendirme olmadan belirsiz. Örneğin, ekvator etrafındaki bir halka kuzey veya güney yarım küreyi tanımlar mı? Mekansal örneği depolamak için coğrafi veri türünü kullanırsak, yüzüğün yönünü belirtmeli ve örneğin yerini doğru olarak tanımlamalıyız. Bir elipsoidal sistemdeki poligonun iç kısmı sol el kuralıyla tanımlanır.

+0

Teşekkürler, benim için çalıştı. – MilkTea027

+1

Bu, _left-hand_ kuralını açıklayan güzel bir blog girişidir: http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position- no/ Örneğin: çokgenin tüm satırlarının _left_ için bir nokta varsa, çokgen _intersect_ yapar. – bounav

+0

Soldaki kuralı açıklayan yukarıdaki blog gönderisinin URL adresi: http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no/ – Daniel