2010-04-23 158 views
31

我需要世界上所有国家的列表,一个国家的经纬度坐标。需要世界所有国家的经纬度坐标的列表

我看了一下GeoNames,但我可以看到的所有列表都包含同一个列表中的国家和城市。我想我可以解析它并过滤掉这些国家,但我希望避免这种情况。

基本上,我需要什么;

国家名称 - 纬度/长坐标(某种国家中心)

它并不需要说一下大陆什么,但我不介意,如果它没有。

_L

+0

谢谢,abelenky – ptrn 2010-04-23 22:31:07

+0

检查http://dev.maxmind.com/geoip/legacy/codes/country_latlon/ – Boern 2016-06-10 08:22:41

回答

28

两个Web服务,可能是你的兴趣来建立这样的数据:

你可以称之为http://ws.geonames.org/countryInfo获得的国家代码和国家的完整列表名称,然后分别拨打http://ws.geonames.org/search?country=<code>&name=<name>&maxRows=1以获得该国中心点的经纬度。 (例如:http://ws.geonames.org/search?country=US&name=United%20States&maxRows=1

编辑

这里是一个C#脚本,您可以对上面列出的服务运行。
你可以像LinqPad那样运行它。

void Main() 
{ 
    var countries = new List<Country>(); 
    XDocument xmlDoc = XDocument.Load(@"http://ws.geonames.org/countryInfo"); 
    var countryList = (from c in xmlDoc.Descendants("country") select c); 

    foreach (var country in countryList) 
    { 
     var countryPath = string.Format("http://ws.geonames.org/search?country={0}&name={1}&maxRows=1", country.Element("countryCode").Value, country.Element("countryName").Value); 
     var element = (from e in XDocument.Load(countryPath).Descendants("geoname") select e).FirstOrDefault(); 

     countries.Add(new Country 
     { 
      Code = element.Element("countryCode").Value, 
      Name = element.Element("countryName").Value, 
      Latitude = Convert.ToDecimal(element.Element("lat").Value), 
      Longitude = Convert.ToDecimal(element.Element("lng").Value), 
      Continent = country.Element("continentName").Value 
     }); 
    } 

    Console.WriteLine("{0},{1},{2},{3},{4}","Continent", "Code", "Name", "Latitude", "Longitude"); 

    foreach (var country in countries) 
    { 
     Console.WriteLine("{0},{1},{2},{3},{4}",country.Continent, country.Code, country.Name, country.Latitude, country.Longitude);  
    } 
} 

public class Country 
{ 
    public string Continent {get;set;} 
    public string Name { get;set;} 
    public string Code { get;set;} 
    public decimal Latitude { get;set;} 
    public decimal Longitude { get;set;} 
} 
+0

整洁的解决方案。我已经用Andrew McGregor的方式解决了这个问题,但这非常聪明。谢谢 – ptrn 2010-04-24 02:44:19

+1

事实上,这原来是最好的解决方案。中央情报局的实况记录中有一个与国会大厦协调。 – ptrn 2010-04-24 20:12:41

1

一个国家的中心概念不是很清楚。首都城市的协调会做什么?如果是这样,你可能能够从维基百科等地方相对直接地提取它们。毕竟只有200左右。也就是说,我注意到CIA World Factbook(在线提供)给出了国家地理中心的大致坐标。

+0

只要它是一致的,它究竟是不是很重要,无论是国会大厦还是有点在中心。感谢提示 – ptrn 2010-04-24 00:04:37

5

那么,你可以下载this GIS layer并在其上运行点对多边形。

编辑:也许this list会做。

+0

啊,完美!我以前真的用过它,我想我会忘记它。感谢一群:-) – ptrn 2010-04-23 23:59:39

+0

最后一个环节缺乏南苏丹FYI。第一个链接被打破。 – thadk 2015-02-06 21:40:32

23

还有这个http://dev.maxmind.com/geoip/legacy/codes/country_latlon/,这正是我们都是寻找,但没有解析需要。它的csv会很好地发挥

+2

如果只有你快了一年半,它会有所帮助:) – ptrn 2011-12-15 11:35:55

+0

我只是跳了进来:-D – ioc32 2012-01-06 20:13:04

+0

警告:MaxMind的越南的坐标是'16.0000,106.0000',它实际上位于老挝南部的中部 - 绝对没用。美国中央情报局的世界实况报道协议是“16 10 N,107 50 E”,这对越南中部是正确的。不幸的是,这些是我测试的第一个也是唯一的MaxMind坐标,因此我不相信任何其他人。 CIA Fact Book是要走的路。 – verbumSapienti 2014-02-20 13:06:49

0

如果您下载最新版本的从天然地球这个国家的国际数据文件:ne_10m_admin_0_countries.zip

然后把它变成QGIS,你CA n通过运行菜单项Vector-> Geometry Tools-> Polygon Centroids轻松获取质心,然后通过右击和另存为导出。

-2

geographicdb PAKAGE与纬度经度和时区信息+240国家与他们的城市的名称和国家代码和27万点的记录

世界城市数据库

你可以下载geographicdb PAKAGE from here

+1

你可以再次分享该链接?当前链接被破坏 – Pooran 2015-07-24 08:22:42

6

这里是一个Google CSV document ,与国家坐标。

+1

tks,你如何下载它?或者你只是复制和粘贴和编辑,以获得它的CSV格式? – HattrickNZ 2015-08-12 19:57:19

+0

您可以从源代码复制表格,然后按照您的喜好进行处理(例如,在MS Word中编写简单的REGEX,甚至在Python中编写简单的REGEX,C#等)。 – 2015-09-04 16:14:59

+3

在这里,我使用了在线转换器,您可以获取我的文件:https://drive.google.com/file/d/0B52RjTfri3LPNDFuc0JHRDkxNE0/view?usp=sharing – yshahak 2017-08-18 08:42:27