2009-06-29 3 views
22

Я хотел бы отобразить текстовую метку рядом с маркерами на картах Google. Я использовал Virtual Earth раньше, и я только начинаю использовать Карты Google. Я попытался установить свойство Title, но это изменит только перелистывание текста.Как отображать ярлык рядом с маркером для Карт Google?

Есть ли способ отобразить небольшую строку текста под маркером, который останется там, когда пользователь масштабирует, кастрюли и использует карту?

Заранее благодарен!

+0

Я думаю, что, возможно, я нашел ответ ... сайт кажется для меня недоступным, но у Google есть кэш. Я попробую это и посмотрю, как это работает. http://74.125.95.132/search?q=cache:http://googlemapsbook.com/2007/01/22/extending-gmarker/ –

ответ

13

Существует хороший класс ярлыков here, хотя вам придется добавить его вместе с маркерами.

+0

У этого парня хорошие вещи :) – RedBlueThing

+0

Класс ELabel, который вы указали мне работает очень хорошо. Удивительный сайт Google Maps, не знаю, как я не нашел его в своих оригинальных поисках. Благодаря! –

+4

Это удобно, хотя оно не работает с v3 API JavaScript для Google Maps. Кроме того, если вы уменьшаете масштаб достаточно далеко, этикетки накладываются на нечитаемый суп. Тем не менее, лучшее предложение, которое я нашел до сих пор. –

25

Для API Google Maps JavaScript v3, выйдите the examples here.

Source code available in normal and minimised forms.

+1

Версия 1.1.1 из MarkerWithLabel был выпущен с некоторыми исправлениями. –

+1

Для примера использования этого API ознакомьтесь с веб-сайтом, который я разработал (продолжайте масштабирование на карте, и сначала вы увидите маркеры, а затем метки при дальнейшем увеличении): http://diveseven.com/atlas –

+0

Хороший ..Но это очень медленно по сравнению с обычными маркерами, когда количество маркеров в некоторых тысячах ... Есть ли альтернатива этой проблеме? @Drew Noakes. –

0

Даже этот вопрос был дан ответ Я нашел this resource, который, я думаю, является хорошим решением для этой проблемы и может быть полезен. Кроме того, аналогичное решение можно найти here.

+0

Выделите ссылки для Android MapView, а не Карты Google. – draconis

2

Ниже приведен пример кода, который позволит решить проблему: https://github.com/printercu/google-maps-utility-library-v3-read-only/tree/master/markerwithlabel/examples

Это обычай класс называется InfoBox. Вы можете увидеть API реф по ссылке выше

JS файл может быть включен здесь: https://github.com/printercu/google-maps-utility-library-v3-read-only/blob/master/infobox/src/infobox.js

Ура!

0

Альтернативой использованию библиотеки js является просто создать значок .png, который будет содержать ваш текст. Это звучит глупо, но для этого вы можете использовать внешнюю службу (например, this one).

Вы загружаете свою иконку и получаете ссылку в ответ. Если вы добавите какой-то текст в URL-адрес ссылок, он вернет вашу иконку с этим текстом, переданным в нее.

6

Если вы просто хотите, чтобы показать этикетку ниже маркера, то вы можете расширить Google Maps маркер, чтобы добавить метод установки для этикетки, и вы можете определить объект метки путем расширения Google Maps OverlayView как это ..

Демонстрация: jsFiddle

<script type="text/javascript"> 
    var point = { lat: 22.5667, lng: 88.3667 }; 
    var markerSize = { x: 22, y: 40 }; 


    google.maps.Marker.prototype.setLabel = function(label){ 
     this.label = new MarkerLabel({ 
      map: this.map, 
      marker: this, 
      text: label 
     }); 
     this.label.bindTo('position', this, 'position'); 
    }; 

    var MarkerLabel = function(options) { 
     this.setValues(options); 
     this.span = document.createElement('span'); 
     this.span.className = 'map-marker-label'; 
    }; 

    MarkerLabel.prototype = $.extend(new google.maps.OverlayView(), { 
     onAdd: function() { 
      this.getPanes().overlayImage.appendChild(this.span); 
      var self = this; 
      this.listeners = [ 
      google.maps.event.addListener(this, 'position_changed', function() { self.draw(); })]; 
     }, 
     draw: function() { 
      var text = String(this.get('text')); 
      var position = this.getProjection().fromLatLngToDivPixel(this.get('position')); 
      this.span.innerHTML = text; 
      this.span.style.left = (position.x - (markerSize.x/2)) - (text.length * 3) + 10 + 'px'; 
      this.span.style.top = (position.y - markerSize.y + 40) + 'px'; 
     } 
    }); 
    function initialize(){ 
     var myLatLng = new google.maps.LatLng(point.lat, point.lng); 
     var gmap = new google.maps.Map(document.getElementById('map_canvas'), { 
      zoom: 5, 
      center: myLatLng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }); 
     var myMarker = new google.maps.Marker({ 
      map: gmap, 
      position: myLatLng, 
      label: 'Hello World!', 
      draggable: true 
     }); 
    } 
</script> 
<style> 
    .map-marker-label{ 
     position: absolute; 
    color: blue; 
    font-size: 16px; 
    font-weight: bold; 
    } 
</style> 

Это будет работать.

+1

Как удалить эту метку с карты? Удаление маркера не удаляет ярлык с карты. – YashG99

+0

Чтобы удалить ярлык от маркера, используйте этот символ 'marker.label.span.remove()' – shana

+0

, спасибо за работу как шарм !!! –