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

これは、マッピング サービスのジオコード機能にあるように見える制限に対処するものではありませんが、私にとってはうまくいく小さな回避策です...

関数が 0の結果を返す場合GetStringLocation_QueryCompleted、正規表現を実行して、検索が有効な郵便番号かどうかを確認します。1 つの場合は、最初の 3 文字を取得して、ジオコードを再実行します。

このアプローチで確認すべきことの 1 つは、2 次破棄関数が呼び出されたときに (別の関数で実行する場合)、ジオコードが実行されていない (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 に答える