¿Busca una lista completa de valores de latitud y longitud para ciudades de todo el mundo?

22

Estoy desarrollando una aplicación que calcula la distancia entre ciudades utilizando sus respectivos valores de longitud y latitud.

¿Pero el problema es dónde obtener una lista completa de los valores de latitud y longitud de estas ciudades?

Hola
fuente
3
Para empezar
Suena como una buena consulta para WolframAlpha.com.

Respuestas:

26

No te olvides del conjunto de datos Geonames :

La base de datos geográficos de GeoNames cubre todos los países y contiene más de ocho millones de nombres de lugares que se pueden descargar de forma gratuita.

RyanDalton
fuente
99
descargue un archivo de "ciudades" en download.geonames.org/export/dump
Mike T
Pero ¿puede alguien dirá la cantidad exacta de los datos de los puntos de la ciudad de EE.UU. geoname, me refierohttp://download.geonames.org/export/dump/
SIslam
1
6 años después ... la versión gratuita tiene 7300 ciudades y la versión paga tiene 3.9 millones. simplemaps.com/data/world-cities
Synesso
6

Los lugares poblados de la Tierra natural podrían ser otra opción.

radek
fuente
Gracias por la ayuda. Pero estaba buscando Latitud y Longitudes de ciudades alrededor del mundo.
hola
2
@ dotman14: el conjunto de datos debe consistir en all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions. Y los valores de latlon se pueden encontrar como dos columnas dentro del DBFarchivo.
radek
Además, este convertidor DBF en línea a CSV parece funcionar dbfconv.com pero el límite de tamaño de archivo de carga permite que solo la versión "simple" de la base de datos sea convertidor.
Nakilon
Otra nota es POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"para mi ciudad, que realmente era 173000 máximo en la época de la URSS.
Nakilon
3

También puede extraer los datos de OpenStreetMap (usando, por ejemplo, su API, como se describe aquí ), o simplemente de Wikipedia. La mayoría de las páginas de Wikipedia para ciudades tienen las coordenadas de la ciudad.

Por supuesto, esto requeriría un poco de secuencias de comandos, y posiblemente una lista de las ciudades que desea.


fuente
3

Utilice OpenStreetMap, acceso a Internet, la herramienta wget y un filtro XPath como XML :: XPath . La solicitud debe dividirse en BBoxes de 2x2 grados. Aquí un ejemplo de 12 grados oeste hasta 14 grados este y 52 grados sur y 54 grados norte. Berlín está dentro ... con mucha información. Para unidades más pequeñas, use place = town. El formato entrante es 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 cosechadora 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
# --------------------------------------------------------

Salida generada (lo siento LANG alemán 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
fuente
0

Puedes probar el de geonames que es absolutamente gratis.

También hay muchas bases de datos pagas en Internet como www.worldcitiesdatabase.com o geodatasource.com.

También puede usar datos de calles abiertas, pero necesita comprender el sistema de etiquetado para extraer los datos.

Nitina
fuente