我需要获取用户当前正在导航的高速公路名称。 这可以在导航模式下完成,从
获取-(void)routingService:(SKRoutingService *)routingService didChangeCurrentStreetName:(NSString *)currentStreetName streetType:(SKStreetType)streetType countryCode:(NSString *)countryCode
所以,当我昨天测试我的应用程序时,我在高速公路上,是的,Skobbler确实认识到我在一个,是的,我得到了公路名称。
是“布鲁克林 - 皇后高速公路”。 但是,布鲁克林 - 皇后高速公路实际上是I-278州际高速公路的名称,我后来必须使用的所有功能都需要以这种格式获得公路名称 I-nnn
这是我的意思的地图照片
那么,当streetType被识别为州际高速公路时,有没有办法以I-nnn格式获得streetName
?
或者我们可以咨询任何Open Streetmap数据库吗?我无法在OSM Wiki上找到任何东西。
答案 0 :(得分:3)
不了解Skobbler SDK,但如果在线查询可用并且您有大致的地理区域和高速公路的名称,您可以使用Overpass API(http://wiki.openstreetmap.org/wiki/Overpass_API)来查询openstreetmap数据库用于高速公路参考。
例如,以下查询(对于包含高速公路的一小部分的特定bbox):
{
"version": 0.6,
"generator": "Overpass API",
"osm3s": {
"timestamp_osm_base": "2015-09-18T20:21:02Z",
"copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
},
"elements": [
{
"type": "way",
"id": 46723482,
"nodes": [
488264429,
488264444,
488264461,
488264512,
488264530,
488264541,
597315979
],
"tags": {
"bicycle": "no",
"bridge": "yes",
"foot": "no",
"hgv": "designated",
"highway": "motorway",
"horse": "no",
"lanes": "3",
"layer": "1",
"name": "Brooklyn-Queens Expressway",
"oneway": "yes",
"ref": "I 278",
"sidewalk": "none",
}
},
{
"type": "way",
"id": 46724225,
"nodes": [
597315978,
488242888,
488248526,
488248544,
488248607
],
"tags": {
"bicycle": "no",
"bridge": "yes",
"foot": "no",
"hgv": "designated",
"highway": "motorway",
"horse": "no",
"lanes": "3",
"layer": "1",
"name": "Brooklyn-Queens Expressway",
"oneway": "yes",
"ref": "I 278",
"sidewalk": "none",
}
}
]
}
返回(为简单起见省略了一些键值对):
{{1}}
这是osm数据库中的两个部分。在美国,州际公路的“参考”标签采用“我XXX”的形式(请参阅http://wiki.openstreetmap.org/wiki/Interstate_Highways并注明协同定位的格式)。您可以相应地检索州际名称。
您可以在http://overpass-turbo.eu/s/bxi处的overpass-turbo(服务的UI)上尝试上述查询(按RUN和DATA选项卡查看返回的数据,并平移地图以便在另一个bbox中查询)。 / p>
答案 1 :(得分:1)
SDK中未公开“ref”信息(将其放在TODO列表中)。
解决方法是查看文本建议(使用TTS时),因为此信息存在(如果查看$ ref参数,其中包含您要查找的信息)。 有关文本建议结构的更多详细信息,请参阅this blog article。