【问题标题】:How do I add circles with varying radii around KML data points?如何在 KML 数据点周围添加不​​同半径的圆?
【发布时间】:2012-04-20 23:04:19
【问题描述】:

我有一个地址列表,需要放置在地图上并在每个不同半径周围用一个圆圈显示。

我有一个列出所有点的 KML 文件,我想在 KML 中添加一个“半径”自定义字段,并能够根据自定义字段在每个点周围画一个圆圈。

我是在正确的轨道上还是有更简单的方法来做到这一点?

【问题讨论】:

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


    【解决方案1】:

    很可能在 KML 地标周围画圈。我先用geoxml3 processor.,

    kmz 文件还有另一个版本,“network_link”。 (这些我没试过)。

    有个坏消息,我断定无法插入自定义标签并让 geoxml3 找到它们。因此,要使圆半径可变,您需要将该信息放在“描述”标签中并进行解析,如果您正在组合数据,请使用正则表达式。还有两个不太合适的选项:“Name”和“styleUrl”。

    这是我放在一起的简单页面。 https://files.nyu.edu/hc742/public/googlemaps/kmlcircle.html

    javascript看起来是这样的,重要的部分是在geoXml选项中定义“createMarker”回调函数。

      <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
      <script type="text/javascript" src="geoxml3.js"></script>
      <script type="text/javascript">
      var map;
      var geoXml = null;
      var mapOptions = { center: new google.maps.LatLng(39.370, -100.0), zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP };
    
      function initialize() {
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        geoXml = new geoXML3.parser({
          map: map, 
          createMarker: addCircle});
    
        geoXml.parse('https://files.nyu.edu/hc742/public/googlemaps/simple.kml')
      }
    
    
      function addCircle(placemark) {
        //rad = parseFloat(placemark.description);
        rad = parseFloat(placemark.styleUrl);
        marker = new google.maps.Marker({map:map, position:placemark.latlng});
        circle = new google.maps.Circle({map:map, center: placemark.latlng, radius: rad}); 
      }
    
      google.maps.event.addDomListener(window, 'load', initialize);
      </script>
    

    使用此 KML:

    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://earth.google.com/kml/2.0">
      <Document>
        <name>simple</name>
        <description>nothing</description>
    
        <Placemark>
          <name>simple</name>
          <description>2000</description>
          <styleUrl>8000</styleUrl>
    
          <Point>
            <coordinates>-122.0822035425683,37.42228990140251,1220</coordinates>
          </Point>
        </Placemark>
    
        <Placemark>
          <name>simple</name>
          <description>5001</description>
          <styleUrl>3000</styleUrl>
          <Point>
            <coordinates>-122.0822035425683,37.22228990140251,4330</coordinates>
          </Point>
        </Placemark>
    
        <Placemark>
          <name>C</name>
          <description>9001</description>
          <styleUrl>2000</styleUrl>
    
          <Point>
            <coordinates>-122.00000000001,37.000000000001,9001</coordinates>
          </Point>
        </Placemark>
      </Document>
    </kml>
    

    【讨论】:

    • 对于我的项目规模,我不确定我是否需要深入研究,但如果项目增长,我可能需要尝试这种方法。我非常感谢这个详细的答案,谢谢。
    【解决方案2】:

    取决于您有多少个地址。如果您的 KML 文件有几兆大,那么您可能是在正确的轨道上。但是,Google Maps API 中的 KmlLayer 无法让您直接访问点中的数据,因此您添加半径自定义字段的计划将无法实现。似乎您最好将各个点呈现为地址。这些是一些可能有帮助的文章: https://developers.google.com/maps/articles/toomanymarkers https://developers.google.com/maps/articles/phpsqlsearch_v3 https://developers.google.com/maps/articles/phpsqlgeocode

    然后围绕它创建一个圆形对象。

    【讨论】:

    • 最多有 300 个地标。我想我会做一个 JSON AJAX 调用,然后按照您的描述将这些点放在地图上。另外,很棒的文章 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多