在Google Maps API中确定单个LatLong的缩放级别

时间:2008-11-23 13:26:30

标签: google-maps

我在使用Google Maps API时遇到了一些麻烦;我想确定特定地点的LatLong(例如,从城市的名称),然后将我的地图聚焦在它上面。 LatLong部件正在工作,因此将地图置于该点的中心。但是,当我只有那个单点时,我无法弄清楚如何确定一个好的缩放级别。我不能只是去一些标准的缩放级别,它可能在大多数时候看起来很好,例如,当用户输入“俄罗斯”而不是“阿姆斯特丹”时会发生什么?一些帮助将不胜感激:))

7 个答案:

答案 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);