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.
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.
Antworten:
GeoLite City bei GeoLite Legacy Herunterladbare Datenbanken sind meines Wissens nach der Standard.
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.
http://download.geonames.org/export/dump/
Die besiedelten Orte der natürlichen Erde könnten eine weitere Option sein.
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 DBF
Datei gefunden werden.
POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"
für meine Stadt, die in der Epoche der UdSSR wirklich maximal 173000 war.
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.
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
Hier ist eine weitere Option für Global Cities: GRUMP Version 1 verfügt jetzt über eine kostenlose Ebene von Siedlungspunkten mit Attributen wie der Bevölkerungsgröße.
http://sedac.ciesin.columbia.edu/data/set/grump-v1-settlement-points
Ich habe die Liste der Zitate von http://www.zuzemo.com/world-cities-and-administrative-divisions-database-german-edition heruntergeladen , sie haben andere Sprachen Deutsch, Italienisch, Spanisch ...
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.
Eine weitere kostenlose Datenbank bla bla bis 30 Zeichen .. https://www.maxmind.com/en/worldcities
Ich verwende die Geodaten von www.ip2location.com