使用Google Maps Javascript API v3数据层设计多个GeoJson文件
style multiple GeoJson files with the Google Maps Javascript API v3 data layer
我有一个网站,使用谷歌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
加载多边形(边界),我还展示了如何保持对各自多边形的引用并更新其特定样式。查看这个SO答案的一个片段(我不想在这里复制它,因为它是多余的)。
主要注意: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
});
我想你会想要单独添加多边形和它们的样式。从示例(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);
我认为最好的方法是为你的特性添加一个属性,在你加载的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
,以便它自动遍历每个特性
- d3.js,是否可以将超链接附加到GeoJSON文件
- 从本地 geojson 文件地图框/传单创建 var
- 从GeoJson文件中获取单独的Lat和Lng值
- 我在哪里可以获得印度的.geojson文件,而不是每个州/地区的单独文件或任何其他区别
- 使用 JS 和 geojson 文件创建纽约市行政区的 d3 地图
- 情节:基于GeoJSON文件创建地图
- 发布到GEOJSON谷歌将数据映射到我的远程服务器上的json文件
- 使用实时数据对GeoJSON文件中的许多标记进行样式化
- 使用LEaflet将多个geoJSon文件查看到视图中
- 如何使用javascript将GeoJSON保存为文件
- 谷歌地图行程从geoJSON文件
- 字符串str总是空的,尽管它填充了.geojson文件中的数据
- 外部文件与内部对象的GeoJSON投影
- 传单:加载geoJSON文件和特定的PopUp
- 自定义标记点从geoJson文件与谷歌地图
- mapbox不能与另一个.geojson文件一起工作的例子
- 引用geoJSON文件中的数据
- 我如何将我的CAD(DWG)文件转换为GeoJSON
- 解析geojson文件后,为什么在浏览器中看不到地图?
- 使用Google Maps Javascript API v3数据层设计多个GeoJson文件