1

UWP Map コントロールをクリックするなど、さまざまな方法を使用して地図上にウェイポイントを追加することで、ユーザーがルートを計画できる Maps コントロールを使用して UWP アプリを開発しています。ユーザーがウェイポイントまたは場所を追加できるようにする方法の 1 つは、実際の住所で検索することです。以下の BING Maps REST サービス コードを使用しますが、アプリが現在使用されている場所の言語と文化を指定しないと、常に最初にアメリカの住所が返されます。私たちの実際はアメリカ国外に住んでいます - ショック、恐怖!)。オーストラリアの「en-AU」などの言語文化文字列を指定すると、オーストラリアの住所が最初に検索され、これは非常にうまく機能することがわかりました。

public async Task<List<WayPoint>> FindAddress(string address)
    {
        List<WayPoint> matchingWaypoints = new List<WayPoint>();

        //Create a Geocode request to submit to the BING Maps REST service.
        var request = new GeocodeRequest()
        {
            Query = address.Trim(),
            Culture = "en-AU",  //HOW CAN I GET THIS FROM THE DEVICE'S CURRENT LOCATION???
            IncludeIso2 = true,
            IncludeNeighborhood = true,
            MaxResults = 10,
            BingMapsKey = MapServiceToken
        };

        //Process the request by using the BING Maps REST services.
        var response = await ServiceManager.GetResponseAsync(request);

        if (response != null &&
            response.ResourceSets != null &&
            response.ResourceSets.Length > 0 &&
            response.ResourceSets[0].Resources != null &&
            response.ResourceSets[0].Resources.Length > 0)
        {
            int wpNumber = 0;
            foreach (BingMapsRESTToolkit.Location loc in response.ResourceSets[0].Resources)
                matchingWaypoints.Add(new WayPoint(wpNumber++, loc.Address.FormattedAddress, loc.Point.Coordinates[0], loc.Point.Coordinates[1]));               
        }

        return matchingWaypoints;
    }

したがって、私が明らかにしたいことは、デバイスの地域設定からではなく、デバイスの現在の場所 (つまり国) に基づいてこの文字列を取得することです。たとえば、誰かが米国でアプリを使用している場合、en-US を指定したい場合、ニュージーランドにいる場合は en-NZ、フランスにいる場合は「fr-FR」などと指定します。私はこれを行うことができますか?ローカリゼーションについて私が読んだすべてのものは、現在の物理的な場所ではなくデバイス設定を使用しているため、まだそれを行う方法を見つけようとしています.

誰かが助けてくれるなら、本当に感謝します:-)

4

2 に答える 2

0

Matt さん、返信ありがとうございます。Bing Maps フォーラムの助けを借りて、その方法を考え出しました。REST API を使用する代わりに、アドレスを渡す UWP Map API の一部として FindLocationsAsync 呼び出しを使用しています。開始参照 (別名「ヒント」場所) を使用するローカル ジオポイントと返される一致の最大数...これが私が使用したコードで、完全に機能します。(WayPoint は、ルート上のウェイポイントに関するさまざまな情報を格納するための、私のモデルのオブジェクトであることに注意してください。)

public async Task<List<WayPoint>> FindAddress(string address)
    {
        List<WayPoint> matchingWaypoints = new List<WayPoint>();

        // Use current location as a query hint so nearest addresses are returned.
        BasicGeoposition queryHint = new BasicGeoposition();
        queryHint.Latitude = this.CurrentLocation.Position.Latitude;
        queryHint.Longitude = this.CurrentLocation.Position.Longitude;
        Geopoint hintPoint = new Geopoint(queryHint);

        MapLocationFinderResult result =
           await MapLocationFinder.FindLocationsAsync(address.Trim(), hintPoint, 5);

        // If the query returns results, store in collection of WayPoint objects.
        string addresses = "";
        if (result.Status == MapLocationFinderStatus.Success)
        {
            int i = 0;
            foreach (MapLocation res in result.Locations)
            {
                matchingWaypoints.Add(new WayPoint(i++, res.Address.FormattedAddress, res.Point.Position.Latitude, res.Point.Position.Longitude));
            }
        }
        return matchingWaypoints;
    } 
于 2017-03-07T02:42:59.697 に答える