Vous cherchez une liste complète des valeurs de latitude et de longitude pour les villes du monde entier?

22

Je développe une application qui calcule la distance entre les villes en utilisant leurs valeurs respectives de longitude et de latitude.

Mais le problème est de savoir où obtenir une liste complète des valeurs de latitude et de longitude de ces villes?

Bonjour
la source
3
Je regarderais autour de developers.google.com/maps et wiki.openstreetmap.org/wiki/API pour commencer
Cela ressemble à une bonne requête pour WolframAlpha.com.

Réponses:

26

N'oubliez pas le jeu de données Geonames :

La base de données géographiques GeoNames couvre tous les pays et contient plus de huit millions de noms de lieux qui peuvent être téléchargés gratuitement.

RyanKDalton-OffTheGridMaps
la source
9
téléchargez un fichier "villes" sur download.geonames.org/export/dump
Mike T
Mais quelqu'un peut-il dire à quel point les données des points de la ville des États-Unis sont exactes à partir de Geoname, je veux direhttp://download.geonames.org/export/dump/
SIslam
1
6 ans plus tard ... la version gratuite compte 7 300 villes et la version payante 3,9 millions. simplemaps.com/data/world-cities
Synesso
6

Les lieux habités de la Terre naturelle pourraient être une autre option.

radek
la source
Merci pour l'aide. Mais je cherchais la latitude et les longitudes des villes à travers le monde.
bonjour
2
@ dotman14: L'ensemble de données est censé comprendre all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions. Et les valeurs de latlon peuvent être trouvées sous forme de deux colonnes dans le DBFfichier.
radek
De plus, ce convertisseur DBF en CSV en ligne semble fonctionner dbfconv.com, mais la limite de taille de fichier de téléchargement ne permet que la conversion d'une version "simple" de la base de données.
Nakilon
Une autre note est POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"pour ma ville, qui était vraiment de 173 000 max à l'époque de l'URSS.
Nakilon
3

Vous pouvez également extraire les données d'OpenStreetMap (en utilisant par exemple leur API, comme décrit ici ), ou simplement de Wikipedia. La plupart des pages Wikipedia pour les villes ont les coordonnées de la ville.

Bien sûr, cela nécessiterait un peu de script et éventuellement une liste des villes que vous souhaitez.


la source
3

Utilisez OpenStreetMap, l'accès Internet, l'outil wget et un filtre XPath comme XML :: XPath . La demande doit être segmentée en BBox de 2x2 degrés. Voici un exemple pour 12 degrés ouest jusqu'à 14 degrés est et 52 degrés sud et 54 degrés nord. Berlin est à l'intérieur .. avec beaucoup d'informations. Pour les petites unités, utilisez place = ville. Le format entrant est XML.

  wget -O osm-city-12-52-14-54.xml  "http://open.mapquestapi.com/xapi/api/0.6/node[place=city][bbox=12,52,14,54]"

  wget -O osm-town-12-52-14-54.xml  "http://open.mapquestapi.com/xapi/api/0.6/node[place=town][bbox=12,52,14,54]"
<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="Osmosis SNAPSHOT-r26564">
  <node id="21484051" version="7" timestamp="2010-07-13T20:11:08Z" uid="15720" user="J budissin" changeset="5211741" lat="52.2994511" lon="13.6244389">
    <tag k="openGeoDB:auto_update" v="population,is_in"/>
    <tag k="openGeoDB:loc_id" v="19549"/>
    <tag k="openGeoDB:is_in_loc_id" v="294"/>
    <tag k="openGeoDB:name" v="Königs Wusterhausen"/>
    <tag k="openGeoDB:is_in" v="Dahme-Spreewald,Brandenburg,Bundesrepublik Deutschland,Europe"/>
    <tag k="openGeoDB:layer" v="6"/>
    <tag k="openGeoDB:version" v="0.2.6.11 / 2007-12-04 / http://fa-technik.adfc.de/code/opengeodb/dump/"/>
    <tag k="openGeoDB:telephone_area_code" v="03375"/>
    <tag k="openGeoDB:population" v="32785"/>
    <tag k="is_in" v="Dahme-Spreewald,Brandenburg,Bundesrepublik Deutschland,Europe"/>
    <tag k="openGeoDB:community_identification_number" v="12061260"/>
    <tag k="openGeoDB:license_plate_code" v="LDS"/>
    <tag k="openGeoDB:sort_name" v="KOENIGS WUSTERHAUSEN"/>
    <tag k="openGeoDB:type" v="Stadt"/>
    <tag k="openGeoDB:postal_codes" v="15711,15831"/>
    <tag k="name:hsb" v="Parsk (Königs Wusterhausen)"/>
    <tag k="name" v="Königs Wusterhausen"/>
    <tag k="opengeodb:lat" v="52.296999"/>
    <tag k="opengeodb:lon" v="13.6297229"/>
    <tag k="place" v="town"/>
    <tag k="population" v="33370"/>
  </node>
 ...

Un simple script de récolteuse de perl:

#!/usr/bin/perl -w 
# --------------------------------------------------------
# Simple OSM Harvester 
# --------------------------------------------------------
use strict;
use XML::XPath;
use XML::XPath::XMLParser;

# Use UFT 8
binmode(STDOUT, ":utf8");
# --------------------------------------------------------
# Parameter @todo put params into commandline arguments
# --------------------------------------------------------
    # while ($cmd = shift) {
    #  $level = shift if $cmd =~ /level/;
    #  $east  = shift if $cmd =~ /east/;
    #  ....
    # }
# --------------------------------------------------------
my $level="town";
my $east=14;
my $west=12;
my $north=54;
my $south=52;

# --------------------------------------------------------
# OS Call wget
# --------------------------------------------------------
my @call =`wget -O osm-town-$west-$south-$east-$north.xml "http://open.mapquestapi.com/xapi/api/0.6/node[place=$level][bbox=$west,$south,$east,$north]"`;    

# --------------------------------------------------------
# Parse the stuff
# --------------------------------------------------------
my $xp = XML::XPath->new(filename => "osm-town-$west-$south-$east-$north.xml");
my $nodes = $xp->find('/osm/node'); # find all paragraphs
for my $node ($nodes->get_nodelist) {
    # print $n, "\n";
    my $lat = $xp->find('./@lat', $node);
    my $lon = $xp->find('./@lon', $node);
    my $name = $xp->find('./tag[@k=\'name\']/@v', $node);
    my $pop  = $xp->find('./tag[@k=\'population\']/@v', $node);
    print "name=$name\tlogitude=$lon\tlatitude=$lat\tpopulation=$pop\n";
}

# --------------------------------------------------------
# EOF
# --------------------------------------------------------

Sortie générée (désolé LANG allemand de wget)

./osm.pl
Warnung: Joker-Zeichen werden bei HTTP nicht unterstützt.
--2014-02-04 01:13:23--  http://open.mapquestapi.com/xapi/api/0.6/node[place=town][bbox=12,52,14,54]
Auflösen des Hostnamen »open.mapquestapi.com (open.mapquestapi.com)«... 205.188.201.176
Verbindungsaufbau zu open.mapquestapi.com (open.mapquestapi.com)|205.188.201.176|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: nicht spezifiziert [text/xml]
In »»osm-town-12-52-14-54.xml«« speichern.

    [   <=>                                                                                                                                                                                  ] 128.148      242K/s   in 0,5s    

2014-02-04 01:13:30 (242 KB/s) - »»osm-town-12-52-14-54.xml«« gespeichert [128148]

name=Königs Wusterhausen    logitude=13.6244389 latitude=52.2994511 population=q33370
name=Teterow    logitude=12.5753569 latitude=53.7709505 population=9647
name=Neukalen   logitude=12.7905515 latitude=53.822817  population=2304
name=Premnitz   logitude=12.3384178 latitude=52.5310487 population=9671
name=Havelberg  logitude=12.0733335 latitude=52.8234367 population=7400
name=Teltow logitude=13.2644532 latitude=52.4016457 population=19541
huckfinn
la source
0

Vous pouvez essayer celui de geonames qui est absolument gratuit ..

Il existe également de nombreuses bases de données payantes sur Internet comme www.worldcitiesdatabase.com ou geodatasource.com.

Vous pouvez également utiliser des données de rue ouvertes mais vous devez comprendre le système de marquage pour extraire les données.

Nitine
la source