- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我做了什么:我正在使用 Google map Javascript API。我的地理数据存储在 geoJSON 文件中。我已使用数据图层将数据放置在 map 上。我制作了一个用于显示 popUpWindows 的 clickEvent。
我想要什么:我只想在“类别”属性中具有“学校”值的标记上显示一个圆圈。
我的 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]
}
}
]
}
我的 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>
问题:如何才能做到这一点?
最佳答案
一种选择是在 DataLayer 的“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>
关于javascript - 如何访问 Google map 上放置的 geoJSON 数据中的数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35366806/
我正在尝试按照此链接 http://bost.ocks.org/mike/map/ 上的教程进行操作到目前为止,我已经完全按照列出的每条说明进行操作,但是当我尝试运行“#Converting Data
何我可以反转一个国家的 GeoJson,以便它将国家定义为世界地图多边形中的一个洞?我需要这个来在 OpenLayers 5.3 中创建 GeoJson VectorLayer 的蒙版。 最佳答案 在
我在构建 GeoJSON 并将其放在 map 上的传单代码方面遇到了一些麻烦。 GeoJSON 是根据服务的 XML 响应构建的。 错误是 无效的 GeoJSON 对象。 throw new Erro
我有一个 geojson 表示插值天气数据的等高线层。某些轮廓在更高的缩放级别消失,如以下屏幕抓图所示。 将多边形作为图层添加到 Mapbox 时,使用以下代码: map.addSource('min
我有一些地理边界 have a GeoJSON endpoint for . 我还有一些变量存储在单独的 GeoJSON endpoint 中它没有坐标,但确实有我想稍后使用 D3 对 map 进行主
我是 MapBox GL Js 的新手,我想通过 https 调用一个大的 GeoJSON 文件并将其显示到 map 上。 我认为调用 vector Tile 是最好的方法,我找到了一些教程,展示了如
我已经使用 SQL 到 geoJSON 生成了我的数据库的一些兴趣点。 地理数据: { "FeatureCollection" : [ { "g
创建一张与此处找到的 map 类似的 map : https://www.plantmaps.com/interactive-california-2012-usda-plant-zone-hardi
我对 ammCharts 比较陌生,这也是我第一次尝试创建 geoJSON 文件。 以下是我的geoJson文件: GeoJSON file 这就是我要实现的目标: example 当我加载我的 ge
我有几个 geojson 层,并且我使用组将其分层。我使用此处找到的 Mike 答案将 map 集中在给定的 geojson 文件上 -> Center a map in d3 given a geo
环回新手,但设置我的第一个基于节点的 RestAPI 很有趣。我能够创建模型并在数据存储中创建关联的表。我的模型需要具有数据类型 geojson 的属性,即以下形式的字符串: { “类型”:“特征”,
我使用传单构建了一个 map ,其中包含大的 GeoJSON 区域,这些区域由多个“较小”的 GeoJSON 区域组成。 我正在使用 Leaftet-Ajax 来这样调用它们: var Rennes
我已经能够让其中的一部分工作,但是当 properties.affectedZones 有多个条目时,我的 jQuery 失败了。我已经使用 .each 努力显示受到红旗警告的受影响区域,但是当有两个
我需要对从 geojson 文件中提取的每个功能进行不同的样式设置。然而,这个匿名样式函数仅更改它遇到的第一个功能的样式并停止。我是传单新手。看过几个演示,但找不到这个匿名样式函数仅更改第一个功能的样
我有多个 geojson 类型:存储在 Mysql 中的 FeatureCollection。我想将两个或多个 geojson 合并到一个 FeatureCollection geojson 中并显示
我有这个 geojson { "type":"FeatureCollection", "features":[ { "type":"Feature",
我正在尝试在基于标准 HelloWorld 示例应用程序的测试应用程序中加载以下 geoJson 文件。 { "type": "FeatureCollection", "generator":
我正在使用 GeoJSON 数据构建传单 map 。尝试根据 GeoJSON 属性设置我使用的图标时遇到问题。我认为我的错误与使用字符串调用对象有关,但我无法弄清楚它到底是什么。 这是我的代码: Ge
我有包含如下地理字段的文档。 "geo" : { "type" : "Point", "coordinates" : [ 37.44609999, -1
是否可以仅使用 JavaScript(通过 d3、topojson 或任何其他方式)确定给定纬度、经度的 GeoJSON 点是否位于给定 GeoJSON 多边形内? 例如,我可以根据教程 here 绘
我是一名优秀的程序员,十分优秀!