我遇到了Windows Phone 8 Geocoding的问题。使用Microsoft.Phone.Maps.Services.QuerycodeQuery,如果我使用完整的加拿大邮政编码(M5G 1Z4),我将无法获得任何结果。如果我只使用前3个字符(M5G),我会得到预期的结果。
我没有对数据做任何具体的事情,只是将其传递给Microsoft进行地理编码。这背后是否存在具体原因,还是有其他方法可以查找位置?
代码:
Geocode = new GeocodeQuery()
{
SearchTerm = LocationString,
GeoCoordinate = UserCoordinates ?? new GeoCoordinate(),
MaxResultCount = 1
};
Geocode.QueryCompleted += GetStringLocation_QueryCompleted;
Geocode.QueryCompleted += CleanupGeocode;
Geocode.QueryAsync();
答案 0 :(得分:1)
虽然这并没有解决地图服务的地理编码功能中出现的限制,但这是一个对我有用的小解决方法......
当GetStringLocation_QueryCompleted
函数返回0结果时,我运行一个正则表达式来检查搜索是否是有效的邮政编码。如果它是1,那么我抓住前3个字符并重新运行地理编码。
使用这种方法确保的一件事是,在调用辅助dispose函数时(如果在单独的函数中执行),检查以确保地理编码未运行(IsBusy)
正则表达式(Utility.IsPostalCode):
Regex reg = new Regex("^[ABCEGHJ-NPRSTVXY]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
return reg.IsMatch(Input);
在GetStringLocation_QueryCompleted
中if (e.Result.Count == 0 && Utility.IsPostalCode(((GeocodeQuery)e.UserState).SearchTerm))
{
if (Geocode != null && Geocode.IsBusy)
Geocode.CancelAsync();
GetStringLocation(((GeocodeQuery)e.UserState).SearchTerm.Substring(0, 3));
}
GetStringLocation
将是包含接受字符串的问题中的代码的函数。