使用GeocodeQuery与加拿大邮政编码

3
我在使用Windows Phone 8地理编码时遇到了问题。使用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();
1个回答

1

虽然这并没有解决地图服务的地理编码功能中出现的限制,但对我来说是一个小小的解决方法...

GetStringLocation_QueryCompleted函数返回0个结果时,我运行正则表达式检查搜索是否为有效的邮政编码。如果是,则获取前3个字符并重新运行地理编码。

使用此方法要确保在调用次要释放函数(如果您在单独的函数中执行)时检查地理编码是否正在运行(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 是包含接受字符串的代码的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接