0

Microsoft.Phone.Maps.ServicesWindows ストア アプリで名前空間を使用できますか?

そうでない場合、利用可能な適切な代替手段はありますか?

これは、住所などの検索語に基づいて地理位置情報データの塊を取得するために医師ではない人が注文したコードを示しています

でも

そのスニペット (Maps_GeoCodingイベントとQueryCompletedコールバック) で使用されるクラスは、Microsoft.Phone.Maps.Services 名前空間からのものであり、Windows ストア アプリ アプリ用にこのコードまたは同様のコードが必要です (「Windows ストア アプリ」の命名法がややこしいことにつながります)。

類似の機能セットを知っている人はいますか? または、直観に反するように聞こえますが、実際にMicrosoft.Phone.Maps.ServicesWindows ストア アプリ内で名前空間を使用できるのでしょうか?

アップデート

これは私がやったことです(以下のジャスティン「ティーン」エンジェルのコードから[a、o] pted、appIdとappCodeは表示されていません):

private async static Task<string> GetCoordinatesForAddress(string address) // AKA Geocoding (reverse geocoding is getting address for coordinates)
{
    // build URL for Here.net REST service
    string currentgeoLoc = "0.0,0.0";
    string queryString = address; //"Ferry Building, San-Francisco";
    string appID = "<appId>"; // MAKE SURE TO GET YOUR OWN from developers.here.net
    object appCode = "<appCode>"; // MAKE SURE TO GET YOUR OWN from developers.here.net
    var hereNetUrl = string.Format(
        "http://demo.places.nlp.nokia.com/places/v1/discover/search?at={0}&q={1}&app_id={2}&app_code={3}&accept=application/json",
            currentgeoLoc, queryString, appID, appCode);

    // get data from HERE.net REST API
    var httpClient = new HttpClient();
    var hereNetResponse = await httpClient.GetStringAsync(hereNetUrl);

    // deseralize JSON from Here.net 
    using (var tr = new StringReader(hereNetResponse))
    using (var jr = new JsonTextReader(tr))
    {
        var rootObjectResponse = new JsonSerializer().Deserialize<JsonDOTNetHelperClasses.RootObject>(jr);
        var firstplace = rootObjectResponse.results.items.First();
        return string.Format("{0};{1}", firstplace.position[0], firstplace.position[1]);
    }
}
4

2 に答える 2

2

WP8 Nokia<Maps />コントロールとそれに関連するサービス (ルーティング、ジオコーディングなど) は、現在 Win8 SDK では利用できません。Win8 アプリは、Bing Maps API を使用することが想定されています。

ただし、Win8 アプリで Nokia Maps 機能を使用したい場合は、間違いなく可能です。Here.net (Nokia のロケーション ポータル) は、公式に文書化された Web API を公開しています。here.netのREST APIから1日2,500クエリまで無料で利用できる「コアプラン」をご利用いただけます。これらの REST API には、ジオコーディング、リバース ジオコーディング、歩行者ルート案内、運転ルート案内などが含まれます。

これらの REST API の例は、http: //developer.here.net/javascript_api_explorer で確認できます(このビューはデフォルトで JavaScript API エクスプローラーになるため、右上の [REST API エクスプローラー] をクリックします)。ジオコーディング API は、[場所] で利用できます。

たとえば、 Win8で REST API を使用してWP8 Maps GeoCoding サンプルを複製する方法を次に示します。

private async void GeocodingWin8Query()
{
    // build URL for Here.net REST service
    string currentgeoLoc = "0.0,0.0";
    string queryString = "Ferry Building, San-Francisco";
    string appID = "<appId>"; // MAKE SURE TO GET YOUR OWN from developers.here.net
    object appCode = "<appCode>"; // MAKE SURE TO GET YOUR OWN from developers.here.net
    var hereNetUrl = string.Format(
        "http://demo.places.nlp.nokia.com/places/v1/discover/search?at={0}&q={1}&app_id={2}&app_code={3}&accept=application/json",
            currentgeoLoc, queryString, appID, appCode);

    // get data from HERE.net REST API
    var httpClient = new HttpClient();
    var hereNetResponse = await httpClient.GetStringAsync(hereNetUrl);

    // deseralize JSON from Here.net 
    using (var tr = new StringReader(hereNetResponse))
    using (var jr = new JsonTextReader(tr))
    {
        var rootObjectResponse = new JsonSerializer().Deserialize<RootObject>(jr);

        // print the details of the first geocoding result 
        var firstplace = rootObjectResponse.results.items.First();
        await new MessageDialog("Name: " + firstplace.title + Environment.NewLine +
                          "Geolocation: " + firstplace.position[0] + ", " + firstplace.position[1] + Environment.NewLine +
                          "Address: " + HtmlUtilities.ConvertToText(firstplace.vicinity) + Environment.NewLine +
                          "Type: " + firstplace.type + Environment.NewLine,
                          "Win8 Nokia Maps Geocoding").ShowAsync();
    }
}

このコード スニペットを実行すると、Win8 が WP8 と同じジオコーディング データにアクセスできることがわかります。

REST API からの Win8 ジオコーディング データ

リバース ジオコーディングやルーティングなど、この API でできることは他にもたくさんあります。前述したように、Here.net REST API でこれらの機能を調べることができます(右上の [REST API エクスプローラー] をクリックします)。また、サインイン後に AppID と AppCode にサインアップすることを忘れないでください。

上記のコードを機能させるために、JSON.Net を使用しました。NuGet から JSON.net をインストールし、厳密に型指定された生成クラスを json2csharp からコピーする必要があります。JSON.net のインストール方法は次のとおりです。

Json.net をインストールする NuGet

生成された C# JSON.net クラスは次のとおりです。

public class Category
{
    public string id { get; set; }
    public string title { get; set; }
    public string href { get; set; }
    public string type { get; set; }
}

public class Item
{
    public List<double> position { get; set; }
    public int distance { get; set; }
    public string title { get; set; }
    public Category category { get; set; }
    public string icon { get; set; }
    public string vicinity { get; set; }
    public List<object> having { get; set; }
    public string type { get; set; }
    public string href { get; set; }
    public string id { get; set; }
    public double? averageRating { get; set; }
}

public class Results
{
    public List<Item> items { get; set; }
}

public class Location
{
    public List<double> position { get; set; }
}

public class Context
{
    public Location location { get; set; }
    public string type { get; set; }
}

public class Search
{
    public Context context { get; set; }
}

public class RootObject
{
    public Results results { get; set; }
    public Search search { get; set; }
}
于 2012-12-27T05:49:19.307 に答える
1

可能かもしれませんが、信頼できるとは思いません。

Maps SDK が組み込まれている (Bing Maps で実行される) のに、なぜこれを行う必要があるのでしょうか。

ここにあなたが見るべきだと思うチュートリアルがあります

于 2012-12-27T03:13:34.803 に答える