Où peut-on obtenir une base de données open source ou sous licence de latitudes et de longitudes pour différentes villes?
Réponses
Trop de publicités?On dirait que MaxMind a ouvert le leur gratuitement. Voir ce post pour plus d'informations et le télécharger ici .
C'est une grande question qui conduit naturellement à d'autres questions. Les villes ne sont pas situés sur un seul de latitude et de longitude, donc tout d'abord vous devez décider si vous voulez une liste des endroits de la ville de "centres" ou si vous voulez faire géographique des requêtes sur les domaines couverts par les villes.
Cartographie à Partir d'un Nom de Ville pour la Latitude et la Longitude
Si vous essayez de carte à partir d'un nom de ville pour lat/lon, alors vous voulez une liste des villes avec la latitude et de la longitude d'un point intérieur, probablement la ville centre logique (pas de son centre géographique, ce qui est souvent loin du centre-ville). Dans ce cas, je voudrais commencer par:
http://earth-info.nga.mil/gns/html/namefiles.htm
Les deux ont la forme de fichiers téléchargeables avec facile à analyser les formats et sont régulièrement mis à jour. Ils comprennent beaucoup plus de villes (par exemple, ils comprennent les bâtiments publics, les lieux d'intérêt, parcs, etc.), mais chaque enregistrement comprend un type de champ qui indique le type de dossier, il est. Vous pouvez facilement filtrer les enregistrements à inclure uniquement les villes et les villages, par exemple.
Vous pouvez trouver des ensembles de données provenant de sources non gouvernementales telles que:
http://www.maxmind.com/download/worldcities/
Mais je voudrais commencer par les sources gouvernementales, comme ils sont mis à jour régulièrement par le bien financé par les ministères du gouvernement. MaxMind est une société privée et GeoNames est un projet open source.
La cartographie De la Latitude et de la Longitude de la Ville
Si vous êtes à partir de lat/lon et sont intéressés à trouver la ville qui contient ce point, alors vous devez prendre une approche différente.
Tout d'abord, point emplacements des centres de la ville ne sont pas la meilleure façon de le faire, car les villes sont définis par les régions, pas de points. Et ce n'est pas seulement un vice de forme. À l'aide des emplacements de point de travail pour les petites villes, entouré seulement par des non constituées en terres, mais dans une région métropolitaine où les différentes banlieues partagent des frontières, cette méthode va conduire à des erreurs très souvent. Si vous voulez le faire de cette façon, de toute façon, vous aurez besoin de deux éléments principaux:
- Tout d'abord, vous aurez besoin d'utiliser la Haversine formule qui calcule la distance entre deux points, spécifié par lat/lon. Avec cela, vous serez en mesure de calculer la distance entre un point de requête et l'une des villes dans votre liste. Voir Comment dois-je calculer la distance entre les deux latitude longitude des points? pour plus de détails.
- Malheureusement, cette formule est gourmand en ressources et il y a beaucoup de villes aux états-unis et encore plus dans le monde. Donc, si vous voulez que votre look-up pour être rapide, vous aurez envie de mettre en œuvre un index spatial. Le plus simple (et plus rapide, dans mon expérience) de l'indice, est une grille de l'indice. C'est juste un tableau à deux dimensions des listes de références vers les villes. Les deux dimensions correspondent à la latitude et de la longitude et vous pouvez trouver la cellule de la matrice correspondant à une lat/lon en viens de re-mise à l'échelle de la lat/lon de (-180, 180), (-90, 90) (0, N), (0, M), où il y a des NxM cellules dans le tableau. Pour remplir cet indice, vous venez en boucle sur toutes les entrées dans la liste de votre ville et d'ajouter chacune de ces villes, toutes les cellules qui sont à l'intérieur d'un certain rayon de la cellule.
La meilleure façon de le faire est d'utiliser une carte des villes, où chaque ville est représentée par un polygone représentant la zone de la ville. Pour les états-unis, de telles cartes sont facilement disponibles à partir du Recensement des états-unis. Pour interroger une carte comme ça vous aurez besoin d'un ensemble de différents outils. J'ai expliqué comment faire dans une autre réponse: http://stackoverflow.com/a/10490201/688365. Pour une raison quelconque, ce poste a été voté en bas, sans doute parce que je l'ai mentionné mon site web qui vend des services connexes. Mais l'information est bonne. Mon site web fournit une API pour faire des choses comme ça, et vend une bibliothèque Java si vous voulez le faire sur votre propre serveur:
L'API est gratuite pour les non-profits, non commercial, à des projets open source, et les chercheurs universitaires. Nous facturer une somme modique pour accéder à l'API pour couvrir nos portion des coûts, et les bibliothèques Java sont un peu plus chers, mais offrent la meilleure solution pour les entreprises qui se soucient de la latence et de la fiabilité.
Geonames a des données de type long / lat ainsi que des données de type de ville, de poste ou autre. C'est gratuit aussi.
http://developer.yahoo.com/maps/rest/V1/geocode.html
EDIT: vous ne savez pas pourquoi j'ai été modifié, cela vous donnera vraiment du temps pour un zip ou une ville!