2017-02-07 2 views
0

Я использую API Карт Google и хотите создать некоторые пользовательские маркеры, они все же кроме цвета, я не хочу повторять код, как такGoogle Maps API и пользовательские маркеры

// Add a custom marker 
var marker1 = { 
    path: 'M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z', 
    fillColor: '#ff61b4', 
    fillOpacity: 0.95, 
    scale: 2, 
    strokeColor: '#fff', 
    strokeWeight: 3, 
    anchor: new google.maps.Point(12, 24) 
}; 

var marker2 = { 
    path: 'M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z', 
    fillColor: '#05950a', 
    fillOpacity: 0.95, 
    scale: 2, 
    strokeColor: '#fff', 
    strokeWeight: 3, 
    anchor: new google.maps.Point(12, 24) 
}; 

Когда я хочу использовать маркер

// Markers 
var marker = new google.maps.Marker({ 
    map: map, 
    icon: marker, // can i override the fillColor here ? 
    position: new google.maps.LatLng(51.489401, -3.203586), 
    title: 'title' 
}); 

Я хотел бы иметь возможность объявить один маркер, а затем переопределить FillColor, как я мог бы пойти по этому поводу?

Благодаря

ответ

1

Одним из вариантов было бы использовать функцию для создания значка (то есть createIcon функция), которая принимает цвет в качестве аргумента и возвращает значок анонимный объект:

function createIcon(color) { 
    return { 
    path: 'M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z', 
    fillColor: color, 
    fillOpacity: 0.95, 
    scale: 2, 
    strokeColor: '#fff', 
    strokeWeight: 3, 
    anchor: new google.maps.Point(12, 24) 
    }; 
} 

Затем использовать, что при создании маркеров:

var marker1 = new google.maps.Marker({ 
    map: map, 
    position: { 
     lat: 37.448, 
     lng: -122.143 
    }, 
    icon: createIcon('#ff61b4') 
    }); 

proof of concept fiddle

фрагмент кода:

function createIcon(color) { 
 
    return { 
 
    path: 'M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z', 
 
    fillColor: color, 
 
    fillOpacity: 0.95, 
 
    scale: 2, 
 
    strokeColor: '#fff', 
 
    strokeWeight: 3, 
 
    anchor: new google.maps.Point(12, 24) 
 
    }; 
 
} 
 

 
function initialize() { 
 
    var map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    var marker = new google.maps.Marker({ 
 
    map: map, 
 
    position: map.getCenter(), 
 
    icon: createIcon('blue') 
 
    }); 
 
    var marker1 = new google.maps.Marker({ 
 
    map: map, 
 
    position: { 
 
     lat: 37.448, 
 
     lng: -122.143 
 
    }, 
 
    icon: createIcon('#ff61b4') 
 
    }) 
 
    var marker2 = new google.maps.Marker({ 
 
    map: map, 
 
    position: { 
 
     lat: 37.44, 
 
     lng: -122.148 
 
    }, 
 
    icon: createIcon('#05950a') 
 
    }); 
 

 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map_canvas"></div>

+0

Большое вам спасибо, имеет большой смысл :-) – Richlewis

0

Вы можете использовать setOptions, например: для изменения только значка

marker.setOptions({ 
    icon = "http://labs.google.com/ridefinder/images/mm_20_white.png" 
}); 

или интерактивного

marker.setOptions({clickable:false}); 

так что вы можете сделать то же самое для всех параметров маркеров