C# 将GeocodeQuery与加拿大邮政编码结合使用

C# 将GeocodeQuery与加拿大邮政编码结合使用,c#,geocoding,windows-phone,windows-phone-8,C#,Geocoding,Windows Phone,Windows Phone 8,我对Windows Phone 8地理编码有问题。使用,如果我使用完整的加拿大邮政编码(M5G1Z4),则不会得到任何结果。如果我只使用前3个字符(M5G),我会得到预期的结果 我并没有对数据做任何具体的处理,只是将数据传递给微软进行地理编码。这背后是否有具体原因,或者是否有其他方法查找位置 代码: 虽然这并没有解决映射服务的地理代码功能中的限制,但这是一个适合我的小解决方案 当GetStringLocation\u QueryCompleted函数返回0个结果时,我运行正则表达式检查搜索是否为

我对Windows Phone 8地理编码有问题。使用,如果我使用完整的加拿大邮政编码(M5G1Z4),则不会得到任何结果。如果我只使用前3个字符(M5G),我会得到预期的结果

我并没有对数据做任何具体的处理,只是将数据传递给微软进行地理编码。这背后是否有具体原因,或者是否有其他方法查找位置

代码:


虽然这并没有解决映射服务的地理代码功能中的限制,但这是一个适合我的小解决方案

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

使用这种方法需要确保的一件事是,在调用次要dispose函数时(如果在单独的函数中执行此操作),检查以确保地理代码没有运行(IsBusy)

Regex(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
将是包含接受字符串的问题代码的函数

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));
}