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

Google maps api 3 在Google Maps API v3中缩放到geojson多边形边界,google-maps-api-3,geojson,Google Maps Api 3,Geojson,我正在从Postgis数据库加载geojson,并希望在地图上显示它。 绘制多边形后,我希望贴图缩放到添加多边形的范围 我的数据加载良好,在地图上显示正确,但我不知道如何获取边界并将缩放更改为新添加的多边形。 我试图使用谷歌的部分代码 , 但显示的地图会放大靠近贝克群岛的太平洋中的某个地方,而多边形在卢森堡会正确显示 下面是我正在使用的代码: window.addEventListener(“加载”,函数1); 函数func1(){ //通过geoJson加载mapdata var parzel

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

我的数据加载良好,在地图上显示正确,但我不知道如何获取边界并将缩放更改为新添加的多边形。 我试图使用谷歌的部分代码 , 但显示的地图会放大靠近贝克群岛的太平洋中的某个地方,而多边形在卢森堡会正确显示

下面是我正在使用的代码:

window.addEventListener(“加载”,函数1);
函数func1(){
//通过geoJson加载mapdata
var parzelle=new google.maps.Data();
loadGeoJson(“./mapdata/get_parzelle_geojson.php”);
//设置每个多边形的笔划宽度和填充颜色
变量featureStyle={
fillColor:“#ADFF2F”,
填充不透明度:0.1,
strokeColor:“#ADFF2F”,
冲程重量:1
}
parzelle.setStyle(特色风格);
parzelle.setMap(map);
缩放(地图);
}
功能缩放(地图){
var bounds=new google.maps.LatLngBounds();
map.data.forEach(函数(特性){
processPoints(feature.getGeometry(),bounds.extend,bounds);
});
映射边界(bounds);
}
函数processPoints(几何体、回调、thisArg){
if(google.maps.LatLng的几何体实例){
callback.call(thisArg,geometry);
}else if(google.maps.Data.Point的几何体实例){
callback.call(thisArg,geometry.get());
}否则{
geometry.getArray().forEach(函数(g){
处理点(g、回调、thisArg);
});
}
}

有没有办法让它发挥作用?在
google.maps.data layers

中,似乎没有简单的方法来获取多边形的边界。您发布的代码存在问题。可以使用map.data访问数据层

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

window.addEventListener(“加载”,函数1);
var映射;
函数func1(){
map=new google.maps.map(document.getElementById('map-canvas'){
缩放:4,
中心:{
纬度:0,
液化天然气:0
}
});
//设置每个多边形的笔划宽度和填充颜色
变量featureStyle={
fillColor:“#ADFF2F”,
填充不透明度:0.1,
strokeColor:“#ADFF2F”,
冲程重量:1
};
//缩放以显示所有特征
var bounds=new google.maps.LatLngBounds();
map.data.addListener('addfeature',函数(e){
processPoints(例如,feature.getGeometry(),bounds.extend,bounds);
映射边界(bounds);
});
//缩放到单击的功能
map.data.addListener('click',函数(e){
var bounds=new google.maps.LatLngBounds();
processPoints(例如,feature.getGeometry(),bounds.extend,bounds);
映射边界(bounds);
});
//通过geoJson加载mapdata
map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json');
}
函数processPoints(几何体、回调、thisArg){
if(google.maps.LatLng的几何体实例){
callback.call(thisArg,geometry);
}else if(google.maps.Data.Point的几何体实例){
callback.call(thisArg,geometry.get());
}否则{
geometry.getArray().forEach(函数(g){
处理点(g、回调、thisArg);
});
}
}
html,
身体,
#地图画布{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}

您好,请尝试以下工作正常的代码,请将url替换为geojson文件路径

$.ajax({
  url: url,
  dataType: 'JSON',
  success: function(data) {
    var lat = {}, lng = {};
    $(data.features).each(function(key,feature) {
      $(feature.geometry.coordinates[0]).each(function(key,val) {
        lng['max'] = (!lng['max'] || Math.abs(lng['max']) > Math.abs(val[0])) ? val[0] : lng['max'];
        lng['min'] = (!lng['min'] || Math.abs(lng['min']) < Math.abs(val[0])) ? val[0] : lng['min'];
        lat['max'] = (!lat['max'] || Math.abs(lat['max']) > Math.abs(val[1])) ? val[1] : lat['max'];
        lat['min'] = (!lat['min'] || Math.abs(lat['min']) < Math.abs(val[1])) ? val[1] : lat['min'];
      });
    });
    var bounds = new google.maps.LatLngBounds();
    bounds.extend(new google.maps.LatLng(lat.min - 0.01, lng.min - 0.01));
    bounds.extend(new google.maps.LatLng(lat.max - 0.01, lng.max - 0.01));
    map.fitBounds(bounds);
    map.setCenter(bounds.getCenter());
  }
});
$.ajax({
url:url,
数据类型:“JSON”,
成功:功能(数据){
var lat={},lng={};
$(data.features)。每个(功能)(键,功能){
$(feature.geometry.coordinates[0])。每个(函数(键,val){
lng['max']=(!lng['max']| Math.abs(lng['max'])>Math.abs(val[0])?val[0]:lng['max'];
lng['min']=(!lng['min']| Math.abs(lng['min'])Math.abs(val[1])?val[1]:lat['max'];
lat['min']=(!lat['min']| | Math.abs(lat['min'])
地图API(至少从今天的V3.26开始)支持
数据.Geometry.prototype.forEachLatLng()
,它抽象出各种
几何体
类型

考虑到您已经将geoJSON导入了
map.data
,可以很容易地重新缩放地图以适应(“适应边界”):

var-bounds=new google.maps.LatLngBounds();
map.data.forEach(函数(特性){
feature.getGeometry().forEachLatLng(函数(latlng){
边界扩展(latlng);
});
});
映射边界(bounds);
如果您的功能已经因为其他原因(例如设置样式)而被迭代,您可以将此代码应用到现有循环中以提高效率