Как я могу изменить цвет маркера Google Maps?

Я использую API Карт Google для создания карты, полной маркеров, но хочу, чтобы один маркер выделялся среди других. Думаю, проще всего было бы изменить цвет маркера на синий вместо красного. Это просто сделать или мне нужно как-то создать совершенно новый значок? Если мне нужно создать новый значок, как это сделать проще всего?


person abeger    schedule 18.03.2010    source источник
comment
Вы можете проверить это вчерашнее сообщение: stackoverflow.com/questions/2467720/   -  person Daniel Vassallo    schedule 18.03.2010
comment
или, возможно, лучший пост stackoverflow.com/questions/7095574/   -  person Faizan    schedule 05.11.2013


Ответы (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

У вас может быть один набор логики для всех «обычных» выводов, а другой - для «специальных» выводов с использованием нового определенного маркера.

person Kevin    schedule 18.03.2010
comment
Примечание для будущих читателей: это устаревший API Карт Google версии 2. Если вы используете v3, вам нужно поискать в другом месте. - person priestc; 27.08.2013
comment
Я нажал на первую ссылку, ctrl-f для «цвет»: нет результатов. Было бы здорово добавить больше деталей к ответу, чтобы действительно ответить на вопрос. OP конкретно спрашивает, можно ли изменить цвет без создания нового значка. - person qwertzguy; 26.03.2018


введите здесь описание изображения  введите описание изображения здесь Material Design

ИЗМЕНИТЬ МАРТ 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,
    });
person Jonathan    schedule 18.04.2014
comment
К сожалению, эта функция устарела, , как вы можете видеть здесь. Это такая неутешительная ситуация, когда это устарело, а предыдущая версия, которую я использовал, MapIconMaker, уже устарела. - person zerowords; 16.06.2014
comment
Обратите внимание, что это не работает с https, только с http. Облом! - person JoeGalind; 27.08.2016
comment
@JoeGalind есть ли причина, по которой требуется шифрование при получении цветов? Я имею в виду, что я не вижу риска для безопасности при использовании http, если только он не раскрывает что-то, о чем я не знаю в заголовке - person Jonathan; 13.12.2017
comment
@JonathanLeaders: это означает, что вам нужно добавить домен в разрешенный список в info.plist вашего проекта, поскольку это не вызов https. - person JoeGalind; 21.12.2017
comment
Обновлено на 2019 год, больше не рекомендуется - person Jonathan; 19.03.2019
comment
@Jonathan, код действительно работает, но некоторые объяснения того, что вы делаете, будут приветствоваться! +1 тем не менее - person Cyril C.; 06.05.2019
comment
@CyrilC. Я встраиваю данные координат SVG в строку - person Jonathan; 06.05.2019
comment
это выглядит нормально, но почему маркер по умолчанию имеет область попадания, которая находится только внутри его формы, тогда как пользовательские маркеры имеют прямоугольную область? Это очень проблематично, если вы хотите разрешить пользователю добавлять последовательные маркеры близко друг к другу (см. zoomicon.files.wordpress.com/2019/06/) - person George Birbilis; 17.06.2019
comment
@GeorgeBirbilis для наглядности, по умолчанию маркер, ты имеешь ввиду pinSVGfilled? - person Jonathan; 08.07.2019
comment
@GeorgeBirbilis Просто не используйте стандартную, просто сделайте красную индивидуальную, чтобы поведение было согласованным? - person Jonathan; 10.07.2019
comment
проблема в том, что пользовательские, похоже, используют прямоугольную цель, что действительно плохо, если вы попытаетесь разместить маркеры близко друг к другу вручную. - person George Birbilis; 11.07.2019
comment
@Jonathan есть ли способ связать текст с булавкой, чтобы DROP имел смысл? jsfiddle.net/anmgk0to/1 - person mickmackusa; 10.07.2020

MapIconMaker: библиотека для Google Maps v2

Один из способов - использовать MapIconMaker (мертвая ссылка). Вот пример здесь (мертвая ссылка). Значки 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.

Однако особенность этой библиотеки заключается в том, что она определяет для вас интерактивные области этих изображений маркеров, поэтому, например, более длинный пузырь с текстом будет иметь ожидаемые интерактивные области, такие как этот пример (мертвая ссылка) .

person Bob    schedule 18.03.2010
comment
Кажется, это совместимо только с GMaps API v2? - person Tigraine; 20.12.2010
comment
@Tigraine На самом деле я создал совершенно новую библиотеку для v3 под названием StyledMarker, которую можно найти в библиотеке утилит v3: code.google.com/p/google-maps-utility-library-v3/wiki/Libraries - person Bob; 20.12.2010
comment
посмотрите ответ Шона МакМейнса для v3 - person smp7d; 13.12.2011
comment
@Matt Изначально да, это была только v2. С тех пор я обновился, чтобы включить решение v3 - person Bob; 29.11.2012
comment
К вашему сведению, setImage не является функцией рынка в Google Maps API v3. setIcon - это правильная функция. - person Nick Bork; 26.08.2013
comment
эти ссылки больше не работают - кто-нибудь знает, где их сейчас найти? - person Gavin Coates; 25.08.2016
comment
@dESource Я не являюсь автором этого ответного сообщения. Если хотите, отредактируйте ответ, указав правильные ссылки. - person Flimm; 18.06.2018

Лично я считаю, что значки, созданные с помощью Google Charts API, выглядят великолепно и их легко динамически настраивать.

См. Мой ответ на Google Maps API 3 - Пользовательский цвет маркера для маркера по умолчанию (точка)

person matt burns    schedule 08.10.2011
comment
Это похоже на ответ @Jonathan, и, к сожалению, эта служба устарела. - person Todd Owen; 13.01.2019

Самый простой способ, который я нашел, - использовать BitmapDescriptorFactory.defaultMarker () в документации даже есть пример настройки цвета. Из моего собственного кода:

MarkerOptions marker = new MarkerOptions()
            .title(formatInfo(data))
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
            .position(new LatLng(data.getLatitude(), data.getLongitude()))
person Michael Hamilton    schedule 09.03.2014
comment
Это только андроид или тоже для веб-браузеров? - person Jonathan; 19.03.2019
comment
@Jonathan - это только для android - пример, который он опубликовал, находится в JAVA - person dazza5000; 14.08.2019

Чтобы настроить маркеры, вы можете сделать это с помощью этого онлайн-инструмента: 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

person GuGuss    schedule 17.04.2018

Эта относительно недавняя статья предоставляет простой пример с ограниченным набором цветных значков 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>
person Trunk    schedule 15.05.2020