Ищете полный список значений широты и долготы для городов по всему миру?


22

Я разрабатываю приложение, которое рассчитывает расстояние между городами, используя их соответствующие значения долготы и широты.

Но проблема в том, где взять исчерпывающий список значений широты и долготы этих городов?


3
Для начала я бы посмотрел на developers.google.com/maps и wiki.openstreetmap.org/wiki/API

Похоже, хороший запрос для WolframAlpha.com.

Ответы:


6

Насколько мне известно, GeoLite City в GeoLite Legacy Загружаемые базы данных - это в значительной степени стандарт.


2
Я не понимаю, как это список мировых городов? Эта ссылка даже правильная? Разве это не должно указывать на GeoliteCity?
Большой волшебник


У него нет названия штата. Есть ли способ получить это?
Вивек Санчети

26

Не забудьте про набор данных Geonames :

Географическая база данных GeoNames охватывает все страны и содержит более восьми миллионов географических названий, которые можно бесплатно загрузить.


9
загрузить файл "сити" по адресу download.geonames.org/export/dump
Майк Т

Но может ли кто-нибудь сказать, насколько точны данные о точках города США из Геонама, я имею в видуhttp://download.geonames.org/export/dump/
SIslam

1
Спустя 6 лет ... бесплатная версия насчитывает 7300 городов, а платная - 3,9 миллиона. simplemaps.com/data/world-cities
Synesso

6

Населенные пункты Естественной Земли могут быть другим вариантом.


Спасибо за помощь. Но я искал широту и долготу городов по всему миру.
Привет

2
@ dotman14: набор данных должен состоять из all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions. И значения latlon могут быть найдены как два столбца внутри DBFфайла.
Радек

Также этот онлайн конвертер DBF в CSV, кажется, работает dbfconv.com, но ограничение размера загружаемого файла позволяет конвертировать только «простую» версию базы данных.
Накилон

Еще одна заметка POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"для моего города, который действительно был 173000 макс в эпоху СССР.
Накилон

3

Вы также можете извлечь данные из OpenStreetMap (используя, например, их API, как описано здесь ) или просто из Википедии. Большинство страниц Википедии для городов имеют координаты города.

Конечно, для этого потребуется немного сценариев и, возможно, список городов, которые вы хотите.


3

Используйте OpenStreetMap, доступ в Интернет, инструмент wget и фильтр XPath, такой как XML :: XPath . Запрос должен быть разделен на 2x2 степени BBoxes. Вот пример для 12 градусов на запад до 14 градусов на восток и 52 градусов на юг и 54 градуса на север. Берлин внутри .. с большим количеством информации. Для небольших единиц используйте место = город. Входящий формат - 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>
 ...

Простой скрипт 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
# --------------------------------------------------------

Сгенерированный вывод (извините немецкий LANG 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

Вы можете попробовать тот из geonames, который абсолютно бесплатный ..

В Интернете также есть много платных баз данных, таких как www.worldcitiesdatabase.com или geodatasource.com.

Вы также можете использовать открытые данные улиц, но вы должны понимать систему тегов для извлечения данных.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.