如何从AIR中的经度和纬度获取国家名称?

How to get country name from longitudes and latitudes in AIR?

从经度和纬度获取国家名称的最简单方法是什么。我一直在网上查找,确实找到了 ANE,但它不是免费的。我需要一个非常简单的方法,我不需要任何其他功能。它可以在线或离线。 我发现的另一个 API 是 Geonames API 但我似乎无法找到如何在 AS3 中使用它来通过提供经度和纬度来获取国家/地区名称。

非常感谢任何帮助。

正如您在问题中提到的,您可以使用 findNearby Geonames's WebService which you can use to load the data ( XML or JSON ) via an URLLoader 对象:

var lat:Number = 37.26801,
    lng:Number = -115.80031;

var url:String = 'http://api.geonames.org/findNearby?lat=' + lat + '&lng=' + lng + '&username=demo';

var url_request:URLRequest = new URLRequest(url);

var url_loader:URLLoader = new URLLoader();
    url_loader.addEventListener(Event.COMPLETE, on_DataLoad);
    url_loader.load(url_request);

function on_DataLoad(e:Event): void 
{
    var xml:XML = new XML(e.target.data);
    trace(xml.geoname.countryName);         // gives : United States
}

该请求返回的 XML 数据:

<geonames>
    <geoname>
        <toponymName>Groom Lake</toponymName>
        <name>Groom Lake</name>
        <lat>37.26801</lat>
        <lng>-115.80031</lng>
        <geonameId>5505124</geonameId>
        <countryCode>US</countryCode>
        <countryName>United States</countryName>
        <fcl>H</fcl>
        <fcode>LK</fcode>
        <distance>0.07718</distance>
    </geoname>
</geonames>

对于此代码,我使用了可用的演示帐户来测试 Geonames 的 Web 服务,但您应该创建自己的帐户才能使用它。

您还可以使用 Google Maps Geocoding API after getting a key :

url = 'https://maps.googleapis.com/maps/api/geocode/xml?latlng=' + lat + ',' + lng + '&key=YOUR_API_KEY_GOES_HERE';

然后

// ...

function on_DataLoad(e:Event): void 
{
    var xml:XML = new XML(e.target.data);

    trace(xml.result[0].address_component.(type[0] == 'country').long_name);        // gives : United States
}

XML 内容是:

<GeocodeResponse>
    <status>OK</status>
    <result>
        <type>route</type>
        <formatted_address>Unnamed Road, Nevada, United States</formatted_address>
        <address_component>
            <!-- ... -->
        </address_component>
        <address_component>
            <!-- ... -->
        </address_component>
        <address_component>
            <!-- ... -->
        </address_component>
        <address_component>
            <long_name>United States</long_name>
            <short_name>US</short_name>
            <type>country</type>
            <type>political</type>
        </address_component>
        <geometry>
            <!-- ... -->
        </geometry>
        <place_id>
            <!-- ... -->
        </place_id>
    </result>
    <!--        
        ...        
    -->
</GeocodeResponse>

希望能帮到你。