如何访问放置在谷歌地图上的geoJSON数据中的数据对象
How can I access dataobjects in geoJSON data, placed on Google Maps
我做了什么:我正在使用Google Maps Javascript API。我的地理数据存储在地理 JSON 文件中。我已使用数据图层将数据放置在地图上。我做了一个点击事件来显示弹出窗口。
我想要什么:我只想在"类别"属性中具有值"学校"的标记上显示一个圆圈。
我的地理 JSON 看起来像这样:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"category": "School",
"name":"De Hooge Waai",
"popupContent": "Basisschool De Hooge Waai in Raamsdonk",
"icon": "http://maps.google.com/mapfiles/kml/paddle/S.png"
},
"geometry": {
"type": "Point",
"coordinates": [4.905370,51.686385]
}
},
{
"type": "Feature",
"properties": {
"category": "Museum",
"name":"Landgoed Het Broeck",
"popupContent": "Landgoed 'Het Broeck heeft rijtuigmuseum",
"icon": "http://maps.google.com/mapfiles/kml/paddle/M.png"
},
"geometry": {
"type": "Point",
"coordinates": [4.900267,51.686103]
}
}
]
}
我的JavaScript看起来像这样:
<script>
function initMap() {
//----------
// Map
//----------
var mapOptions = {
zoom: 15,
center:{lat: 51.687762, lng: 4.909900}
};
var map = new google.maps.Map(document.getElementById("map"),mapOptions);
//-----------
// Assets:
//-----------
infowindow = new google.maps.InfoWindow({
content: ""
});
var regionCircle = new google.maps.Circle({
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
radius: 500
});
// JSON:
map.data.loadGeoJson('test.json');
// ICON:
map.data.setStyle(function(feature) {
return ({
icon:{
url:feature.getProperty('icon'),
scaledSize: new google.maps.Size(32, 32)
}
});
});
//---------------
// Events:
//---------------
map.data.addListener('click', function(event) {
var myHTML = "<h1>"+event.feature.getProperty("category")+
"</h1><h2>"+event.feature.getProperty("name")+"</h2>" +
event.feature.getProperty("popupContent");
infowindow.setContent(myHTML);
infowindow.setPosition(event.feature.getGeometry().get());
infowindow.setOptions({pixelOffset: new google.maps.Size(0,-30)});
infowindow.open(map);
});
google.maps.event.addListener(map,'click',function() {
infowindow.close();
});
}
</script>
问题:如何做到这一点?
一种选择是在数据层的"addfeature"事件上使用侦听器。请注意,javascript 区分大小写,因此"school"与"School"不同。
map.data.addListener('addfeature', function(evt) {
if (evt.feature.getProperty('category') == "School") {
var regionCircle = new google.maps.Circle({
center: evt.feature.getGeometry().get(),
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
radius: 500,
map: map
});
}
});
概念验证小提琴
代码片段:
function initMap() {
//----------
// Map
//----------
var mapOptions = {
zoom: 14,
center: {
lat: 51.687762,
lng: 4.909900
}
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
//-----------
// Assets:
//-----------
infowindow = new google.maps.InfoWindow({
content: ""
});
var regionCircle = new google.maps.Circle({
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
radius: 500
});
map.data.addListener('addfeature', function(evt) {
if (evt.feature.getProperty('category') == "School") {
var regionCircle = new google.maps.Circle({
center: evt.feature.getGeometry().get(),
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
radius: 500,
map: map
});
}
});
// JSON:
map.data.addGeoJson(geoJson);
// ICON:
map.data.setStyle(function(feature) {
return ({
icon: {
url: feature.getProperty('icon'),
scaledSize: new google.maps.Size(32, 32)
}
});
});
//---------------
// Events:
//---------------
map.data.addListener('click', function(event) {
var myHTML = "<h1>" + event.feature.getProperty("category") +
"</h1><h2>" + event.feature.getProperty("name") + "</h2>" +
event.feature.getProperty("popupContent");
infowindow.setContent(myHTML);
infowindow.setPosition(event.feature.getGeometry().get());
infowindow.setOptions({
pixelOffset: new google.maps.Size(0, -30)
});
infowindow.open(map);
});
google.maps.event.addListener(map, 'click', function() {
infowindow.close();
});
}
google.maps.event.addDomListener(window, "load", initMap);
var geoJson = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"category": "School",
"name": "De Hooge Waai",
"popupContent": "Basisschool De Hooge Waai in Raamsdonk",
"icon": "http://maps.google.com/mapfiles/kml/paddle/S.png"
},
"geometry": {
"type": "Point",
"coordinates": [4.905370, 51.686385]
}
}, {
"type": "Feature",
"properties": {
"category": "Museum",
"name": "Landgoed Het Broeck",
"popupContent": "Landgoed 'Het Broeck heeft rijtuigmuseum",
"icon": "http://maps.google.com/mapfiles/kml/paddle/M.png"
},
"geometry": {
"type": "Point",
"coordinates": [4.900267, 51.686103]
}
}]
};
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map"></div>
相关文章:
- 不显示带有本地json文件数据的谷歌地图脚本
- 缓存谷歌地图数据
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记
- 将iPhone位置数据输入谷歌地图
- 使用来自URL的JSON数据来显示谷歌地图标记-如何
- 基于数据的谷歌地图API标记
- 如何通过使用谷歌地图从文本字段提交来修改javascript对象中的数据
- 谷歌地图获取kml数据并显示它们
- 谷歌地图/融合表Javascript HTML赢得't显示/可视化所有多边形数据(通过色标)
- 在谷歌地图的JSON数据中循环
- 谷歌地图API-在从ajax页面加载新数据之前清除标记、多段线
- 谷歌地图标记不显示ajax json数据
- 将JSON文件中的数据加载到谷歌地图中的地图标记中
- 当点击处理程序添加到谷歌地图圆圈标记时,无法访问对象数据
- 谷歌地图数据类型抛出类型错误:can't将未定义转换为对象
- 如何执行Ajax GET请求以从rails获取数据并将其传递给javascript(谷歌地图)
- 谷歌地图样本阅读数据
- 在谷歌地图中绘制闪电数据
- 试图在网站上抓取谷歌地图api生成的动态数据,但正常抓取返回空白
- 我可以在谷歌地图上使用OpenStreetMap数据创建获取路线吗?如何