ReverseGeocodeQuery产生的语言与系统语言不同

时间:2014-02-14 17:10:59

标签: c# windows-phone-8 windows-phone cultureinfo reverse-geocoding

我正在使用ReverseGeocodeQuery类从坐标中获取位置名称:

ReverseGeocodeQuery query = new ReverseGeocodeQuery();
query.GeoCoordinate = new GeoCoordinate(latitude, longitude);
query.QueryCompleted += (sender, args) =>
{
    var result = args.Result[0].Information.Address;
    Location location = new Location(result.Street, result.City, result.State, result.Country);
};            
query.QueryAsync();

问题是结果以手机的系统语言返回。由于我使用地名进行标记,因此我需要使用相同的语言,最好是英语。

我尝试将CurrentCulture设置为en-US

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

但我仍然使用配置为系统语言的语言获得结果。

是否可以用ReverseGeocodeQuery获得所需语言的结果?

2 个答案:

答案 0 :(得分:1)

结果始终使用系统语言。也许你可以保存这个地方的名字,也可以保存lat,或者使用翻译服务翻译成englis

答案 1 :(得分:0)

只是为了完成Josue的回答。获得反向地理编码结果的替代方法是使用允许指定它的公共REST API之一(例如Google或Nokia Here)。虽然它们的使用很简单并且可以自定义,但缺点是必须注册到服务才能获得密钥。

我决定使用HERE的API。因此,下面你会发现我用来获得与使用问题中的代码相同的结果的代码,但强制结果是英文:

using (HttpClient client = new HttpClient())
{
    string url = String.Format("http://reverse.geocoder.cit.api.here.com/6.2/reversegeocode.json"
                    + "?app_id={0}"
                    + "&app_code={1}"
                    + "&gen=1&prox={2},{3},100"
                    + "&mode=retrieveAddresses"
                    + "&language=en-US", 
                    App.NOKIA_HERE_APP_ID, App.NOKIA_HERE_APP_CODE, latitude.ToString(CultureInfo.InvariantCulture), longitude.ToString(CultureInfo.InvariantCulture));

    var response = await client.GetAsync(url);
    var json = await response.Content.ReadAsStringAsync();
    dynamic loc = JObject.Parse(json);               
    dynamic address = JObject.Parse(loc.Response.View[0].Result[0].Location.Address.ToString());

    string street = address.Street;
    string city = address.City;
    string state = address.State;
    string country = address.Country;

    Location location = new Location(street, city, state, country);
}