传单:不同坐标的不同颜色标记
Leaflet: Different color markers for different coordinates
我正在使用 Leaflet 制作交互式地图。我在地图上有标记(基于它们的经度和纬度坐标),我希望一些标记具有与其他标记不同的颜色。例如,一些坐标我给它打了“10”的分数,我希望它是粉红色的,而其他标记的分数是“5”,我想给它们打上红色的标记。
我有一个 marker.js 文件:
var myIcon = L.icon({
iconUrl: 'icon_ping.png',
iconSize: [20, 15],
iconAnchor: [5, 23],
popupAnchor: [0, -11]
});
for ( var i=0; i < markers.length; ++i )
{
L.marker( [markers[i].lat, markers[i].lng], {icon: myIcon} )
.bindPopup( '<a target="_blank">' + markers[i].name + '<br>' + markers[i].address + '<br>' +'Score: ' + markers[i].score + '</a>' )
.addTo( map );
}
我还有一个 coordinates.json 文件,其中包含坐标和我的分数
markers = [
{
"name": "Place",
"address": "123, TX",
"score": "10",
"lat": 12.123,
"lng": 23.234
}
...
];
基本上我只是希望相同分数的标记具有相同颜色的标记。我在想我需要创建另一个 var myIcon_2
并在 for 循环中放置一个 if
语句吗?这会奏效还是有另一种更好的方法来解决这个问题?
谢谢。
你描述的方式就是这样做的方式。但是为了避免重复大量代码等,你应该使用三元运算符来定义图标,即:
var myIcon = L.icon({
iconUrl: 'icon_ping.png',
iconSize: [20, 15],
iconAnchor: [5, 23],
popupAnchor: [0, -11]
}),
myIcon2 = L.icon({
iconUrl: 'icon_ping2.png',
iconSize: [20, 15],
iconAnchor: [5, 23],
popupAnchor: [0, -11]
});
for ( var i=0; i < markers.length; ++i )
{
var icon = markers[i].score === 10 ? myIcon2 : myIcon;
L.marker( [markers[i].lat, markers[i].lng], {icon: icon} )
.bindPopup( '<a target="_blank">' + markers[i].name + '<br>' + markers[i].address + '<br>' +'Score: ' + markers[i].score + '</a>' )
.addTo( map );
}
我正在使用 Leaflet 制作交互式地图。我在地图上有标记(基于它们的经度和纬度坐标),我希望一些标记具有与其他标记不同的颜色。例如,一些坐标我给它打了“10”的分数,我希望它是粉红色的,而其他标记的分数是“5”,我想给它们打上红色的标记。
我有一个 marker.js 文件:
var myIcon = L.icon({
iconUrl: 'icon_ping.png',
iconSize: [20, 15],
iconAnchor: [5, 23],
popupAnchor: [0, -11]
});
for ( var i=0; i < markers.length; ++i )
{
L.marker( [markers[i].lat, markers[i].lng], {icon: myIcon} )
.bindPopup( '<a target="_blank">' + markers[i].name + '<br>' + markers[i].address + '<br>' +'Score: ' + markers[i].score + '</a>' )
.addTo( map );
}
我还有一个 coordinates.json 文件,其中包含坐标和我的分数
markers = [
{
"name": "Place",
"address": "123, TX",
"score": "10",
"lat": 12.123,
"lng": 23.234
}
...
];
基本上我只是希望相同分数的标记具有相同颜色的标记。我在想我需要创建另一个 var myIcon_2
并在 for 循环中放置一个 if
语句吗?这会奏效还是有另一种更好的方法来解决这个问题?
谢谢。
你描述的方式就是这样做的方式。但是为了避免重复大量代码等,你应该使用三元运算符来定义图标,即:
var myIcon = L.icon({
iconUrl: 'icon_ping.png',
iconSize: [20, 15],
iconAnchor: [5, 23],
popupAnchor: [0, -11]
}),
myIcon2 = L.icon({
iconUrl: 'icon_ping2.png',
iconSize: [20, 15],
iconAnchor: [5, 23],
popupAnchor: [0, -11]
});
for ( var i=0; i < markers.length; ++i )
{
var icon = markers[i].score === 10 ? myIcon2 : myIcon;
L.marker( [markers[i].lat, markers[i].lng], {icon: icon} )
.bindPopup( '<a target="_blank">' + markers[i].name + '<br>' + markers[i].address + '<br>' +'Score: ' + markers[i].score + '</a>' )
.addTo( map );
}