Cerchi un elenco completo dei valori di latitudine e longitudine per le città di tutto il mondo?


22

Sto sviluppando un'applicazione che calcola la distanza tra le città utilizzando i rispettivi valori di Longitudine e Latitudine.

Ma il problema è dove ottenere un elenco completo dei valori di latitudine e longitudine di queste città?


3
Mi guarderei intorno agli sviluppatori.google.com/maps e wiki.openstreetmap.org/wiki/API per iniziare

Sembra una buona domanda per WolframAlpha.com.

Risposte:



26

Non dimenticare il set di dati di Geonames :

Il database geografico GeoNames copre tutti i paesi e contiene oltre otto milioni di nomi di luoghi che possono essere scaricati gratuitamente.


9
scarica un file "città" su download.geonames.org/export/dump
Mike T

Ma qualcuno può dire quanto siano accurati i dati sui punti città degli Stati Uniti dal geoname, intendohttp://download.geonames.org/export/dump/
SIslam,

1
6 anni dopo ... la versione gratuita ha 7300 città e la versione a pagamento ha 3,9 milioni. simplemaps.com/data/world-cities
Synesso

6

I luoghi popolati della Terra naturale potrebbero essere un'altra opzione.


Grazie per l'aiuto. Ma stavo cercando Latitude e Longitudes of Cities in tutto il mondo.
ciao

2
@ dotman14: set di dati deve essere costituito da all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions. E i valori di latlon possono essere trovati come due colonne all'interno del DBFfile.
Radek,

Anche questo convertitore DBF online in CSV sembra funzionare dbfconv.com ma il limite di dimensioni del file di upload consente di convertire solo la versione "semplice" del database.
Nakilon,

Un'altra nota è POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"per la mia città, che era in realtà 173000 al massimo nell'epoca dell'URSS.
Nakilon,

3

Puoi anche estrarre i dati da OpenStreetMap (usando ad esempio la loro API, come descritto qui ), o semplicemente da Wikipedia. La maggior parte delle pagine di Wikipedia per le città hanno le coordinate della città.

Naturalmente, ciò richiederebbe un po 'di scripting, e forse un elenco delle città che desideri.


3

Usa OpenStreetMap, l'accesso a Internet, lo strumento wget e un filtro XPath come XML :: XPath . La richiesta deve essere suddivisa in BBox 2x2 gradi. Ecco un esempio per 12 gradi ovest fino a 14 gradi est e 52 gradi sud e 54 gradi nord. Berlino è dentro .. con molte informazioni. Per unità più piccole usare place = town. Il formato in arrivo è 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 semplice script perl Harvester:

#!/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
# --------------------------------------------------------

Output generato (scusate il LANG tedesco di 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



0

Puoi provare quello da geonames che è assolutamente gratuito ..

Ci sono anche molti database a pagamento su Internet come www.worldcitiesdatabase.com o geodatasource.com

Puoi anche usare dati di strada aperti ma devi capire il sistema di tagging per estrarre i dati.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.