美文网首页工作杂记
谷歌地图绘制 kml 文件

谷歌地图绘制 kml 文件

作者: Lingli_yu | 来源:发表于2021-01-26 22:11 被阅读0次

    最近遇到一个新的工作需求,在Google Map 上绘制 kml 文件对应的图层。

    需求分析:
    1、Google map 绘制图层
    2、需要解析kml 文件

    经过调研发现,Google Map 本身就支持以kml 文件绘制图层。
    Google map api,请使用正确的上网方式打开。
    相关实现代码如下

    var kmlLayer = new google.maps.KmlLayer();
    var src = 'https://developers.google.com/maps/documentation/javascript/examples/kml/westcampus.kml';
    var kmlLayer = new google.maps.KmlLayer(src, {
      suppressInfoWindows: true,
      preserveViewport: false,
      map: map
    });
    

    使用Google Map api 的限制:

    • google 要求提供的kml 文件存放在公网环境上,这样google 服务器才可以访问到kml 文件解析并加载
    • google 要求kml 文件存放在公网环境上,会产生信息安全问题,因为kml 文件可能包含用户的部分信息,并不一定适合向google 公开

    google 访问kml 文件的安全性问题,那么就需要本地解析并绘制kml 文件到google map 上

    解决方案:geoxml3 -- Apache License
    具体实现:

    • 本地下载geoxml3.js 文件
    • geoxml 主要的绘制的方法有两个:
      1. 实例化解析kml 对象 geoXML3.parser()
      2. kml 解析绘制函数 parse()

    geoXML3简单的实现原理:
    a. 通过xhr(Ajax 或者 Fetch)对象读取到kml 文件
    b. 拆分处理读取到kml 字符串,生成dom 结构,便于绘制window information
    c. 处理字符串的通知,提取数据。调用google.maps.Marker / google.maps.Polyline 绘制marker 和多边形,然后添加到google 实例对象上

    如果需要自定义绘制 window info, 则需要修改

    createInfoWindow(placemark, doc, gObj) {
      // placemark 对象包含kml 各个节点的数据
      // doc 解析生成的dom 节点总和
      // 调用gobj 生成google map 组件的实例
    
      // 点击kml 文件打开window infor 事件
      google.maps.event.addListener(gObj, "click", function (e) {
       ...
      // 可以通过以上的参数提取出需要的数据,通过回调将数据传递出去,自定义渲染的内容
       ...
       callback(featurData)
      }
    }
    
    

    相关文章

      网友评论

        本文标题:谷歌地图绘制 kml 文件

        本文链接:https://www.haomeiwen.com/subject/oaynzktx.html