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 <Maps />
控件及其相关服务(路由、地理编码等)目前在 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 应用商店应用中使用吗?的主要内容,如果未能解决你的问题,请参考以下文章