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

22

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

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

Здравствуйте
источник
3
Для начала я бы посмотрел на developers.google.com/maps и wiki.openstreetmap.org/wiki/API
Похоже, хороший запрос для WolframAlpha.com.

Ответы:

6

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

PolyGeo
источник
2
Я не понимаю, как это список мировых городов? Эта ссылка даже правильная? Разве это не должно указывать на GeoliteCity?
Большой волшебник
Ссылка на dev.maxmind.com/geoip/legacy/geolite
vero4ka
У него нет названия штата. Есть ли способ получить это?
Вивек Санчети
26

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

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

RyanKDalton-OffTheGridMaps
источник
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
huckfinn
источник
0

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

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

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

Нитин
источник