Как я могу найти geonames, используя их API, и получить название и координаты города? Ссылка на их APIКак использовать geonames API для получения названия города?
1
A
ответ
4
Конечно, это полностью зависит от фактического поиска, который вы хотите выполнить. Предположим, вы хотите найти все места в Великобритании, которые начинаются с Lon
. URL, который будет выполнять этот запрос (в качестве примера, многое может измениться для реального поиска) является:
http://api.geonames.org/search?name_startsWith=lon&country=GB&maxRows=10&username=demo
Вы можете совать, что в вашем браузере и увидеть результаты:
<geonames style="MEDIUM">
<totalResultsCount>334</totalResultsCount>
<geoname>
<toponymName>London</toponymName>
<name>London</name>
<lat>51.50853</lat>
<lng>-0.12574</lng>
<geonameId>2643743</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>
<fcl>P</fcl>
<fcode>PPLC</fcode>
</geoname>
<geoname>
<toponymName>Lone</toponymName>
<name>Lone</name>
<lat>58.33333</lat>
<lng>-4.88333</lng>
<geonameId>2643732</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>
<fcl>P</fcl>
<fcode>PPL</fcode>
</geoname>
<!-- and so on ... -->
</geonames>
Обратите внимание, что вы хотите, чтобы lat
и lng
элементов под каждым geoname
. С помощью LINQ к XML (включая System.Linq
и System.Linq.Xml
в своих декларациях пространства имен):
var xml = XElement.Load("http://api.geonames.org/search?name_startsWith=lon&country=GB&maxRows=10&username=demo");
var locations = xml.Descendants("geoname").Select(g => new {
Name = g.Element("name").Value,
Lat = g.Element("lat").Value,
Long = g.Element("lng").Value
});
foreach (var location in locations)
{
Console.WriteLine("{0}: {1}, {2}", location.Name, location.Lat, location.Long);
}
Конечно, вы можете использовать эти значения по-разному, и вы можете разобрать Lat
и Long
в парном разряде.
Это сделало. Спасибо! – Megaoctane