2013-12-18 4 views
6

지리 데이터를 지오메트리로 변환하지 않으려 고하므로 STIntersect에서 true를 반환합니다. 여기 SQL 내부의 지리 정보가 STIntersect에서 true를 반환하지 않습니다 (그러나 Geometry를 사용하면 true를 반환합니다).

는 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) 

다음 false를 반환 (0), 내가 사용하지만 경우 :

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) 

그것은 true를 돌려, 내가 놓친 거지 뭔가가있다? 내가 알고있는 것은 지리학이 3D 평면이고 기하학이 평면지도이지만, 그 점이 다각형 안에 있으면 계산에 지구를 사용하고 있습니다.

PS : 그것은이 작동 마이크로 소프트 SQL 서버 2012

답변

8

를 사용 STContains, STWithin, STOverlaps

와 함께 잘 작동하지 않습니다 : 당신은 조심해야

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) 

은 " 방향 "을 지정합니다. geography의 경우 - 적도 부근의 원으로 정의 된 다각형을 고려하십시오 - 북반구 또는 남부를 지정하려고 했습니까?

here를 참조하십시오

를 타원 시스템에서, 다각형은 아무 의미가 없다, 또는 방향을하지 않고 모호합니다. 예를 들어, 적도 주변의 반지가 북반구 또는 남반구를 나타 냅니까? geography 데이터 유형을 사용하여 공간 인스턴스를 저장하는 경우 링의 방향을 지정하고 인스턴스의 위치를 ​​정확하게 설명해야합니다. 타원형 시스템의 다각형 내부는 왼손 법칙에 의해 정의됩니다.

+0

감사합니다. 나를 위해 일했습니다. – MilkTea027

+1

이것은 _left-hand_ 규칙을 설명하는 멋진 블로그 항목입니다. http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position- no/ 예 : 점이 다각형의 모든 선의 _left_에 있으면 _ 다각형을 교차합니다. – bounav

+0

왼쪽 위 규칙을 설명하는 블로그 게시물의 URL은 다음과 같아야합니다. http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no/ – Daniel

관련 문제