Tôi đang phát triển một ứng dụng tính toán khoảng cách giữa các thành phố bằng các giá trị Kinh độ và Vĩ độ tương ứng.
Nhưng vấn đề là ở đâu để có được một danh sách toàn diện về các giá trị vĩ độ và kinh độ của các thành phố này?
Tôi đang phát triển một ứng dụng tính toán khoảng cách giữa các thành phố bằng các giá trị Kinh độ và Vĩ độ tương ứng.
Nhưng vấn đề là ở đâu để có được một danh sách toàn diện về các giá trị vĩ độ và kinh độ của các thành phố này?
Câu trả lời:
GeoLite City tại Cơ sở dữ liệu có thể tải xuống GeoLite Legacy gần như là tiêu chuẩn theo như tôi biết.
Đừng quên bộ dữ liệu Geonames :
Cơ sở dữ liệu địa lý GeoNames bao gồm tất cả các quốc gia và chứa hơn tám triệu dấu vị trí có sẵn để tải xuống miễn phí.
http://download.geonames.org/export/dump/
Địa điểm đông dân cư của Trái đất tự nhiên có thể là một lựa chọn khác.
all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions
. Và giá trị latlon có thể được tìm thấy dưới dạng hai cột trong DBF
tệp.
POP_MAX,POP_MIN,POP_OTHER = "158000","113700","107890"
dành cho thị trấn của tôi, đó thực sự là tối đa 173000 trong kỷ nguyên của Liên Xô.
Bạn cũng có thể trích xuất dữ liệu từ OpenStreetMap (sử dụng API của họ, như được mô tả ở đây ) hoặc đơn giản là từ Wikipedia. Hầu hết các trang Wikipedia cho các thành phố có tọa độ của thành phố.
Tất nhiên, điều này sẽ đòi hỏi một chút kịch bản, và có thể là một danh sách các thành phố bạn muốn.
Sử dụng OpenStreetMap, truy cập Internet, công cụ wget và Bộ lọc XPath như XML :: XPath . Yêu cầu nên được chia thành các BBoxes 2x2 độ. Dưới đây là một ví dụ cho 12 độ tây cho đến 14 độ đông và 52 độ nam và 54 độ bắc. Berlin ở bên trong .. với rất nhiều infos. Đối với các đơn vị nhỏ hơn sử dụng nơi = thị trấn. Định dạng đến là 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>
...
Một kịch bản máy gặt đập perl đơn giản:
#!/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
# --------------------------------------------------------
Đã tạo đầu ra (xin lỗi LANG của 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
Đây là một tùy chọn khác cho Thành phố toàn cầu: GRUMP phiên bản 1 hiện có lớp điểm thanh toán miễn phí với các thuộc tính, chẳng hạn như kích thước dân số.
http://sedac.ciesin.columbia.edu/data/set/grump-v1-scharge-point
Tôi đã tải xuống danh sách các trích dẫn từ http://www.zuzemo.com/world-cities-and-admaster-divutions-database-german-edition , họ có các ngôn ngữ khác tiếng Đức, tiếng Ý, tiếng Tây Ban Nha ...
Bạn có thể thử một từ tên địa lý hoàn toàn miễn phí ..
Ngoài ra còn có nhiều cơ sở dữ liệu trả phí trên internet như www.worldcitiesdatabase.com hoặc geodatasource.com.
Bạn cũng có thể sử dụng dữ liệu đường phố mở nhưng bạn cần hiểu hệ thống gắn thẻ để trích xuất dữ liệu.
Một cơ sở dữ liệu miễn phí khác có 30 ký tự .. https://www.maxmind.com/en/worldcities
Tôi đang sử dụng geodata từ www.ip2location.com