如何在KML数据点周围添加具有不同半径的圆?

时间:2012-04-07 21:31:40

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

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

我有一个列出我所有点的KML文件,我想在KML中添加一个'radius'自定义字段,并且能够根据自定义字段在每个点周围绘制一个圆圈。

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

2 个答案:

答案 0 :(得分:3)

可以在KML地标周围绘制圆圈。我使用geoxml3 processor.首先,

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

有坏消息,我得出结论,无法插入自定义标签并让geoxml3找到它们。因此,要使圆半径变量,您需要将该信息放在“description”标记中并使用正则表达式进行解析(如果要组合数据)。还有另外两个不太合适的选项:“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>

答案 1 :(得分: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

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