【问题标题】:Bing Maps Query API, query by address instead of lat/long doesn't seem to workBing Maps Query API,按地址而不是经纬度查询似乎不起作用
【发布时间】:2016-10-11 23:06:17
【问题描述】:

基于this documentation,我应该能够在spatialFilter 参数中使用地址字符串构造查询url。它在我传入经度/纬度时有效,但我需要能够传入地址、邮政编码、城市或州。最终用户将查询此自定义数据源的附近位置,他们不会在搜索框中搜索地理坐标。每当我传入 lat/long 以外的字符串时,我都会收到 400 BadRequest 响应:“纬度值必须介于 -90.0 和 90.0 度之间。”

这是我的请求网址:

https://spatial.virtualearth.net/REST/v1/data/myId/myDataSource/myEntity?spatialFilter=nearby(ADDRESS_STRING,1000)&$format=json&$top=10&key=myKey&jsonp=callback

【问题讨论】:

    标签: bing-api bing-maps


    【解决方案1】:

    确保您的地址字符串两边都有单引号。例如:

    http://spatial.virtualearth.net/REST/v1/data/20181f26d9e94c81acdf9496133d4f23/FourthCoffeeSample/FourthCoffeeShops?spatialFilter=nearby('Paris',100)&key=YOUR_BING_MAPS_KEY
    

    如果您的地址中有一个单引号,那么您必须使用 OData 方式对其进行转义,该方式包括将两个单引号放在一起。例如"o''clock"

    【讨论】:

    • 太棒了,这正是我所缺少的。我没有意识到我没有在地址字符串周围转义引号。我有一个附带问题:我的数据源共有 25 条记录。我的结果显示正常,但是否可以根据与空间过滤器中地址的距离显示所有 25 条记录?而不是显示 2、3、8 等结果。我可以想到一种破解方法来实现这一点,但想在开始使用它之前知道它是否是一种选择
    • 当使用附近的过滤器时,我相信它默认按距离排序。您可以将此添加到查询中,以将到每个位置的距离添加到响应中:&$select=*,__Distance 您还可以通过将其添加到查询中来指定您希望结果按距离排序:$orderby=__Distance 但是这应该已经发生了。
    • 默认按距离排序,但最大距离为1000km。我总共有 25 个位置,需要显示所有 25 个位置,而不仅仅是搜索范围 1000 公里范围内的几个位置。
    • 如果您只有 25 个位置,并且想要加载所有位置,则不建议使用附近搜索。相反,您可以使用整个地球或属性搜索来做一个边界框,并传入一个所有行都匹配的过滤器。下面是一个使用边界框方法的示例:bing.com/api/maps/sdk/mapcontrol/isdk#sdsChoroplethMap+JS 如果您想要到每个位置的距离,边界框查询将返回基于边界框中心的距离,这可能不是您想要的。您可以使用空间数学 getDistanceTo 函数计算距离
    • 这里是空间数学库的文档:msdn.microsoft.com/en-us/library/mt750541.aspx,这里是实现 getDistanceTo 函数的代码示例的链接:bing.com/api/maps/sdk/mapcontrol/…
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2011-09-25
    • 2016-06-06
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多