Javascript google地图中的多Geojson源层排序问题

Javascript google地图中的多Geojson源层排序问题,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我尝试将多个geojson文件加载到我的google地图中,所有这些文件都显示出来。但是谷歌地图显示它们的方式确实是随机的 以下是我的想法: 我有一个多边形,我打算作为一个基础层,假设出现在第一 我还有其他多边形和线串,它们将从数据库中动态更改,并假设显示在基础层的顶部 有时基础层会出现在顶部,反之亦然。有时,一些线串显示在基础层的底部,而另一些线串显示在顶部。是否有任何方法可以排序geojson层的显示方式 我发现了类似的问题: 但是,这是针对kml而不是geojson的 var map;

我尝试将多个geojson文件加载到我的google地图中,所有这些文件都显示出来。但是谷歌地图显示它们的方式确实是随机的

以下是我的想法:

  • 我有一个多边形,我打算作为一个基础层,假设出现在第一

  • 我还有其他多边形和线串,它们将从数据库中动态更改,并假设显示在基础层的顶部

有时基础层会出现在顶部,反之亦然。有时,一些线串显示在基础层的底部,而另一些线串显示在顶部。是否有任何方法可以排序geojson层的显示方式

我发现了类似的问题: 但是,这是针对kml而不是geojson的

var map;
var src = '<?php echo base_url() ?>assets/map_files/global/barudt.json';

function initMap() {
map = new google.maps.Map(document.getElementById('googlemapsBorders'), {
    center: new google.maps.LatLng(-0.7, 115.2422315),
    zoom: 9,
    mapTypeId: 'roadmap'
});

var infoWindows = new google.maps.InfoWindow({
    disableAutoPan: true
});
var infoJalan = new google.maps.InfoWindow();

map.data.loadGeoJson(src);
map.data.setStyle(function(feature) {
    var color = feature.getProperty('color');

    return /** @type {!google.maps.Data.StyleOptions} */ ({
        fillColor: color,
        strokeColor: color,
        strokeWeight: 2
    });
});

// When the user clicks, set 'isColorful', changing the color of the letters.
map.data.addListener('click', function(event) {
    event.feature.setProperty('isColorful', true);
});


map.data.addListener('mouseover', function(event) {
    map.data.revertStyle();
    map.data.overrideStyle(event.feature, {
        strokeWeight: 5
    });

    var title = event.feature.getProperty('Name');
    var lt = parseFloat(event.feature.getProperty('lat'));
    var lg = parseFloat(event.feature.getProperty('lng'));

    infoWindows.setContent(title);
    infoWindows.setPosition({
        lat: lt,
        lng: lg
    });
    infoWindows.open(map);
});

map.data.addListener('mouseout', function(event) {
    map.data.revertStyle();
    infoWindows.close();
});


var jalan = JSON.parse(`<?php echo $detail; ?>`);
var jembatan = JSON.parse(`<?php echo $jembatan_detail; ?>`);
var infoWindow = new google.maps.InfoWindow(),
    marker, i;
var infoWindowContent = JSON.parse(`<?php echo ($infowindow); ?>`);
console.log(jalan);
console.log(jembatan);
console.log(infoWindowContent);


jalanLayer = new google.maps.Data({
    map: map,
    style: {
        strokeColor: 'red',
        strokeWeight: 5
    }
});

for (i = 0; i < jalan.length; i++) {
    jalanLayer[i] = new google.maps.Data({
        map: map,
        style: {
            strokeColor: 'red',
            strokeWeight: 3,
            fillColor: 'blue'
        }
    });

    jalanLayer[i].loadGeoJson('<?php echo base_url('
        assets / map_files / ') ?>' + jalan[i][1]);

    var lt;
    var lg;

    jalanLayer[i].addListener('click', function(event) {
        //alert("Latitude: " + event.latLng.lat() + " " + ", longitude: " + event.latLng.lng());
        lt = parseFloat(event.latLng.lat());
        lg = parseFloat(event.latLng.lng());
        console.log(event.latLng.lat() + ',' + event.latLng.lng());
    });

    google.maps.event.addListener(jalanLayer[i], 'click', (function(nama, i) {
        return function() {

            var title;
            jalanLayer[i].forEach(function(feature) {


                title = "<div id=content>\n\
                                    <div id=bodyContent>\n\
                                    <table><tr><td>Nama Ruas Jalan</td><td>:</td><td><b>" + jalan[i][2] + "</b></td></tr><tr><td>Status Ruas Jalan</td><td>:</td><td><b>" + jalan[i][4] + "</b></td></tr><tr><td>Fungsi Ruas Jalan</td><td>:</td><td><b>" + jalan[i][3] + "</b></td></tr></table></div></div>";
            });




            infoJalan.setContent(title);
            infoJalan.setPosition({
                lat: lt,
                lng: lg
            });
            infoJalan.open(map);

            map.setZoom(14);
            map.setCenter(infoJalan.getPosition());
        };
    })(jalanLayer[i], i));

    google.maps.event.addListener(jalanLayer[i], 'mouseover', (function(nama, i) {
        return function() {
            jalanLayer[i].setStyle({
                strokeColor: 'yellow'
            });
        };
    })(jalanLayer[i], i));

    google.maps.event.addListener(jalanLayer[i], 'mouseout', (function(nama, i) {
        return function() {
            jalanLayer[i].setStyle({
                strokeColor: 'red'
            });
        };
    })(jalanLayer[i], i));



}


for (i = 0; i < jembatan.length; i++) {
    if (jembatan[i][4]) {
        var icon = {
            url: 'https://dispupr.baritoutarakab.go.id/assets/map_icon/jembatan.png',
            scaledSize: new google.maps.Size(40, 40)
        };
        var position = new google.maps.LatLng(jembatan[i][2], jembatan[i][3]);
        marker = new google.maps.Marker({
            position: position,
            map: map,
            icon: icon,
            title: jembatan[i][1]
        });

        google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
                infoWindow.setContent(infoWindowContent[i][0]);
                infoWindow.open(map, marker);
            };
        })(marker, i));
    }
}

var area = new google.maps.Data({
    map: map
});
area.loadGeoJson('<?php echo base_url() ?>assets/map_files/area/danau_butong.geojson');
area.setStyle({
    fillColor: 'blue',
    strokeColor: 'blue',
    strokeWeight: 2
});

area.addListener('click', function(event) {
    lt = parseFloat(event.latLng.lat());
    lg = parseFloat(event.latLng.lng());
    console.log(event.latLng.lat() + ',' + event.latLng.lng());
});

}
var映射;
var src='assets/map_files/global/barudt.json';
函数initMap(){
map=new google.maps.map(document.getElementById('googlemapsBorders'){
中心:新google.maps.LatLng(-0.7115.2422315),
缩放:9,
mapTypeId:“路线图”
});
var infoWindows=new google.maps.InfoWindow({
真的吗
});
var infoJalan=new google.maps.InfoWindow();
map.data.loadGeoJson(src);
map.data.setStyle(函数(特性){
var color=feature.getProperty('color');
return/**@type{!google.maps.Data.StyleOptions}*/({
fillColor:color,
strokeColor:颜色,
冲程重量:2
});
});
//当用户单击时,设置“isColorful”,更改字母的颜色。
map.data.addListener('click',函数(事件){
event.feature.setProperty('isColorful',true);
});
map.data.addListener('mouseover',函数(事件){
map.data.revertStyle();
map.data.overrideStyle(event.feature{
冲程重量:5
});
var title=event.feature.getProperty('Name');
var lt=parseFloat(event.feature.getProperty('lat'));
var lg=parseFloat(event.feature.getProperty('lng');
infoWindows.setContent(标题);
infoWindows.setPosition({
拉特:上尉,
液化天然气:lg
});
打开(地图);
});
map.data.addListener('mouseout',函数(事件){
map.data.revertStyle();
infoWindows.close();
});
var jalan=JSON.parse(``);
var jembatan=JSON.parse(``);
var infoWindow=new google.maps.infoWindow(),
马克,我;
var infoWindowContent=JSON.parse(``);
控制台日志(jalan);
控制台日志(jembatan);
console.log(infoWindowContent);
jalanLayer=新的google.maps.Data({
地图:地图,
风格:{
strokeColor:'红色',
冲程重量:5
}
});
对于(i=0;i
数据层支持在“样式设置”功能中的多边形上设置

您没有提供GeoJSON,但使用Google的示例数据,您可以执行以下操作:

    map.data.setStyle(function(feature) {
      var color = 'gray';
      var letter = feature.getProperty('letter')
      var zIndex = 0;
      if (letter) {
        zIndex = 1;
        if (feature.getProperty('isColorful')) {
          color = feature.getProperty('color');
        }
      }
      return /** @type {!google.maps.Data.StyleOptions} */({
        fillColor: color,
        strokeColor: color,
        strokeWeight: 2,
        zIndex: zIndex
      });
    });

代码片段:

html,
身体,
#地图{
身高:100%;
保证金:0;
填充:0;
}

var映射;
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
缩放:4,
中心:{
拉丁语:-28,
液化天然气:137