是否可以在不使用融合表的情况下将多边形图层添加到Google地图v3

时间:2013-01-14 17:57:26

标签: google-maps google-maps-api-3 kml polygons

这个问题非常具有描述性。

我正在一个提供拍摄地点的网站上工作。

网站中的所有数据目前都存储在MySQL数据库中,包括谷歌地图的地理编码数据。

我需要显示具有位置的不同伦敦自治市镇的多边形区域。

我将所有数据都作为kml文件,我希望将其存储在MySQL数据库中。

我已经成功使用融合表来显示这些数据,但是对于我来说,为了使用融合地图图层而必须在谷歌上复制这些数据似乎很愚蠢,我可以简单地使用kml图层来渲染这些数据而不是必须创建一个融合表并从中进行渲染?

如果是这样,是否有人可以指示我获取更多信息的资源?

更新: 感谢您到目前为止的回复,我想我会用更多信息更新问题。

我最终希望在我的地图上同时显示所有区域,然后在理想情况下单击某个区域时,会将您带到网站上显示该特定区域位置的另一个页面。

我最初尝试使用KML图层,但我收到错误,说我的KML无效。 KML最初存储在我的数据库表中的一个字段中,我想可能是错误是由于我不清楚谷歌如何读取KML数据。

使用多边形将更容易实现,因为我可以通过JSON获取此数据,然后从中渲染多边形。

我知道现在不可能有​​多边形的信息窗口,但我更喜欢使用点击处理程序而不是显示信息窗口直接跳转到另一个网站页面,其中包含该特定区域的信息。 或者如建议显示一个工具提示,其中包含对该区域的简要描述以及指向页面的链接会更好,工具提示本身如何在地图上呈现?

我有点担心我会达到KML的图层限制。 是否可以在一个图层上使用KML渲染多个多边形,或者每个可点击区域是否需要单独的图层?

3 个答案:

答案 0 :(得分:2)

Google Maps API提供了一种非常简单的方法来绘制polygons

基本示例:

var polygon = new google.maps.Polygon({
  map: your_google_map_instance,
  paths: array_of_latlng_points,
  fillColor: "#336699",
  fillOpacity: .5,
})

编辑:对于这种方法,你需要解析你的KML文件(对不起,当我第一次阅读它时一定错过了)。您可以将KML文件导入KML layer

答案 1 :(得分:1)

您可以使用KmlLayer,FusionTablesLayer(如您所知)或原生google.maps.Polygon对象覆盖多边形。

KmlLayer和FusionTablesLayer将它们渲染为图块,因此对于许多多边形(如果您只需要点击事件)将更有效。可以一次在地图上和FusionTablesLayer上显示的KmlLayers数量有限制(但这些似乎不会导致您出现问题)。

还有第三方解析器可用于KML(geoxml3geoxml-v3),它将使用您的KML并将其呈现为本机google.maps.Polygon objects。对于大量多边形,这将比基于图块的渲染效率低,但它允许鼠标悬停/鼠标移除,并动态更改多边形的属性。

答案 2 :(得分:1)

您还可以尝试具有大量事件的数据层,以便您可以在各种鼠标事件上显示工具提示,信息窗口,状态文本。 请参阅文档中的示例: https://developers.google.com/maps/documentation/javascript/datalayer

如果您有许多多边形(其中许多多边形的实际值取决于多个因素,可以在100到1,000之间),最好是使用内置图层类型。最快的是在服务器上呈现的那些,即kml层,因为它不会在浏览器中创建数百个DOM元素,但仍会显示点击事件,因此可以为每个项目显示信息框。

在更糟糕的情况下,您可以使用图像映射实现自己的渲染,显然可以使用像mapnik这样的现有库。 https://developers.google.com/maps/documentation/javascript/maptypes#ImageMapTypes