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

Google maps 从Google Maps API中的单个LatLong确定缩放级别,google-maps,Google Maps,我在谷歌地图API上遇到了一些问题;我想确定某个地方的拉特朗(例如,从一个城市的名称),然后将我的地图集中在它上面。LatLong部分正在工作,地图也在该点上居中。然而,当我只有一个点时,我无法确定如何确定一个好的zoomlevel。我不能只去一些标准的zoomlevel,它在大多数情况下看起来都不错,因为当用户输入“俄罗斯”而不是“阿姆斯特丹”时会发生什么?请提供一些帮助:)您的问题缺少输入参数。你说的是LatLon point,但实际上你需要LatLonBounds来聚焦可用的贴图窗口大小。

我在谷歌地图API上遇到了一些问题;我想确定某个地方的拉特朗(例如,从一个城市的名称),然后将我的地图集中在它上面。LatLong部分正在工作,地图也在该点上居中。然而,当我只有一个点时,我无法确定如何确定一个好的zoomlevel。我不能只去一些标准的zoomlevel,它在大多数情况下看起来都不错,因为当用户输入“俄罗斯”而不是“阿姆斯特丹”时会发生什么?请提供一些帮助:)

您的问题缺少输入参数。你说的是LatLon point,但实际上你需要LatLonBounds来聚焦可用的贴图窗口大小。我假设你想模仿谷歌地图的官方行为。除了地理编码之外,他们还依赖GMAPAPI无法访问的其他数据。因此,您必须提供自己的缩放级别。

如果您可以为其提供适当的矩形边界对象,则以下调用将为您提供缩放级别:

GMap2.getBoundsZoomLevel(bounds)
但是如何计算边界呢

您可以使用一个“由眼睛”确定的矩形手动注释每个源记录,并让某人键入值

理想情况下,您需要数据,幸运的是DBPedia上有大量的数据

我的几何学和代数有点生疏,但如果两者兼而有之,我相信你可以根据你想查看的位置面积计算出一个矩形。(如果假设一个正方形城市,可以从平方根开始,如果假设一个圆形城市,可以重新排列πr2)

此查询用于提取区域的区域

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
前缀geo:
前缀rdfs:
前缀db2:
选择“url”、“标签”、“横向”、“纵向”区域,其中{
?url地理位置:lat?lat。
url地理位置:lat?long。
url rdfs:label?label.FILTER(lang(?label)='en')。
url dbpedia2:area?area.FILTER(数据类型(?area)=xsd:double)
}限制10
当DBPedia正在搜索数百万个三元组的非结构化数据(以及RDF数据)时,您需要缓存结果或将其加载到更快的本地数据源中。您可以从DBPedia将它们加载到例如Jena中。请记住在加载期间关闭所有验证选项:-)

您还可以使用一个具有相当可用的Web表单来访问这些数据,并且可以使用firefox下载窗口中的“复制下载链接按钮”来提取其生成的URL,或者将输出格式设置为HTML。它还生成XML和XML


别忘了为形状不规则的城市增加利润…

我刚刚在谷歌IO上问了这个问题。此功能存在,但未记录,并且还没有访问器。你想做的是得到一份工作。检查返回的json结构并查找这些新参数。如果我有机会尝试一下,我会发布更多信息。

你是从地理编码器那里得到你的位置点的吗?如果你是,你可以抓住点的准确度,并以此为基础进行缩放(更高的准确度=更高的缩放)。

我也有同样的问题,尼克·雷特拉克的回答对我来说很有效。为了提供更多详细信息,未记录属性的名称为“ExtendedData”,其中包含“LatLonBox”,其中包含相应缩放级别的北、南、东和西边界

例如,如果您要搜索“90210”,以下是输出(为了可读性,我对其进行了格式化):


不过,这是没有文档记录的,所以我不确定它是否能经受住API更改。最好不要假设它总是存在,并定义一些合理的默认缩放值。

我在Objective-C中实现了Nick Retalack解决方案的一个版本

我也遇到了同样的问题,但是使用了更新的API版本。新的解决方案是
map.fitBounds(autocomplete.getPlace().geometry.viewport)

{
    "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]
    }
}