2008-11-23 81 views
6

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

回答

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变更后继续存在。最好不要认为它会一直存在,并定义一些合理的默认缩放值。

1

您的问题缺少一个输入参数。你说LatLon点,但实际上你需要LatLonBounds来做可用的地图窗口大小的聚焦。我假设你想模仿谷歌地图的官方行为。除了地理编码之外,他们还依赖于Gmap API无法访问的其他数据。所以你必须提供你自己的。

1

下面的调用将会给你的缩放级别,如果你可以用适当的矩形边界对象提供的:

GMap2.getBoundsZoomLevel(bounds) 

但如何计算的界限?

您可以使用地图确定的“通过眼睛”的矩形手动注释每个源记录,并让某人输入值。

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

我的几何和代数有点生疏,但有一点点,我相信你可以计算一个矩形给定你想查看的位置的区域。 (也许开始与平方根如果假设一个正方形的城市,或重新排列πR如果假设的圆形的一个)

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并将它们加载到耶拿。请记住在加载期间关闭所有验证选项:-)

您也可以使用RESTful API访问此数据,该数据具有相当可用的Web表单,并且可以使用“复制下载链接按钮” Firefox下载窗口,或将输出格式设置为HTML。它也生成XML和JSON

不要忘记添加余量不稳定型城市......

2

我刚才问在谷歌IO这个问题。此功能存在,但没有记录,并且尚无访问权限。你想要做的是得到Structured Address。检查你找回的json结构并查找这些新参数。当我有机会尝试这些时,我会发布更多信息。

0

您是否从地理编码器获取您的位置点?如果你是,你可以抓住点的准确性和变焦的基础(更高的精度=更高的变焦)。

0

我有同样的问题here,但有一个新的API版本。新的解决方案是map.fitBounds(autocomplete.getPlace().geometry.viewport);

相关问题