Я использую API Карт Google для создания карты, полной маркеров, но хочу, чтобы один маркер выделялся среди других. Думаю, проще всего было бы изменить цвет маркера на синий вместо красного. Это просто сделать или мне нужно как-то создать совершенно новый значок? Если мне нужно создать новый значок, как это сделать проще всего?
Как я могу изменить цвет маркера Google Maps?
Ответы (8)
Поскольку карты версии 2 устарели, вы, вероятно, заинтересованы в картах версии 3: https://developers.google.com/maps/documentation/javascript/markers#simple_icons.
Для карт v2:
http://code.google.com/apis/maps/documentation/overlays.html#Icons_overview
У вас может быть один набор логики для всех «обычных» выводов, а другой - для «специальных» выводов с использованием нового определенного маркера.
В версии 3 API Карт Google проще всего сделать это, взяв собственный набор значков, например тот, который создал здесь Бенджамин Кин:
http://www.benjaminkeen.com/google-maps-coloured-markers/ < / а>
Если вы поместите все эти значки в то же место, что и страница карты, вы можете раскрасить маркер, просто используя соответствующую опцию значка при его создании:
var beachMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: 'brown_markerA.png'
});
Это очень просто, и именно такой подход я использую для проекта, над которым сейчас работаю.
ИЗМЕНИТЬ МАРТ 2019 г. теперь с программным цветом булавки,
ЧИСТЫЙ JAVASCRIPT, БЕЗ ИЗОБРАЖЕНИЙ, ПОДДЕРЖИВАЕТ ЭТИКЕТКИ
больше не полагается на устаревший 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,
});
MapIconMaker
, уже устарела.
- person zerowords; 16.06.2014
http
, если только он не раскрывает что-то, о чем я не знаю в заголовке
- person Jonathan; 13.12.2017
MapIconMaker: библиотека для Google Maps v2
Один из способов - использовать MapIconMaker s > (мертвая ссылка). Вот пример здесь (мертвая ссылка). Значки Google Maps по умолчанию имеют ширину 20 пикселей и высоту 34 пикселя, поэтому вы можете использовать что-то вроде этого для имитации:
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. Кроме того, вы можете установить изображение на маркер, а не создавать новый маркер с новым значком. Итак, если вы хотите, чтобы функция выделялась, вы можете использовать что-то вроде этого, используя функцию выше:
function highlightMarker(marker, highlight) {
var color = "#FE7569";
if (highlight) {
color = "#0000FF";
}
marker.setImage(getIcon(color).image);
}
StyledMarker: библиотека для Google Maps v3
Поскольку некоторое время назад V2 был заменен на V3, я подумал, что должен обновить этот ответ. Я создал библиотеку для пользовательских маркеров, которую можно найти в V3 Utility Library здесь (мертвая ссылка). Он позволяет использовать разные цвета и формы, а также вы можете размещать текст на маркере. Он работает с использованием API Google Charts, в котором есть методы для создания маркеров типа Google Maps. Не стесняйтесь взглянуть на исходный код, если вы предпочитаете напрямую использовать Google Charts API.
Однако особенность этой библиотеки заключается в том, что она определяет для вас интерактивные области этих изображений маркеров, поэтому, например, более длинный пузырь с текстом будет иметь ожидаемые интерактивные области, такие как этот пример (мертвая ссылка) .
Лично я считаю, что значки, созданные с помощью Google Charts API, выглядят великолепно и их легко динамически настраивать.
См. Мой ответ на Google Maps API 3 - Пользовательский цвет маркера для маркера по умолчанию (точка)
Самый простой способ, который я нашел, - использовать BitmapDescriptorFactory.defaultMarker () в документации даже есть пример настройки цвета. Из моего собственного кода:
MarkerOptions marker = new MarkerOptions()
.title(formatInfo(data))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.position(new LatLng(data.getLatitude(), data.getLongitude()))
Чтобы настроить маркеры, вы можете сделать это с помощью этого онлайн-инструмента: https://materialdesignicons.com/
В вашем случае вам нужен маркер карты, который доступен здесь: https://materialdesignicons.com/icon/map-marker, которые можно настроить в Интернете.
Если вы просто хотите изменить красный цвет по умолчанию на синий, вы можете загрузить этот значок: http://maps.google.com/mapfiles/ms/icons/blue-dot.png
Об этом упоминалось в этой теме: https://stackoverflow.com/a/32651327/6381715
Эта относительно недавняя статья предоставляет простой пример с ограниченным набором цветных значков Google Maps.
Реальный пример веб-сайта с использованием синих и оранжевых маркеров карты см. на этом веб-сайте и просмотрите сценарий под 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>