Question

Y at-il API pour OpenStreetMap qui me permet d'obtenir une liste de points d'intérêt à une certaine distance (par exemple 10 miles) à partir d'un emplacement de référence?

Était-ce utile?

La solution

Oui. L'API Overpass a une « Around » caractéristique qui fait exactement ce (rechercher des éléments dans un rayon du point donnée). Vous pouvez combiner avec d'autres exigences (par exemple pour obtenir une liste d'un type d'élément particulier):

http://wiki.openstreetmap.org/wiki/Overpass_API#Around

Par exemple en utilisant Turbo Api passage supérieur (Liste toutes les villes à proximité de "Manzanares, Espagne" avec la latitude et la longitude avec un rayon de 150 Km, essayer vivre ):

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

Autres conseils

Pour autant que je sache, l'API ne supporte pas directement. L'approche la plus simple est de sélectionner un (quasi-) rectangulaire boîte englobante que votre cercle s'insère dans et l'utiliser pour récupérer vos points d'intérêt. Ensuite, vous pouvez faire un calcul de la distance à chaque point d'intérêt, et jetez ceux qui dépassent votre rayon. Cela permettra d'éliminer la petite fraction de POI qui se trouvent à proximité des coins de la boîte, et ne sont donc pas dans votre cercle. Vous voulez le faire dans cet ordre pour que vous suffit de faire le calcul de la distance sur un nombre relativement restreint d'emplacements cibles.

Ne pas oublier que la zone de délimitation est définie par les coins lat / long, il est donc pas vraiment rectangulaire. des lignes de longitude convergent au niveau des pôles, de sorte que le haut de votre boîte ne sont pas la même largeur que la partie inférieure. Combien cela vous affecte dépend de la façon dont vous êtes près d'un poteau (un degré de longue ~ = (40000 km / 360) * cos (latitude)).

Si vous ne souhaitez pas la précision suprême, vous calculez vos distances en utilisant le théorème de Pythagore, se souvenant de la variation cosinus en longitude, et le facteur 2 différence d'une unité (360 degrés de longitude, mais seulement 180 de latitude). Si vous avez besoin de précision, alors vous êtes dans les domaines de la sphère trigonométrie terre ellipsoïdale de. Voici un calculatrice en ligne , avec des équations et open source code, qui est utile à cet égard.

Voici la documentation: http://developers.cloudmade.com/wiki/geocoding-http-api/ documentation

Voici exemple de ce que vous avez besoin - HTML , JSON .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top