이것은 즉시 사용 가능한 솔루션이있을 것이라고 생각한 SQL Server 기하학 질문처럼 보이지만 하나를 찾는 데 운이 없습니다.
내 의도는 다른 테이블에서 더 큰 다각형 내에 중첩 (포함) 된 다각형이있는 한 테이블 내 모든 레코드를 선택하는 것입니다. 나는 기능을 기대했던 STWithin
과 STContains
내가 필요하지만, 솔루션 인 것으로 불행하게도, 모두 큰 다각형에 중첩하는 내에서만 내부 다각형이 아닌 더 큰 다각형의 경계를 만지고 그 중첩 된 다각형을 식별합니다. 예를 들어 이미지를 참조하십시오.
내 필요에 맞는 대체 옵션은 STIntersection
입니다. 그러나이 함수의 문제점은 지오메트리 열만 반환한다는 것입니다! 대신 레코드 ID를 얻고 싶습니다. 이 작업을 수행하는 방법에 대한 제안이 있습니까?
STWithin
:
select a.bg10 from
gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on a.shape.STWithin(b.shape) = 1
where b.mktname = 'Loop'
STContains
:
select a.bg10 from
gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on b.shape.STContains(a.shape) = 1
where b.mktname = 'Loop'
STIntersection
:
select a.shape.STIntersection(b.shape)
from gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on a.shape.STIntersects(b.shape) = 1
where b.mktname = 'Loop'
편집하다:
한 가지 제안은 다음과 같이 STIntersection
단독 STIntersects
으로 생략 하고 사용하는 것이 었습니다 .
STIntersects
:
select a.bg10
from gis.usa_10_block_group a
join gis.usa_10_mkt_definition b
on a.shape.STIntersects(b.shape) = 1
where b.mktname = 'Loop'
이 접근법의 문제점은 STIntersects
엄격하게 내부뿐만 아니라 내부 또는 외부의 모든 다각형을 선택하고 더 큰 다각형을 터치 하는 것으로 보입니다. 예를 들어 이미지를 참조하십시오.
STContains
또는 을 사용할 수 있습니다STWithin
. 실제로 좋은 해킹은 아니지만 원하는 결과를 얻을 수 있습니다. 다른 옵션은 교차 영역과 다각형 영역을 비교하여 STIntersects를 수행하는 것입니다.