Google Maps API-&toGeoJson"返回几何为空的对象

本教程将介绍Google Maps API-&toGeoJson"返回几何为空的对象的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

Google Maps API-&toGeoJson"返回几何为空的对象 教程 第1张

问题描述

我正在使用Google Maps绘图层(库)在我的地图上绘制形状。

绘制完我从Google地图API调用的"toGeoJson"函数后。

我收到的对象如下所示:

object received when calling "toGeoJSON"

我找不出我做错了什么。

我只是尝试使用地图上绘制的形状创建一个GeoJson。

我不粘贴任何代码,因为绘图部分全部由绘图库完成,而"toGeoJson"函数由Google地图API完成。

推荐答案

drawing manager上没有toGeoJSON方法,只存在于Data class上

使用绘图管理器在地图上绘制对象不会将它们添加到DataLayer。

您可以将对象从绘图管理器添加到数据层,然后对其调用toGeoJson

若要防止将重复对象添加到地图,请使用单独的数据对象,而不是地图上的数据对象。

proof of concept fiddle

(相关问题的一些代码:Export geoJSON data from Google Maps)

代码片段:

数据-lang="js"数据-隐藏="假"数据-控制台="假"数据-巴贝尔="假">

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

  var drawingManager = new google.maps.drawing.DrawingManager({
 drawingMode: google.maps.drawing.OverlayType.MARKER,
 drawingControl: true,
 drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
  google.maps.drawing.OverlayType.MARKER,
  google.maps.drawing.OverlayType.CIRCLE,
  google.maps.drawing.OverlayType.POLYGON,
  google.maps.drawing.OverlayType.POLYLINE,
  google.maps.drawing.OverlayType.RECTANGLE
]
 },
 markerOptions: {
icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png'
 },
 circleOptions: {
fillColor: '#ffff00',
fillOpacity: 1,
strokeWeight: 5,
clickable: false,
editable: true,
zIndex: 1
 }
  });
  drawingManager.setMap(map);
  var dataLayer = new google.maps.Data();
  // from https://stackoverflow.com/questions/25072069/export-geojson-data-from-google-maps
  // from http://jsfiddle.net/doktormolle/5F88D/
  google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
 switch (event.type) {
case google.maps.drawing.OverlayType.MARKER:


  dataLayer.add(new google.maps.Data.Feature({
 geometry: new google.maps.Data.Point(event.overlay.getPosition())
  }));
  break;
case google.maps.drawing.OverlayType.RECTANGLE:
  var b = event.overlay.getBounds(),
 p = [b.getSouthWest(), {
  lat: b.getSouthWest().lat(),
  lng: b.getNorthEast().lng()
},
b.getNorthEast(), {
  lng: b.getSouthWest().lng(),
  lat: b.getNorthEast().lat()
}
 ]
  dataLayer.add(new google.maps.Data.Feature({
 geometry: new google.maps.Data.Polygon([p])
  }));
  break;
case google.maps.drawing.OverlayType.POLYGON:
  dataLayer.add(new google.maps.Data.Feature({
 geometry: new google.maps.Data.Polygon([event.overlay.getPath().getArray()])
  }));
  break;
case google.maps.drawing.OverlayType.POLYLINE:
  dataLayer.add(new google.maps.Data.Feature({
 geometry: new google.maps.Data.LineString(event.overlay.getPath().getArray())
  }));
  break;
case google.maps.drawing.OverlayType.CIRCLE:
  dataLayer.add(new google.maps.Data.Feature({
 properties: {
radius: event.overlay.getRadius()
 },
 geometry: new google.maps.Data.Point(event.overlay.getCenter())
  }));
  break;
 }
  });
  google.maps.event.addDomListener(document.getElementById('save'), 'click', function() {
 dataLayer.toGeoJson(function(obj) {
document.getElementById('geojson').innerHTML = JSON.stringify(obj);
 });
  })
}
google.maps.event.addDomListener(window, 'load', initMap);
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#map {
  height: 100%;
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<input id="save" value="save" type="button" />
<div id="geojson"></div>
<div id="map"></div>

好了关于Google Maps API-&toGeoJson&quot;返回几何为空的对象的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。