我正在使用Google Maps API构建一个带有多个标记的地图,但我想让其中一个标记与其他标记不同。我认为最简单的方法是将标记的颜色更改为蓝色,而不是红色。这是一个简单的事情吗?还是我必须通过某种方式创建全新的图标?如果我必须创建一个新图标,最简单的方法是什么?
我正在使用Google Maps API构建一个带有多个标记的地图,但我想让其中一个标记与其他标记不同。我认为最简单的方法是将标记的颜色更改为蓝色,而不是红色。这是一个简单的事情吗?还是我必须通过某种方式创建全新的图标?如果我必须创建一个新图标,最简单的方法是什么?
使用Google Maps API第3版本,最简单的方法可能是获取自定义图标集,例如Benjamin Keen在此处创建的图标集:
http://www.benjaminkeen.com/google-maps-coloured-markers/
如果您将这些图标放在与你的地图页面相同的位置,您可以通过在创建时使用适当的图标选项来为标记着色:
var beachMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: 'brown_markerA.png'
});
这非常简单,这也是我目前正在进行的项目所采用的方法。
2019年3月修改 现在支持程序化颜色选择,
纯JavaScript,无图片,支持标签
不再依赖于已弃用的Charts API
var pinColor = "#FFFFFF";
var pinLabel = "A";
// Pick your pin (hole or no hole)
var pinSVGHole = "M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z";
var labelOriginHole = new google.maps.Point(12,15);
var pinSVGFilled = "M 12,2 C 8.1340068,2 5,5.1340068 5,9 c 0,5.25 7,13 7,13 0,0 7,-7.75 7,-13 0,-3.8659932 -3.134007,-7 -7,-7 z";
var labelOriginFilled = new google.maps.Point(12,9);
var markerImage = { // https://developers.google.com/maps/documentation/javascript/reference/marker#MarkerLabel
path: pinSVGFilled,
anchor: new google.maps.Point(12,17),
fillOpacity: 1,
fillColor: pinColor,
strokeWeight: 2,
strokeColor: "white",
scale: 2,
labelOrigin: labelOriginFilled
};
var label = {
text: pinLabel,
color: "white",
fontSize: "12px",
}; // https://developers.google.com/maps/documentation/javascript/reference/marker#Symbol
this.marker = new google.maps.Marker({
map: map.MapObject,
//OPTIONAL: label: label,
position: this.geographicCoordinates,
icon: markerImage,
//OPTIONAL: animation: google.maps.Animation.DROP,
});
http
没有安全风险。 - Jonathan12, 9
、12, 15
和 12, 17
是如何确定的? - ackerleytng一种方法是使用MapIconMaker(已失效)。有一个示例在这里(已失效)。Google Maps默认图标的宽度为20px,高度为34px,因此您可以使用类似以下内容来模拟:
var newIcon = MapIconMaker.createMarkerIcon({width: 20, height: 34, primaryColor: "#0000FF", cornercolor:"#0000FF"});
var marker = new GMarker(map.getCenter(), {icon: newIcon});
您甚至可以将其包装在一些函数中,以便使自己更轻松:
function getIcon(color) {
return MapIconMaker.createMarkerIcon({width: 20, height: 34, primaryColor: color, cornercolor:color});
}
这是我个人在创建所有标记时使用的方法。我更喜欢随心所欲地更改颜色的选项。
更新:默认图标的十六进制颜色为“#FE7569”。另外,您可以在标记上设置setImage而不是创建具有新图标的新标记。因此,如果您想要一个高亮功能,您可以使用上面的函数,例如:
function highlightMarker(marker, highlight) {
var color = "#FE7569";
if (highlight) {
color = "#0000FF";
}
marker.setImage(getIcon(color).image);
}
自从V2被V3取代后,我认为我应该更新这个答案。我创建了一个库,用于自定义标记,可以在V3实用程序库此处(失效链接)找到。它允许不同的颜色和形状,并且您也可以在标记上放置文本。它通过使用Google Charts API来创建Google Maps类型标记。如果您愿意直接使用Google Charts API,则可以随时查看源代码。
然而,这个库的问题在于它为您定义了这些标记图像的可点击区域,因此,例如,带有文本的较长气泡将具有人们期望的可点击区域,如此示例(失效链接)。
由于地图v2已被弃用,您可能对v3地图感兴趣:https://developers.google.com/maps/documentation/javascript/markers#simple_icons
对于v2地图:
http://code.google.com/apis/maps/documentation/overlays.html#Icons_overview
您可以使用一个逻辑集完成“常规”标记,并使用定义的新标记另外实现“特殊”标记。
个人认为Google Charts API生成的图标既好看,也容易在动态情况下进行自定义。
我发现最简单的方法是使用BitmapDescriptorFactory.defaultMarker(),文档甚至有一个设置颜色的示例。以下是我的代码:
MarkerOptions marker = new MarkerOptions()
.title(formatInfo(data))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.position(new LatLng(data.getLatitude(), data.getLongitude()))
这篇相对较新的文章提供了一个简单的示例,使用有限的谷歌地图彩色图标。
如果想要查看一个真实网站示例,使用蓝色和橙色地图标记,请查看这个网站并查看Google地图下的脚本。
<section id="map" class="map">
<script>
let map;
const speediwash = { lat: 52.656937, lng: -8.634390 };
const stJosephX = { lat: 52.658041, lng: -8.632414};
// const maryI = { lat: 52.653192, lng: -8.638974 };
const trainStn = { lat: 52.658757, lng: -8.623560 };
// const claytonH = { lat: 52.660802, lng: -8.636411 };
let markersArray = []; // Global array to store the marker object
function initMap()
{
map = new google.maps.Map(document.getElementById('map'),
{
center: stJosephX,
zoom: 15.1
});
addMarker(speediwash, "Speediwash", "blue");
//addMarker(maryI, "Mary I College", "green");
addMarker(trainStn, "Train Station", "orange");
//addMarker(claytonH, "Clayton Hotel", "purple");
}
function addMarker(latLng, alabel, color)
{
let url = "https://maps.google.com/mapfiles/ms/icons/";
url += color + "-dot.png";
let marker = new google.maps.Marker(
{
map: map,
position: latLng,
label: alabel,
icon:
{
url: url,
labelOrigin: new google.maps.Point(60, 30)
}
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyANwXk4HVQv7w5WAEUCStjAgT25b0s0p1Y&callback=initMap">
</script>