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();
4

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

于 2012-12-04T18:22:47.053 回答