繁体   English   中英

使用 Google Maps Javascript API v3 数据层设置多个 GeoJson 文件的样式

[英]style multiple GeoJson files with the Google Maps Javascript API v3 data layer

我有一个使用 google api v3 显示来自 json 文件的多边形的站点。

该站点有多个 json 多边形,我需要用不同的颜色设置每个多边形的样式并创建形状的句柄。

我能找到的唯一示例是指纯多边形而不是 json 文件,有一个示例更改了 json 文件(我不能这样做,因为 json 文件是静态的。

示例代码:

var map;

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
        zoom: 4,
        center: { lat: 45, lng: -90 }
    });


//1st Json file
map.data.loadGeoJson(
        'https://storage.googleapis.com/mapsdevsite/json/google.json');

//2nd json file  (same as #1 for illustration purpose)
map.data.loadGeoJson(
        'https://storage.googleapis.com/mapsdevsite/json/google.json');

    // I want to style each Json file independently
    map.data.setStyle({
        fillColor: 'green',
        strokeWeight: 1
    });

   // map1.setMap(map);


}

我设法将图层添加到地图中,

  data_layer.loadGeoJson('https://storage.googleapis.com/mapsdevsite/json/google.json');


    // Construct the polygon.
    var nLayer = new google.maps.JSON({
        paths: data_layer,
        strokeColor: 'green',
        strokeOpacity: 0.5,
        strokeWeight: 1,
        fillColor: 'green',
        fillOpacity: 0.8
    });

    nLayer.setMap(map);

我无法将样式应用于地图。 有什么想法吗?

在 github上创建了一个演示,我使用Data Layer加载多边形(边界),我还展示了如何保持对各个多边形的引用并更新它们的特定样式。 查看this SO answer以获得一个片段(我不想在这里复制它,因为它是多余的)。

主要注意: new_boundary.feature = data_layer.getFeatureById(boundary_id); 我在哪里存储对特定功能的引用,我可以随时使用例如更新哪些样式:

data_layer.overrideStyle(new_boundary.feature, {
    fillColor: '#0000FF',
    fillOpacity: 0.9
});

它只会更新那个多边形,而不是全部。 因此,如果您在 geoJSON 文件中的多边形有一些唯一的 id,或者您可以为所有多边形分配 id,那么您可以根据这些来引用和更改它们的样式。

示例中未显示的另一个选项是具有多个数据层。 在您的应用程序中可以有多个数据层,例如像这样创建它们:

var data_layer = new google.maps.Data({map: map});
var data_layer_2 = new google.maps.Data({map: map});

然后将数据加载到它们并更改样式:

data_layer.loadGeoJson(
    'https://storage.googleapis.com/mapsdevsite/json/google.json');
data_layer_2.loadGeoJson(
    'https://storage.googleapis.com/mapsdevsite/json/google.json');
data_layer.setStyle({
    fillColor: 'green',
    strokeWeight: 1
});
data_layer_2.setStyle({
    fillColor: 'blue',
    strokeWeight: 2
});

我认为最好的方法是在您加载的 json 文件中为您的功能添加一个属性,如下所示:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "county": "hernando"
      },
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
          [
            [
              [
                -82.7784371,
                28.694206
              ],
              [
                -82.778214,
                28.6939659
              ],
            ]
          ]
        ]
      }
    }
  ]
}

注意重要的部分:

"properties": {
   "county": "hernando"
},

您的每个 json 文件都可以拥有任意数量的properties

然后在您的 javascript 文件中,您可以执行以下操作:

var map = new google.maps.Map($el[0], args);

map.data.loadGeoJson(
  '/wp-content/themes/hello-theme-child-master/county-json/pinellas.json'
);
map.data.loadGeoJson(
  '/wp-content/themes/hello-theme-child-master/county-json/pasco.json'
);
map.data.loadGeoJson(
  '/wp-content/themes/hello-theme-child-master/county-json/hillsborough.json'
);

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

  if ( county === 'pasco ) {
    color = 'orange'
  }
  else { 
    color = 'green'
  }

  return {
    fillColor: color,
    strokeWeight: 1
  };
});

需要注意的重要部分是您必须将一个函数传递给setStyle ,以便它自动遍历每个功能

我认为您需要单独添加多边形及其样式。 从示例( https://developers.google.com/maps/documentation/javascript/examples/polygon-arrays

// Define the LatLng coordinates for the polygon.
var triangleCoords = [
    {lat: 25.774, lng: -80.190},
    {lat: 18.466, lng: -66.118},
    {lat: 32.321, lng: -64.757}
];

// Construct the polygon.
var bermudaTriangle = new google.maps.Polygon({
  paths: triangleCoords,
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 3,
  fillColor: '#FF0000',
  fillOpacity: 0.35
});
bermudaTriangle.setMap(map);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM