Javascript 从谷歌地图导出geoJSON数据
是否有内置支持或任何库可以从Javascript 从谷歌地图导出geoJSON数据,javascript,google-maps-api-3,export,geojson,Javascript,Google Maps Api 3,Export,Geojson,是否有内置支持或任何库可以从google.maps.data层或google.maps.data.Feature或google.maps.data.Geometry导出geoJSON数据,甚至可以使用标记、多段线和多边形导出数据。我有这样的代码,例如: var point=new google.maps.Data.Point(m.getPosition()); activeFeature.setGeometry(point); console.log(activeFeature.getGe
google.maps.data
层或google.maps.data.Feature
或google.maps.data.Geometry
导出geoJSON
数据,甚至可以使用标记
、多段线
和多边形
导出数据。我有这样的代码,例如:
var point=new google.maps.Data.Point(m.getPosition());
activeFeature.setGeometry(point);
console.log(activeFeature.getGeometry());
equiLayer.add(activeFeature);
我想将此数据作为geojson导出到服务器。类似于传单中的toGeoJson
方法?示例函数:
google.maps.Map.prototype.getGeoJson=function(callback){
var geo={"type": "FeatureCollection","features": []},
fx=function(g,t){
var that =[],
arr,
f = {
MultiLineString :'LineString',
LineString :'Point',
MultiPolygon :'Polygon',
Polygon :'LinearRing',
LinearRing :'Point',
MultiPoint :'Point'
};
switch(t){
case 'Point':
g=(g.get)?g.get():g;
return([g.lng(),g.lat()]);
break;
default:
arr= g.getArray();
for(var i=0;i<arr.length;++i){
that.push(fx(arr[i],f[t]));
}
if( t=='LinearRing'
&&
that[0]!==that[that.length-1]){
that.push([that[0][0],that[0][1]]);
}
return that;
}
};
this.data.forEach(function(feature){
var _feature = {type:'Feature',properties:{}}
_id = feature.getId(),
_geometry = feature.getGeometry(),
_type =_geometry.getType(),
_coordinates = fx(_geometry,_type);
_feature.geometry={type:_type,coordinates:_coordinates};
if(typeof _id==='string'){
_feature.id=_id;
}
geo.features.push(_feature);
feature.forEachProperty(function(v,k){
_feature.properties[k]=v;
});
});
if(typeof callback==='function'){
callback(geo);
}
return geo;
}
演示:
注意:演示还存储圆圈,但GeoJSON不支持圆圈。作为一种解决方法,它将圆存储为具有半径特性的点
将具有半径特性的点加载到数据层时,演示将隐藏标记,并根据几何图形和半径特性创建一个圆
:现在有一个内置方法可用于geoJSON导出:
请参见以获取一个示例嗨,我想分享一下我如何将geojson数据从谷歌地图导出到html文本区域
这是我的html视图
<article id="article3" style="">
<div style="margin: 2px 0px 2px 0px;">
<button onclick= "exportData()">Save</button>
</div>
<textarea id="geojson-input" placeholder="..." class="" style="height: 97%; width: 100%"></textarea>
</article>
函数togeojson是map.data类的一个函数,它将从映射中获取所有数据并返回到对象。要在我的textarea上显示该对象,我必须使用JSON.stringify(数据)将该对象转换为字符串
希望这会有帮助 这些都不适合我。我找到了一种导出自定义多边形的方法,这对其他形状可能也很有用
以下是关键的导出功能:
function getPathArray(polygon) {
return polygon.getPath().getArray().map(p => {
return { lat: p.lat(), lng: p.lng() }
})
}
下面是一个完整的示例:
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 5,
center: { lat: 25.774, lng: -70.190 }, // bermuda triangle
});
const bermudaTriangle = new google.maps.Polygon({
paths: [
{ lat: 25.774, lng: -80.190 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
],
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
editable: true,
draggable: false
});
bermudaTriangle.setMap(map);
bermudaTriangle.getPaths().forEach(function (path, index) {
google.maps.event.addListener(path, 'insert_at', function () {
var data = getPathArray(bermudaTriangle)
console.log(JSON.stringify(data))
})
google.maps.event.addListener(path, 'remove_at', function () {
var data = getPathArray(bermudaTriangle)
console.log(JSON.stringify(data))
})
google.maps.event.addListener(path, 'set_at', function () {
var data = getPathArray(bermudaTriangle)
console.log(JSON.stringify(data))
})
})
google.maps.event.addListener(bermudaTriangle, 'dragend', function () {
console.log("dragged")
})
}
function getPathArray(polygon) {
return polygon.getPath().getArray().map(p => {
return { lat: p.lat(), lng: p.lng() }
})
}
然后使用打印到控制台的json并导入它
bermudaTriangle.setPath(JSON.parse(myJson))
13岁时:27@aa333我没有像视频中的开发者那样为我的数据提供JS/JSON源,数据是在地图上创建然后导出的。如果这是你的Google Maps Javascript API v3地图(我不清楚你的问题),没有本地支持将其导出为GeoJSON,但是编写代码来实现这一点应该不难。嗨!我得到错误“google.maps.Data.toGeoJson不是一个函数”。。当我尝试console.log时。谢谢您必须调用实例的方法,例如,当map的变量名为myMap
时,调用必须是myMap.data.toGeoJson(函数(数据){console.log(数据);})代码>啊哈完美!非常感谢你!一个好样本!太糟糕了,没有任何评论。。。然后将是一个示例,但现在只是一个共享代码…我们可以使用toGeoJson()方法在地图上获得单个覆盖的geoJSON吗?也就是说,在click处理程序中,我想获得该特定形状的geoJSON
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 5,
center: { lat: 25.774, lng: -70.190 }, // bermuda triangle
});
const bermudaTriangle = new google.maps.Polygon({
paths: [
{ lat: 25.774, lng: -80.190 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
],
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
editable: true,
draggable: false
});
bermudaTriangle.setMap(map);
bermudaTriangle.getPaths().forEach(function (path, index) {
google.maps.event.addListener(path, 'insert_at', function () {
var data = getPathArray(bermudaTriangle)
console.log(JSON.stringify(data))
})
google.maps.event.addListener(path, 'remove_at', function () {
var data = getPathArray(bermudaTriangle)
console.log(JSON.stringify(data))
})
google.maps.event.addListener(path, 'set_at', function () {
var data = getPathArray(bermudaTriangle)
console.log(JSON.stringify(data))
})
})
google.maps.event.addListener(bermudaTriangle, 'dragend', function () {
console.log("dragged")
})
}
function getPathArray(polygon) {
return polygon.getPath().getArray().map(p => {
return { lat: p.lat(), lng: p.lng() }
})
}
bermudaTriangle.setPath(JSON.parse(myJson))