2012-10-18 6 views
2

"주어진 점을 겹치는 원"시스템에 가장 적합한 방법을 찾아야합니다.주어진 점에 겹치는 모든 점 (반지름이있는 원) 얻기

나는 많은 점을 가지고 있습니다. 식당 및 모든 상품에는 장소에 대한 지점이 있고 반경은 예를 들어 "음식을 가져 오는 중". 반경이 다르다. 어떤 것은 3km, 다른 것은 10km이다. 지점에서 검색 중입니다. 예 : "나의 위치"위도/경도.

내 요점과 겹치는 레스토랑을 찾는 가장 좋은 방법을 찾아야합니다. (나에게 음식을 가져다 줄 것이다). (동그라미 안에 점은 없지만 내 원점과 겹치는 원은 무엇입니까?)

SQL Server 2008에서 지형 유형으로 lat/lng를 저장하려고합니다. 어떻게해야할까요?

sqlserver 위에서 직접 쿼리 할 수 ​​있습니까? 아니면 코드에서해야합니까? 그리고 그것을하는 방법은 무엇입니까?

+0

반경이있는 각 포인트에 대해 포인트가 검색 반경 + 포인트 반경 내에 있는지 확인하십시오. 나는. 검색 할 때 레스토랑 반경을 검색 반경에 추가하십시오. –

답변

2

예, 이것은 정확하게 geography 및 공간적 방법이 좋은 종류입니다. 여기에 내가 뒤에서 geography::Parse를 호출 문자열에서 암시 적 변환을 사용하고있는 geography 값을 구축하기

DECLARE @Restaurant TABLE (
    Name nvarchar(50), 
    Location geography, 
    DeliveryRadiusMetres int 
); 

INSERT @Restaurant 
VALUES 
-- long lat 
('Dominos','POINT(-0.109339 51.532835)',2000), 
('Pizza Hut','POINT(-0.102961 51.541157)',2000); 

주 : 다음은 간단한 예입니다.

+1

아마도 여기가 가장 좋은 답변 일 것입니다. 다각형 (STBuffer)을 사용하지 않기 때문에 내 버전보다 효과적이어야합니다. 원이 아닌 다른 모양이 필요한 경우 STWithin을 사용하십시오. –

1

예 지역/지형 데이터 유형으로 점으로 서클을 그릴 수 있습니다. 그런 다음 STWithin 및 STTouches와 같은 함수를 사용하여이 데이터에 대해 직접 SQL 쿼리를 작성할 수 있습니다.

식당 위치를 반경이있는 지점으로 설정하십시오. 그럼 당신은이 같은 쿼리를 작성할 수 있습니다

DECLARE @RestaurantCoverage Geometry 
SET @RestaurantCoverage = 'Point(10 5)' --Location 
SET @RestaurantCoverage = @RestaurantCoverage.STBuffer(5)  --Cover radius 
DECLARE @YourLocation Geometry 
SET @YourLocation = 'Point(13 5)' --Your location 

SELECT @YourLocation.STWithin(@RestaurantCoverage) 

http://technet.microsoft.com/en-us/library/bb933991.aspx

또한 어디에 문을 테이블 데이터에 대해 직접 작동합니다.

관련 문제