我正在尝试使用Google Places API找到距离最近的两条街道(基本上是指示最近的交叉点)。但是,任何结果只会返回一条“路线”,如果有的话。
我认为我可以用+或X模式进行5次查询,但这很麻烦,不可靠,当然会更快地达到查询限制。
我很想说这是一个刻意的举动,因为API并不是用于导航系统之类的东西(我不想做),但我仍然希望有一种符合TOS标准的方式得到十字路口。
旁注 - 看起来指定“types = route”似乎永远不会返回任何结果,这进一步加深了我的怀疑,即Where只是真正意味着用于实际的POI,而不是用于导航,尽管terms of service没有在这方面没有提到任何明确的限制。
编辑:克里斯指出,有专门为地理编码设计的Geocoding API,但除了通过多次查询之外,我仍然没有办法获得最近的十字路口。答案 0 :(得分:9)
GeoNames为纬度/经度坐标的最近交点提供地理编码API。
http://www.geonames.org/maps/us-reverse-geocoder.html#findNearestIntersection
JSON响应如下所示:
{"intersection":
{"adminName2":"San Mateo",
"street2":"Curtis St",
"postalcode":"94025",
"street1":"Roble Ave",
"adminCode1":"CA",
"distance":"0.08",
"countryCode":"US",
"lng":"-122.180842",
"placename":"Menlo Park",
"lat":"37.450649",
"adminName1":"California"
},
"credits":"1.0"
}
street1
和street2
是十字路口。
答案 1 :(得分:7)
一致认为,Google的反向地理编码器不够复杂,无法在一个查询中报告交叉点。也就是说,没有一个参数可以用来告诉他们你只想要"types" : [ "intersection" ]
的结果。谷歌正在这里吃自己的狗食;如果您在maps.google搜索框中输入纬度/经度,则总是会回到街道(用谷歌的说法,即“路线”)。
正如您所指出的那样,您可以通过大量的启发式方法来获得令人垂涎的["intersection"]
类型。
e.g。第一世界城市的几个“主要”交叉路口都有描述交叉口的交通站点。如果任何结果包含"types" : [ "bus_station", "transit_station" ]
元素,您可以尝试"long_name"
元素作为搜索字词,并希望您获得一个交集。 smirkingman还提到了一个可行的解决方案。这两个都需要2个以上的查询,唉。
总之,Google Geocoding API中没有latelngToIntersection(lat,lng)类型的功能。 Google自己的maps.google页面中存在此证据。我会以不同方式攻击您的问题。如果您想获得GPS位置最近的主要交叉路口,可能有助于用户提供帮助。众所周知,地理编码充满了肮脏的人性。
答案 2 :(得分:4)
您可以使用OpenStreetMap中的数据。他们的.osm
文件提供了一段相交的街道。
如何获取数据。
转到OpenStreetMap并找到您感兴趣的地方,放大到第4个刻度线。
点击顶部导航栏上的导出,在下拉列表中按“OpenStreetMap XML数据”,然后点击“导出”。
对于州/国家/地区等大量数据Planet.osm
,找到所需的“摘录”。
要获得交叉点,您需要查找与此格式匹配的数据,可能会搜索高速公路。
示例:
<way id="6419265" user="eric22" uid="160949" visible="true" version="2" changeset="10632563" timestamp="2012-02-09T10:49:21Z">
<nd ref="53167978"/>
<nd ref="53163978"/>
<nd ref="53163979"/>
<nd ref="53173508"/>
<nd ref="53164158"/>
<nd ref="53173510"/>
<tag <b>k="highway"</b> v="residential"/>
<tag k="name" v="Alberta St"/>
<tag k="tiger:cfcc" v="A41"/>
<tag k="tiger:county" v="St. Louis-City, MO"/>
...
</way>
way.id是街道ID,nd refs是你应该在同一个文件中找到的街道ID。他们看起来像这样
‹node id="53167978" lat="38.5852785" lon="-90.2450074" user="eric22" uid="160949" visible="true" version="3" changeset="10632563" timestamp="2012-02-09T10:48:49Z"/>
答案 3 :(得分:2)
你是对的,Places API并不适用于地理编码。街道和城镇等政治结果仅限于2个结果,因为它们只是为返回的地方提供区域标识。
如果您想搜索街道等,请尝试使用地理编码API:https://developers.google.com/maps/documentation/geocoding/
答案 4 :(得分:2)
如上所述,没有GoogleMap工具可以反转地理编码并获得一组关闭点。
我看到的唯一选择是
如果您在客户端执行此操作,则您的用户很少会遇到每日2'500限制。
答案 5 :(得分:1)
Google Maps API不支持此功能。它只是一个地址地址。使用Google Maps API可以做的最好的事情是用户的路线服务,以找到第一个回合的位置,但这是完全黑客攻击。您可能想尝试查看可以提供此功能的其他地图服务。
答案 6 :(得分:0)
这是一个古老的问题,但是我正在搜索相同的功能,而Google将我带到了这里。
显然,现在只需在两个街道名称之间放置一个&符号即可搜索十字路口,例如
street name 1 & street name 2
该技术对我和Geocoding API和Google Maps网站都有效。