google-maps-api-3 - 缩放到Google Maps API v3中的geojson多边形边界

标签 google-maps-api-3 geojson

我正在从Postgis数据库加载geojson,并希望在我的 map 上显示它。
绘制多边形后,我希望 map 缩放到所添加多边形的范围。

我的数据可以很好地加载并在 map 上正确显示,但是我无法弄清楚如何获取边界并将缩放比例更改为新添加的多边形。
我尝试使用Google的部分代码
Data Layer: Drag and Drop GeoJSON example
但是显示的 map 放大了太平洋中靠近贝克群岛的某个地方,而多边形在卢森堡正确显示。

这是我正在使用的代码:

window.addEventListener("load", func1);

function func1(){
  //Load mapdata via geoJson
  var parzelle = new google.maps.Data();
  parzelle.loadGeoJson("./mapdata/get_parzelle_geojson.php<?php echo  "?gid=".$_GET['gid'];?>");

  // Set the stroke width, and fill color for each polygon
  var featureStyle = {
    fillColor: '#ADFF2F',
    fillOpacity: 0.1,
    strokeColor: '#ADFF2F',
    strokeWeight: 1
  }

  parzelle.setStyle(featureStyle);
  parzelle.setMap(map);

  zoom(map);
}

function zoom(map) {
  var bounds = new google.maps.LatLngBounds();
  map.data.forEach(function(feature) {
    processPoints(feature.getGeometry(), bounds.extend, bounds);
  });
  map.fitBounds(bounds);
}

function processPoints(geometry, callback, thisArg) {
  if (geometry instanceof google.maps.LatLng) {
    callback.call(thisArg, geometry);
  } else if (geometry instanceof google.maps.Data.Point) {
    callback.call(thisArg, geometry.get());
  } else {
    geometry.getArray().forEach(function(g) {
      processPoints(g, callback, thisArg);
    });
  }
}

有没有办法让它工作?似乎没有简单的方法来获取google.maps.data-layers中的多边形边界。

最佳答案

您发布的代码有问题。您可以使用map.data访问数据层。

工作代码段。最初缩放到GeoJSON中的所有功能。单击时缩放到每个单独的多边形。

window.addEventListener("load", func1);
var map;

function func1() {
  map = new google.maps.Map(document.getElementById('map-canvas'), {
    zoom: 4,
    center: {
      lat: 0,
      lng: 0
    }
  });
  // Set the stroke width, and fill color for each polygon
  var featureStyle = {
    fillColor: '#ADFF2F',
    fillOpacity: 0.1,
    strokeColor: '#ADFF2F',
    strokeWeight: 1
  };

  // zoom to show all the features
  var bounds = new google.maps.LatLngBounds();
  map.data.addListener('addfeature', function(e) {
    processPoints(e.feature.getGeometry(), bounds.extend, bounds);
    map.fitBounds(bounds);
  });

  // zoom to the clicked feature
  map.data.addListener('click', function(e) {
    var bounds = new google.maps.LatLngBounds();
    processPoints(e.feature.getGeometry(), bounds.extend, bounds);
    map.fitBounds(bounds);
  });
  //Load mapdata via geoJson
  map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json');
}

function processPoints(geometry, callback, thisArg) {
  if (geometry instanceof google.maps.LatLng) {
    callback.call(thisArg, geometry);
  } else if (geometry instanceof google.maps.Data.Point) {
    callback.call(thisArg, geometry.get());
  } else {
    geometry.getArray().forEach(function(g) {
      processPoints(g, callback, thisArg);
    });
  }
}
html,
body,
#map-canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map-canvas" style="border: 2px solid #3872ac;"></div>

关于google-maps-api-3 - 缩放到Google Maps API v3中的geojson多边形边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507044/

相关文章:

javascript - 谷歌地图航点不显示完整路径

javascript - 将自定义 map 标记和标记过滤器集成到 Mapbox map 中

php - zurb foundation 3 中的响应式谷歌地图

javascript - 更改 FusionTablesLayerOptions 样式选项

javascript - 使用 angularjs 在谷歌地图上重叠标记

flutter - 如何在 Dart/flutter 中计算 GeoJson 几何区域

jackson - 将 GeoJSON 对象转换为 GML 几何

MongoDB $geoIntersects 与 LineString 类型不匹配

jquery - OpenLayers 4 - 适合所选要素的范围

javascript - 使用谷歌地图javascript旋转具有多个路径的svg标记