Suchen Sie eine umfassende Liste von Breiten- und Längengraden für Städte auf der ganzen Welt?

21

Ich entwickle eine Anwendung, mit der die Entfernung zwischen Städten anhand der jeweiligen Längen- und Breitengrade berechnet wird.

Das Problem ist jedoch, wo Sie eine umfassende Liste der Breiten- und Längengrade dieser Städte erhalten.

Hallo
quelle
3
Ich würde schauen Sie sich um developers.google.com/maps und wiki.openstreetmap.org/wiki/API für einen Start
Klingt nach einer guten Abfrage für WolframAlpha.com.

Antworten:

25

Vergessen Sie nicht den Geonames- Datensatz:

Die geografische Datenbank GeoNames deckt alle Länder ab und enthält über acht Millionen Ortsnamen, die kostenlos heruntergeladen werden können.

RyanDalton
quelle
9
Herunterladen eine „Städte“ Datei auf download.geonames.org/export/dump
Mike T
Aber kann jemand sagen, wie genau die USA Stadt Punktdaten von Geoname, ich meinehttp://download.geonames.org/export/dump/
Islam
1
6 Jahre später ... die kostenlose Version hat 7300 Städte und die kostenpflichtige Version hat 3,9 Millionen. simplemaps.com/data/world-cities
Synesso
6

Die besiedelten Orte der natürlichen Erde könnten eine weitere Option sein.

radek
quelle
Danke für die Hilfe. Aber ich suchte nach Breiten- und Längengraden von Städten auf der ganzen Welt.
Hallo
2
@ dotman14: Datensatz soll bestehen aus all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions. Und Latlon-Werte können als zwei Spalten in der DBFDatei gefunden werden.
Radek
Auch dieser Online-DBF-Konverter zu CSV scheint auf dbfconv.com zu funktionieren, aber die Beschränkung der Upload-Dateigröße erlaubt nur die Konvertierung einer "einfachen" Version der Datenbank.
Nakilon
Eine andere Notiz ist POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"für meine Stadt, die in der Epoche der UdSSR wirklich maximal 173000 war.
Nakilon
3

Sie können die Daten auch aus OpenStreetMap (z. B. mithilfe der hier beschriebenen API ) oder einfach aus Wikipedia extrahieren . Die meisten Wikipedia-Seiten für Städte haben die Koordinaten der Stadt.

Dies würde natürlich ein wenig Skripting und möglicherweise eine Liste der gewünschten Städte erfordern.


quelle
3

Verwenden Sie OpenStreetMap, Internetzugang, das wget-Tool und einen XPath-Filter wie XML :: XPath . Die Anfrage sollte in 2x2-Grad-BBoxen aufgeteilt werden. Hier ein Beispiel für 12 ° West bis 14 ° Ost und 52 ° Süd und 54 ° Nord. Berlin ist drinnen ... mit vielen Infos. Für kleinere Einheiten verwenden Sie place = town. Das eingehende Format ist 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>
 ...

Ein einfaches Perl Harvester Skript:

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

Generierte Ausgabe

./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
quelle
0

Sie können die Version von Geonames ausprobieren, die absolut kostenlos ist.

Es gibt auch viele kostenpflichtige Datenbanken im Internet wie www.worldcitiesdatabase.com oder geodatasource.com

Sie können auch offene Straßendaten verwenden, müssen jedoch das Tagging-System kennen, um die Daten extrahieren zu können.

Nitin
quelle