简体   繁体   中英

Custom Markers in Google Maps app

I'm using a google maps javascript application and I want to use a custom image for one of the markers.

here is an example of the code I think I'm using to get the marker.

 var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
 GDownloadUrl(searchUrl, function(data) {
   var xml = GXml.parse(data);
   markers = xml.documentElement.getElementsByTagName('marker');

   var sidebar2 = document.getElementById('sidebar2');
   sidebar2.innerHTML = '';
   if (markers.length == 0) {
     document.getElementById('alert_div').innerHTML = "<a>No Results found</a>";
     document.getElementById('alert_div').style.display = 'block';

     map.setCenter(new GLatLng(40.178873,2.8125), 2);
     return;
   }
   showSidebar();   
   var limitsearch = document.getElementById('limitsearch').value;
   var bounds = new GLatLngBounds();
   if (limitsearch <= markers.length){
   for (var i = 0; i < limitsearch; i++) {
     var name = markers[i].getAttribute('name');
     var phone = markers[i].getAttribute('phone');
     if (phone == 0){phone = '';}
     var address = markers[i].getAttribute('address');
     var distance = parseFloat(markers[i].getAttribute('distance'));
     var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                             parseFloat(markers[i].getAttribute('lng')));

     var marker = createMarker(point, name, address);
     map.addOverlay(marker);
     var sidebarEntry = createSidebarEntry(marker, phone, name, address, distance);
     sidebar2.appendChild(sidebarEntry);
     bounds.extend(point);
   }}
   else{
   for (var i = 0; i < markers.length; i++) {
     var name = markers[i].getAttribute('name');
     var phone = markers[i].getAttribute('phone');
     if (phone == 0){phone = '';}
     var address = markers[i].getAttribute('address');
     var distance = parseFloat(markers[i].getAttribute('distance'));
     var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                             parseFloat(markers[i].getAttribute('lng')));

     var marker = createMarker(point, name, address);
     map.addOverlay(marker);
     var sidebarEntry = createSidebarEntry(marker, phone, name, address, distance);
     sidebar2.appendChild(sidebarEntry);
     bounds.extend(point); 
   }

   }




   map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
  showSidebar();
  getAlert();
 });

}

Here is a replacement for createMarker to support an icon

function createMarker(point, name, address, markerIcon) {
  var markerOptions = {}
  if (markerIcon !== undefined) {
    markerOptions = { icon: markerIcon };
  }
  marker = new GMarker(point, markerOptions);
  var html = '<b>' + name + '</b> <br/>' + address;
  GEvent.addListener(marker, 'click', function() {
     marker.openInfoWindowHtml(html); 
  });
  return marker; 
}

You then can pass in a GIcon object as the last option if you want. You'll need to initialize it like so:

var myIcon = new GIcon();
myIcon.iconSize = new GSize(16, 16);
myIcon.iconAnchor = new GPoint(4, 7);
myIcon.image = "http://www.url.com/somepic.png";
var marker = createMarker(point, name, address, myIcon);

You'll need to decide on the size and anchor locations

Also see these resources from the google docs:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM