Microsoft.Phone.Maps.Services 可以在 Windows 应用商店应用中使用吗?

Posted

技术标签:

【中文标题】Microsoft.Phone.Maps.Services 可以在 Windows 应用商店应用中使用吗?【英文标题】:Can Microsoft.Phone.Maps.Services be used in Windows Store Apps? 【发布时间】:2012-12-27 03:08:51 【问题描述】:

Microsoft.Phone.Maps.Services 命名空间可以在 Windows 应用商店应用程序中使用吗?

如果没有,是否有合适的替代方案?

我被定向到this,它显示了一些代码,这些代码正是非医生为了根据地址等搜索词获取大量地理位置数据而订购的。

但是

该 sn-p 中使用的类(在 Maps_GeoCoding 事件和 QueryCompleted 回调中)来自 Microsoft.Phone.Maps.Services 命名空间,我需要此代码或类似代码用于 Windows 应用商店应用程序(我知道“Windows 应用商店应用”的命名会导致一些尴尬)。

有人知道类似的功能集吗?或者,是否有可能,尽管听起来有悖常理,但实际上可以在 Windows 应用商店应用程序中使用 Microsoft.Phone.Maps.Services 命名空间?

更新

这就是我所做的(ad[a,o] 选自 Justin "Teen" Angel 下面的代码,未显示 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]);
    

【问题讨论】:

【参考方案1】:

WP8 Nokia &lt;Maps /&gt; 控件及其相关服务(路由、地理编码等)目前在 Win8 SDK 中不可用。 Win8 应用应使用必应地图 API。

但是,如果您确实想在 Win8 应用程序中使用诺基亚地图功能,那绝对是可能的。 Here.net(诺基亚的位置门户)公开了公开记录的 Web API。您可以使用"core plan",它每天最多允许来自 here.net REST API 的 2,500 个免费查询。这些 REST API 包括地理编码、反向地理编码、行人路线、驾驶路线等。

您可以查看这些 REST API 的示例@@http://developer.here.net/javascript_api_explorer(单击右上角的“REST API Explorer”,因为此视图默认为 javascript API 资源管理器)。地理编码 API 将在“地点”下提供。

例如,下面是如何在 Win8 上使用 REST API 复制 WP8 Maps GeoCoding sample:

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

当我们运行这段代码 sn-p 时,我们可以看到 Win8 可以访问与 WP8 相同的地理编码数据:

这个 API 还可以做更多的事情,比如反向地理编码、路由等。正如我所提到的,您可以在 Here.net REST APIs here 上探索这些功能(点击右上角的“REST API 资源管理器”)。另外,登录后别忘了注册一个AppID和AppCode。

为了使上面的代码能够正常工作,我使用了 JSON.Net。您需要install JSON.net from NuGet 并从json2csharp 复制一些强类型生成的类。以下是安装 JSON.net 的方法:

这里是生成的 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; 

【讨论】:

诺基亚是众多 WP8 制造商中的一员,您是在暗示微软诺基亚 Windows 8 正在发生某种事情会制造 Nois 新的 WP8 地图控件及其相关服务由诺基亚提供支持。这已在 //build/ 会议上公开宣布。 ...诺基亚地图可以用于一般的 Windows 8 开发吗? 真棒说得客气! 消息对话框?那是被调用的自定义实现吗?我没有看到任何本地支持...哦,我明白了: var dlg = new MessageDialog("西班牙的雨是湿的");等待 dlg.ShowAsync();【参考方案2】:

虽然有可能,但我认为它不可靠。

当有内置的 Maps SDK(在 Bing Maps 上运行)时,为什么要这样做

Here's一个教程 我觉得你应该看看

【讨论】:

我已经在使用 Bing 地图了。告诉你我为什么需要它可能会对我有所帮助:我希望能够在用户知道并输入地址时获得坐标。 IOW,如果他们知道他们想要存储引用的地方的地址,例如 1265 Lombardi Ave, Green Bay,我想以编程方式获取该地址的坐标,以便将它们存储在 SQLite 表中。我不知道有任何 Bing 地图功能会执行与上面引用的代码类似的操作。如果有,我很想看看。 Bing Maps 上有地理编码功能和一种执行您所说的方法(我认为)这是一个示例resources.esri.com/help/9.3/arcgisserver/apis/silverlight/help/… 太棒了;我希望该示例中的“BingToken”参数是 Bing 凭据;如果不是,我不知道它应该是什么。

以上是关于Microsoft.Phone.Maps.Services 可以在 Windows 应用商店应用中使用吗?的主要内容,如果未能解决你的问题,请参考以下文章