Besoin d'une liste de tous les pays du monde, avec une coordonnée de longitude et de latitude [fermé]

j'ai besoin d'une liste de tous les pays dans le monde, avec lat / long coordonnée pour le pays.

j'ai regardé GeoNames, mais tout ce que je peux sembler trouver sont des listes qui ont les pays aussi bien que des villes dans la même Liste. Je suppose que je peux l'analyser et filtrer les pays, mais je m'attendais à éviter.

en gros, ce dont j'ai besoin;

nom du pays - lat/long coordonnée (une sorte de Centre de la pays)

il n'a pas besoin de dire quoi que ce soit sur le continent, mais ça ne me dérangerait pas si c'était le cas.

_L

34
demandé sur skaffman 2010-04-24 02:21:41

11 réponses

deux services web qui peuvent vous intéresser pour construire ces données:

on pourrait appeler http://ws.geonames.org/countryInfo pour obtenir la liste complète des codes de pays et les noms de pays, et ensuite appeler http://ws.geonames.org/search?country=<code>&name=<name>&maxRows=1 sur chaque pour obtenir ce qui semble être le lat / long du point central du pays. (ex. http://ws.geonames.org/search?country=US&name=United%20States&maxRows=1)

EDIT

voici un script C# que vous pouvez exécuter contre les services énumérés ci-dessus.

Vous pouvez exécuter ceci comme il est dans 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;} 
}
29
répondu Nate 2012-07-29 02:02:24

il y a aussi ceci http://dev.maxmind.com/geoip/legacy/codes/country_latlon/, ce qui est exactement ce que nous cherchions tous les deux, mais aucune analyse n'était nécessaire. Ses csv qui jouent bien

23
répondu ioc32 2014-07-14 07:49:21