google maps api v3 导出当前地图的 kml 文件

Posted

技术标签:

【中文标题】google maps api v3 导出当前地图的 kml 文件【英文标题】:google maps api v3 exporting kml file of current map 【发布时间】:2012-05-26 11:03:39 【问题描述】:

我的应用程序中有一个谷歌地图组件,允许用户绘制多边形、线条和标记。现在我想实现一个按钮,允许用户导出他/她在地图中绘制的东西的 kml 文件。

任何关于这样做的最佳方法的建议。

非常感谢您的 cmets 和贡献

【问题讨论】:

您使用的是绘图管理器/库还是自定义控件? 我正在使用绘图管理器库 我的计划只有在用户的图纸不可编辑的情况下才有效,如果是这种情况我可以写一个大纲。如果您允许编辑,我无法帮助您,我会将答案留空,以便其他人回答。 是的,Lilina,地图绘制不可编辑 【参考方案1】:

我将我的想法总结为在用户绘制时存储坐标,然后在单击“输出 KML”按钮时,格式化保存的坐标数据并将其放置在要复制的文本区域中(除非有一种方法可以提示为下载?)。

当用户完成一个绘图元素时,我如何保存数据:

http://jsfiddle.net/8bwG2/

(我不知道检测编辑的好方法。)

首先,为每种绘图类型(线、多边形、标记)添加事件侦听器,以便在完成时触发。每种类型都需要一个单独的事件侦听器。这是折线的一个,每个监听器都会返回刚刚完成的绘图元素的类型。

    google.maps.event.addDomListener(drawingManager, 'polylinecomplete', function(line) 
        path = line.getPath();
        document.getElementById("action").value += "#polyline\n";
        for(var i = 0; i < path.length; i++) 
          document.getElementById("action").value += path.getAt(i) + "\n";
        
    );

我将坐标直接放入共享文本区域,但它们应该放入数组变量数组中,其中一个变量用于多边形,一个用于折线,一个用于标记。

从这些内部变量中读取时,将 Google Maps LatLngs 转换为 KML 格式 long,lat,altitude。您必须对每个元素的名称和描述进行创意。

最后,当请求 KML 时,循环遍历标记、线和多边形变量以生成 KML 格式的元素,例如Point-coordinates, LineString, and Polygon-outerBoundaryIs

【讨论】:

this thread in the Google Maps API v3 group 中讨论了检测编辑的一个选项,“您在多边形路径上附加了一个 set_at 侦听器,例如:”google.maps.event.addListener(polygon.getPath(), 'set_at', function(index) /* add code here. */ );

以上是关于google maps api v3 导出当前地图的 kml 文件的主要内容,如果未能解决你的问题,请参考以下文章

google maps js v3 api教程 -- 创建一个地图

google maps js v3 api教程 -- 在地图上添加标记

地图上的 Google Map Api v3 拖动事件

Google Maps v3 API - 自动完成(地址)

Google map api v3 显示半张地图?

Google Maps v3 API - 自动完成(地址)