2014-07-19 3 views
0

지도에서 건물을 클릭하고 클릭 한 좌표로 건물을 구성하는 다각형을 가져오고 싶습니다. 좌표로 건물 데이터 가져 오기

나는 육교 API를 들여다 다음과 같은 시도 :

<query type="way"> 
    <around lat="51.0566036" lon="13.7181033" radius="30"/> 
    <has-kv k="building"/> 
</query> 
<union> 
    <item/> 
    <recurse type="down"/> 
</union> 
<print/> 

내가 큰 radius 내가 너무 많은 건물을 얻을 선택합니다. radius이 너무 작 으면 건물이 없습니다. bbox-query을 사용하면 도움이되지 않습니다.

나는 또한 coord-query을 시도했지만 의미있는 쿼리를 구성 할 수 없었습니다. 필요한 쿼리 구문이 다른 것 같습니다.

더 나은 접근 방법이 있습니까? 심지어 고가 고가도, 나는 그것을 조사해야한다.

답변

2

실현하려는 것은 '역 지오 코딩'입니다. 언급 된 문제 (AFAIK)를 피하기 위해 보통의 구현에서는 임의의 반경을 사용하고 원하는 위치가 포함 된 경우 결과 모양을 한 번 더 테스트합니다.

+0

감사! 나는 다음을 시도 할 것이다 : 작은 반경 (50m)으로 테스트하고 큰 반경 (500m)으로 실패 할 경우. 몇 가지 쿼리를 수행 한 후, 다시 반올림하여 다른 반경을 사용하여 전송 된 데이터에 대한 API 호출 수 사이의 적절한 비율을 찾아서 최적화 할 수 있는지 확인합니다. –

2

이와 유사한 요구 사항이 GitHub ticket에서 논의되었다. 현재 오버 패스 API는 건물의 면적 정보를 계산하지 않으므로 is_in이 작동해야합니다. 그러나 자신 만의 Overpass API 인스턴스를 설정하고 건물을 포함하도록 영역 생성 규칙을 조정할 수도 있습니다. 작은 영역의 경우 로컬 컴퓨터에서도 가능해야합니다.

내가 언급 한 GitHub 티켓의 모든 링크를 확인하십시오. 그것은 당신의 문제와 관련이있을 수있는 많은 추가 포인터를 포함합니다.

경고 : 전 세계적으로 건물의 면적을 계산할 때의 성능 및 공간 의미는 아직 알려지지 않았으며 아직 완전히 테스트되지 않았습니다.

+0

설명해 주셔서 감사합니다! 처음에는 내 자신의 인스턴스를 설정하고 싶지 않습니다. 나는 MaM의 대답에 대한 나의 코멘트에서 내가 먼저 할 일을 설명했다. –

0

gis_geometrics [1]와 overpy를 사용하는 Python 솔루션이 있습니다. 이 Python 프로그램은 LAT, LON에서 건물을 찾습니다. gis_geometrics.py와 같은 디렉토리에 넣으십시오 :

import overpy 
from gis_geometrics import OSM_Polygon, Overpass 

api = overpy.Overpass() 
building = OSM_Polygon.getPolygonByCoords(api, LAT, LON) 
if building is None: print("No building found.") 
else: print(building.wayId) 

길잡이 ID를 사용하면 다각형 좌표를 찾기 위해 오버 패스 요청을 할 수 있습니다.

[1] https://github.com/timojuez/home/blob/master/mylib/gis_geometrics.py