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

Google maps 如何在KML数据点周围添加半径不同的圆?,google-maps,google-maps-api-3,kml,Google Maps,Google Maps Api 3,Kml,我有一个地址列表,需要放在地图上,并在每个不同半径周围显示一个圆圈 我有一个KML文件,列出了我的所有点,我想在KML中添加一个“半径”自定义字段,并能够根据自定义字段围绕每个点绘制一个圆 我的思路正确吗?或者有更简单的方法吗?取决于您有多少地址。如果您的KML文件有几兆大,那么您可能走上了正确的道路。但是,Google Maps API中的Kmlayer不允许您直接访问点中的数据,因此您添加半径自定义字段的计划将不起作用。似乎最好将各个点渲染为地址。以下是一些可能有用的文章: https://

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

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


我的思路正确吗?或者有更简单的方法吗?

取决于您有多少地址。如果您的KML文件有几兆大,那么您可能走上了正确的道路。但是,Google Maps API中的Kmlayer不允许您直接访问点中的数据,因此您添加半径自定义字段的计划将不起作用。似乎最好将各个点渲染为地址。以下是一些可能有用的文章: https://developers.google.com/maps/articles/phpsqlsearch_v3


然后在其周围创建一个圆形对象。

很可能在KML Placemarks周围绘制圆形。我用了第一个

  • geoxml3使用Ajax,因此通过从浏览器打开地图HTML进行测试是行不通的
  • 我建议下载以下版本的geoxml3,这对我来说很有用:
kmz文件和“网络链接”还有另一个版本。(我没有试过这些)

有一个坏消息,我认为没有办法插入自定义标记并让geoxml3找到它们。因此,要使圆半径变为变量,需要将该信息放在“description”标记中并进行解析,如果要组合数据,则需要使用正则表达式。还有另外两个不太合适的选项:“Name”和“styleUrl”

这是我放在一起的简单页面。

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>

var映射;
var geoXml=null;
var mapOptions={center:new google.maps.LatLng(39.370,-100.0),zoom:5,
mapTypeId:google.maps.mapTypeId.ROADMAP};
函数初始化(){
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
geoXml=新的geoXML3.parser({
地图:地图,
createMarker:addCircle});
geoXml.parse('https://files.nyu.edu/hc742/public/googlemaps/simple.kml')
}
函数addCircle(placemark){
//rad=parseFloat(placemark.description);
rad=parseFloat(placemark.styleUrl);
marker=new google.maps.marker({map:map,position:placemark.latlng});
圆圈=新的google.maps.circle({map:map,center:placemark.latlng,radius:rad});
}
google.maps.event.addDomListener(窗口“加载”,初始化);
使用此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>

简单的
没有什么
简单的
2000
8000
-122.0822035425683,37.42228990140251,1220
简单的
5001
3000
-122.0822035425683,37.22228990140251,4330
C
9001
2000
-122.00000000001,37.000000000001,9001

最多将有300个位置标记。我想我将执行一个JSON AJAX调用,并按照您所描述的那样将点放在地图上。还有,很棒的文章-谢谢!就我的项目规模而言,我不确定我是否需要深入到这一步,尽管如果项目规模扩大,我可能需要尝试一下这种方法。我非常感谢您的详细回答,谢谢。