javascript - 使用谷歌地图 js 从多边形内的 geojson 获取属性

标签 javascript google-maps-api-3 polygon geojson

如何在绘制的多边形内访问 geojson 数据的属性?我有这个例子:

var map;
function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: {lat: -28, lng: 137}
  });

  // Load GeoJSON.
  map.data.loadGeoJson('https://storage.googleapis.com/mapsdevsite/json/google.json');

  // Set the stroke width, and fill color for each polygon
  map.data.setStyle({
    fillColor: 'green',
    strokeWeight: 1
  });


  var drawingManager = new google.maps.drawing.DrawingManager({
    drawingControl: true,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: ['polygon']
    }
  });
  drawingManager.setMap(map);

  google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) {
    var coordinates = (polygon.getPath().getArray());

    // Get all features from polygon and geojson common part

    }
  );  
}

https://jsfiddle.net/j0f7ggeg/2/

每个特征都包含字母、颜色等属性。如果我在其中一个(或多个)字母上绘制一个多边形,我想获得属性。

最佳答案

一种选择是通过 Data Layer 中的特征进行处理使用 containsLocation 检查绘制的多边形是否包含它们的任何/所有点.此示例在数据层多边形边界的中心打开一个信息窗口。

proof of concept fiddle

代码片段:

var map;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: {
      lat: -28,
      lng: 137
    }
  });

  // Load GeoJSON.
  map.data.loadGeoJson(
    'https://storage.googleapis.com/mapsdevsite/json/google.json');

  // Set the stroke width, and fill color for each polygon
  map.data.setStyle({
    fillColor: 'green',
    strokeWeight: 1
  });


  var drawingManager = new google.maps.drawing.DrawingManager({
    drawingControl: true,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: ['polygon']
    }
  });
  drawingManager.setMap(map);

  google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
    var coordinates = (polygon.getPath().getArray());
    map.data.forEach(function(feature) {
      var id = feature.getId();
      var color = feature.getProperty("color");
      var letter = feature.getProperty("letter");
      var geometry = feature.getGeometry();
      var type = geometry.getType();
      if (geometry.getType() == "Polygon") {
        var path = geometry.getArray()[0];
        var completelyContained = 0;
        var partiallyContained = false;
        var contained = false;
        var content = "";
        var bounds = new google.maps.LatLngBounds();
        for (var i = 0; i < path.getLength(); i++) {
          bounds.extend(path.getAt(i));
          if (google.maps.geometry.poly.containsLocation(path.getAt(i), polygon)) {
            completelyContained++;
            partiallyContained = true;
          }
        }
        var infowindow = new google.maps.InfoWindow();

        if (completelyContained == path.getLength()) {
          contained = true;
          content = "completly contained<br>";
        }
        if (partiallyContained == true)
          content += "partially contained<br>";
        if (contained || partiallyContained) {
          content += "letter: " + letter + "<br>";
          content += "color: " + color;
          infowindow.setContent(content);
          infowindow.setPosition(bounds.getCenter());
          infowindow.open(map);
        }
      }
      // alert() with property name 
    });
  });
}
html,
body {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
}
#map {
  height: 100%;
  width: 100%;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=drawing,geometry&callback=initMap">
</script>

关于javascript - 使用谷歌地图 js 从多边形内的 geojson 获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39589832/

相关文章:

javascript - js如何在使用文件:///protocol时动态加载json文件

google-maps-api-3 - 谷歌地图的奇怪问题。它显示错误的瓷砖

javascript - 如何在使用 Google Maps for JS 的代码上编写单元测试

python - 线段和三角形之间的 3d 交集

Swift MapKit 多边形叠加

c++ - OpenCv 将圆转换为多边形

javascript - 页面加载时的 Twitter Bootstrap 进度条动画

javascript - webpack-dev-server 代理请求很慢

google-maps - 仅通过地理编码获取 IATA 代码

javascript - 禁止(CSRF token 丢失或不正确。)Django如何解决?用我的代码