我在使用Google Maps API时遇到了一些麻烦;我想确定特定地点的LatLong(例如,从城市的名称),然后将我的地图聚焦在它上面。 LatLong部件正在工作,因此将地图置于该点的中心。但是,当我只有那个单点时,我无法弄清楚如何确定一个好的缩放级别。我不能只是去一些标准的缩放级别,它可能在大多数时候看起来很好,例如,当用户输入“俄罗斯”而不是“阿姆斯特丹”时会发生什么?一些帮助将不胜感激:))
答案 0 :(得分:2)
我刚刚在Google IO上提出了这个问题。此功能存在,但没有记录,也没有访问器。你想要做的是获得Structured Address。检查您返回的json结构并查找这些新参数。当我有机会尝试这个时,我会发布更多信息。
答案 1 :(得分:1)
您的问题是缺少输入参数。你说的是LatLon点,但实际上你需要LatLonBounds来对可用的地图窗口大小进行聚焦。我假设你想模仿谷歌的官方地图行为。除了地理编码,它们还依赖于Gmap API无法访问的其他数据。所以你必须提供自己的。
答案 2 :(得分:1)
如果您可以为其提供适当的矩形边界对象,则以下调用将为您提供缩放级别:
GMap2.getBoundsZoomLevel(bounds)
但是如何计算界限呢?
您可以使用地图“通过眼睛”确定的矩形手动注释每个源记录,并让某人键入值。
理想情况下,您需要数据,幸运的是,DBPedia上有大量数据。
我的几何和代数有点生锈,但两者都有,我确定你可以根据想要查看的位置区域计算一个矩形。 (如果假设是一个正方形城市,可以从平方根开始,或者如果假设一个圆形城市,则重新排列πr 2 )
Try out此查询用于提取区域的区域。
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia2: <http://dbpedia.org/property/>
SELECT ?url, ?label, ?lat, ?long, ?area WHERE {
?url geo:lat ?lat .
?url geo:lat ?long .
?url rdfs:label ?label . FILTER ( lang(?label) = 'en' ) .
?url dbpedia2:area ?area . FILTER ( datatype(?area) = xsd:double )
} LIMIT 10
当DBPedia正在搜索数百万的非结构化数据(很好的RDF数据)时,您需要缓存结果或将它们加载到更快更本地的数据源中。你可以从DBPedia download the Titles, Infobox and coordinates data sets加载到例如DBPedia耶拿。请记住在加载期间关闭所有验证选项: - )
您还可以使用具有相当可用的Web表单的RESTful API来访问此数据,并且可以使用firefox下载窗口中的“复制下载链接按钮”拉取其生成的URL,或者设置输出格式到HTML。它还生成XML和JSON。
不要忘记为摇摆不定的城市添加余量......
答案 3 :(得分:1)
我有同样的问题,Nick Retallack的回答是对我有用的。为了提供更多细节,未记录的属性的名称是“ExtendedData”,在其中你有“LatLonBox”,它包含适当缩放级别的北,南,东和西边界。
例如,如果你要搜索“90210”,这是输出(我为了可读性而格式化了):
{
"id":"p1",
"address":"Beverly Hills, CA 90210, USA",
"AddressDetails":{
"Accuracy":5,
"Country":{
"AdministrativeArea":{
"AdministrativeAreaName":"CA",
"SubAdministrativeArea":{
"Locality":{
"LocalityName":"Beverly Hills",
"PostalCode":{"PostalCodeNumber":"90210"}
},
"SubAdministrativeAreaName":"Los Angeles"
}
},
"CountryName":"USA",
"CountryNameCode":"US"
}
},
// This is what you're looking for "ExtendedData":{ "LatLonBox":{ "north":34.13919, "south":34.067018, "east":-118.38971, "west":-118.442796 } },
"Point":{
"coordinates":[-118.4104684,34.1030032,0]
}
}
这是没有记录的,所以我不确定它是否会在API变化中存活下来。最好不要假设它总是存在,并定义一些合理的默认缩放值。
答案 4 :(得分:0)
您是否从地理编码器获取了您的位置点?如果是的话,你可以抓住点的精确度并将缩放基础放在那里(更高的精度=更高的变焦)。
答案 5 :(得分:0)
我在Objective-C中实现了一个版本的Nick Retallack解决方案。
Equivalent Objective-C code for Google Maps GMap2.getBoundsZoomLevel(bounds)?
答案 6 :(得分:0)
我有同样的问题here,但有更新的API版本。新解决方案是map.fitBounds(autocomplete.getPlace().geometry.viewport);
。