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

标签 c# geocoding windows-phone windows-phone-8

我在使用 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();

最佳答案

虽然这没有解决 map 服务的地理编码功能中出现的限制,但它是一种对我有用的小解决方法...

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

关于c# - 将 GeocodeQuery 与加拿大邮政编码结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709416/

相关文章:

c# - 为异步完成的事件处理程序传递附加变量

c# - 在运行时更改数据透视表头

c# - 如何在可移植类库中使用PCLStorage?

c# - Dapper 强类型查询返回默认对象值

c# - 非 mvc 应用程序要求 WebPages.Razor 程序集

php - Laravel + MySQL : Retrieve POI's within a bounding box

google-maps - v3 Google Maps Geocoding API是否具有表示准确性的字段?

c# - 在mvvm模型中实现Windows Phone应用

c# - 我如何在 desfire ev1 中进行 native 身份验证

c# - 查找具有公差的唯一对象列表