Pergunta

Existe alguma API para OpenStreetMap que me permite obter uma lista de POIs a uma determinada distância (por exemplo, 10 milhas) de um local de referência?

Foi útil?

Solução

Sim. A API do viaduto possui um recurso "em torno" que faz exatamente isso (procure itens dentro de um raio do ponto especificado). Você pode combinar isso com outros requisitos (por exemplo, para obter uma lista de um tipo de item específico):

http://wiki.openstreetmap.org/wiki/overpass_api#Alound

Por exemplo, usando a API Turbo do viaduto (liste todas as cidades próximas a "Manzanares, Espanha" com latitude e longitude com um raio de 150 km, Experimente ao vivo!):

<osm-script output="json" timeout="25">
  <id-query {{nominatimArea:Spain}} into="area"/>
  <query type="node">
    <has-kv k="place" modv="" v="town"/>
  <around lat="38.996507" lon="-3.371946" radius="150000"/>
</query>

  <print e="" from="_" geometry="skeleton" limit="" mode="body" n="" order="id" s="" w=""/>
</osm-script>

Outras dicas

Até onde eu sei, a API não suporta isso diretamente. A abordagem mais simples é Selecione uma caixa delimitadora (quase-) retangular que seu círculo se encaixa e use isso para recuperar seu POIS. Em seguida, você pode fazer um cálculo de distância a cada ponto de interesse e descartar aqueles que excedem seu raio. Isso removerá a pequena fração de PIOs que fica perto dos cantos da caixa e, portanto, não estão dentro do seu círculo. Você deseja fazer isso nesse pedido, para que você precise fazer o cálculo da distância em um número relativamente pequeno de locais de destino.

Não se esqueça que a caixa delimitadora é definida por cantos Lat/Long, por isso não é realmente retangular. As linhas de longitude convergem nos pólos, para que a parte superior da sua caixa não tenha a mesma largura que a parte inferior. Quanto isso afeta você depende de quão perto você está de um pólo (um grau de longo ~ = (40000km / 360) * cos (lat)).

Se você não precisar de precisão suprema, calcule suas distâncias usando o teorema de Pitágoras, lembrando -se da variação de cosseno na longitude e da diferença da unidade do fator 2 (360 graus de longitude, mas apenas 180 de latitude). Se você precisar de precisão, você está no reino de Trigonometria esférica, e também precisa considerar o Terra elipsoidal. Aqui está um Calculadora online, completo com equações e código de código aberto, isso é útil a esse respeito.

Aqui está a documentação:http://developers.cloudmade.com/wiki/geocoding-http-api/documentation

Aqui está o exemplo do que você precisa - Html, JSON.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top