2015-03-09 3 views
0

Я хочу добавить карту cusom на свой сайт, для основной части все работает, за исключением одной вещи.Google Maps api - метка для маркеров

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

Также я не хочу использовать дополнительные плагины.

Если это не поможет: возможно ли добавить mapoptions в стандартную карту вставки? Единственный недостаток заключается в том, что он масштабируется при прокрутке.


Посмотрите на текущей карте:

Custom Map


Этикетка Маркер должен иметь:

Google Map

Brandenburger Gate - Google Maps


HTML:

<div id="googleMap"></div> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 

Javascript (Jquery):

$(function() { 

    function showMap() { 

     var mapZoom = 14; 
     var LatLng = new google.maps.LatLng(52.516275, 13.377704); 

     var mapOptions = { 
      zoom: mapZoom, 
      center: LatLng, 
      streetViewControl: false, 
      scrollwheel: false, 
      navigationControl: false, 
      mapTypeControl: false, 
      scaleControl: false, 
      keyboardShortcuts: false 

     }; 

     var map = new google.maps.Map(document.getElementById('googleMap'),mapOptions); 

     var marker = new google.maps.Marker({ 
      position: LatLng, 
      map: map, 
      draggable: false 
     }); 
    } 
    google.maps.event.addDomListener(window, 'load', showMap); 

}); 
+0

Я обнаружил, что 'стиль =" pointer- events: none; "' отключает прокрутку, но отключает дополнительные действия с картой. – AlexG

+0

Возможно, это невозможно, учитывая ваши ограничения. Вы используете JQuery, почему бы не [MarkerWithLabel] (http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerwithlabel/docs/reference.html)? – geocodezip

+0

Поскольку на самом деле метки маркеров уже работают, они работают в встраиваемых картах, я полагаю, что их также можно использовать в пользовательских картах. И если я хочу что-то фантастическое, я бы скорее создал пользовательский маркер. – AlexG

ответ

0

Попробуйте этот код:

<style type="text/css"> 
    .labels { 
    color: white; 
    background-color: red; 
    font-family: "Lucida Grande", "Arial", sans-serif; 
    font-size: 10px; 
    text-align: center; 
    width: 10px;  
    white-space: nowrap; 
    } 
</style> 

var latLng = new google.maps.LatLng(49.47805, -123.84716); 
var homeLatLng = new google.maps.LatLng(49.47805, -123.84716); 

var map = new google.maps.Map(document.getElementById('map_canvas'), { 
    zoom: 12, 
    center: latLng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

var marker = new MarkerWithLabel({ 
    position: homeLatLng, 
    map: map, 
    labelContent: "BrandenBurger Tor", 
    labelAnchor: new google.maps.Point(22, 0), 
    labelClass: "labels" // the CSS class for the label 
}); 

Для добавления более настраиваемых функций маркерам см это link.

Надеюсь, что это поможет!

+0

Спасибо за ваши усилия :), но я стараюсь избегать дополнительных плагинов для простой этикетки. – AlexG

+0

Могу ли я узнать, что вы подразумеваете под «дополнительным плагином»? – AniV

+0

MarkerWithLabel, в этом случае. – AlexG

1

Способ создания пользовательского маркера состоит в том, чтобы нарисовать желаемое изображение путем рисования на холсте, а затем использовать функцию SetIcon с DataURL из холста в качестве параметра.

// A way to create a GoogleMap marker with text 

enter code here 

var marker = new google.maps.Marker({position: new google.maps.LatLng(35.1,32), title: "My Custom Marker" }); 

var cnv=document.createElement("canvas"); 
var cntx = cnv.getContext("2d"); 
cnv.width=50; 
cnv.height=50; 
cntx.fillText("Hello World!",10,10); 

marker.setIcon(cnv.toDataURL('image/jpeg')); ' 
+0

Очень приятно! Всего несколько дополнений: возможно ли добавить метку к маркеру по умолчанию? Atm Я добавил метку в качестве второго маркера, и метка не имеет фона. Также: можете ли вы добавить стиль/классы на холст? – AlexG

+0

Fyi: Я не буду отвечать на следующей неделе. Если вы опубликуете ответ, я перейду как можно скорее. – AlexG

1

вы можете использовать label of google marker так:

new google.maps.Marker({ 
       position:latlng, 
       map:map, 
       label: 'A' 
      }); 
1

Одним из вариантов было бы использовать InfoBox сторонней библиотеки и связать позицию Infobox к маркеру.

var labelText = "Brandenburger Tor"; 

var myOptions = { 
    content: labelText, 
    boxStyle: { 
    border: "none", 
    textAlign: "center", 
    fontSize: "12pt", 
    fontWeight: "bold", 
    width: "150px", 
    color: "#C70E20" 

    }, 
    disableAutoPan: true, 
    pixelOffset: new google.maps.Size(10, -10), 
    position: LatLng, 
    closeBoxURL: "", 
    isHidden: false, 
    pane: "mapPane", 
    enableEventPropagation: true 
}; 

var ibLabel = new InfoBox(myOptions); 
ibLabel.open(map); 
var marker = new google.maps.Marker({ 
    position: LatLng, 
    map: map, 
    draggable: false 
}); 
marker.bindTo('map', ibLabel); 
marker.bindTo('position', ibLabel); 

proof of concept fiddle

image of resulting map

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

$(function() { 
 

 
    function showMap() { 
 

 
    var mapZoom = 14; 
 
    var LatLng = new google.maps.LatLng(52.516275, 13.377704); 
 

 
    var mapOptions = { 
 
     zoom: mapZoom, 
 
     center: LatLng, 
 
     streetViewControl: false, 
 
     scrollwheel: false, 
 
     navigationControl: false, 
 
     mapTypeControl: false, 
 
     scaleControl: false, 
 
     keyboardShortcuts: false 
 
    }; 
 

 
    var map = new google.maps.Map(document.getElementById('googleMap'), mapOptions); 
 

 
    var labelText = "Brandenburger Tor"; 
 

 
    var myOptions = { 
 
     content: labelText, 
 
     boxStyle: { 
 
     border: "none", 
 
     textAlign: "center", 
 
     fontSize: "12pt", 
 
     fontWeight: "bold", 
 
     width: "150px", 
 
     color: "#C70E20" 
 
     }, 
 
     disableAutoPan: true, 
 
     pixelOffset: new google.maps.Size(10, -10), 
 
     position: LatLng, 
 
     closeBoxURL: "", 
 
     isHidden: false, 
 
     pane: "mapPane", 
 
     enableEventPropagation: true 
 
    }; 
 

 
    var ibLabel = new InfoBox(myOptions); 
 
    ibLabel.open(map); 
 
    var marker = new google.maps.Marker({ 
 
     position: LatLng, 
 
     map: map, 
 
     draggable: false 
 
    }); 
 
    marker.bindTo('map', ibLabel); 
 
    marker.bindTo('position', ibLabel); 
 
    } 
 
    google.maps.event.addDomListener(window, 'load', showMap); 
 
});
html, 
 
body, 
 
#googleMap { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<script src="https://cdn.rawgit.com/googlemaps/v3-utility-library/master/infobox/src/infobox.js"></script> 
 
<div id="googleMap"></div>

+0

Этот вопрос старше года, я уже перешел от этого проекта. Насколько я помню, я просто проигнорировал лейбл и продолжил. Я дам вам стимул для усилий :) - Хотя я и не хотел использовать плагины/лики в моем первоначальном вопросе – AlexG