2016-05-12 8 views
-1

Googleの場所とオートコンプリートを使用して、検索エリアの近くにAtmの場所を表示しようとしています。その作業の細かいマップとatmと銀行の場所を正しく示していますが、同じマップマーカーを表示するので、私は各タイプごとに異なる色のマーカーを表示する方法を知りたいです。以下は私のコードです。あなたはmarkersiの色を変更することはできませんが、あなたがマーカーアイコンを変更することができますGoogleマップの各タイプの地図マーカーの色を変更する方法api v3

var map, places, iw; 
    var markers = []; 
    var autocomplete; 

    function initialize() { 
    var myLatlng = new google.maps.LatLng(17.717063, 83.300310); 
    var myOptions = { 
     zoom: 14, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    places = new google.maps.places.PlacesService(map); 
    google.maps.event.addListener(map, 'tilesloaded', tilesLoaded); 
    autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete')); 
    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
     showSelectedPlace(); 
    }); 
    } 

    function tilesLoaded() { 
    google.maps.event.clearListeners(map, 'tilesloaded'); 
    google.maps.event.addListener(map, 'zoom_changed', search); 
    google.maps.event.addListener(map, 'dragend', search); 
    search(); 
    } 

    function showSelectedPlace() { 
    clearResults(); 
    clearMarkers(); 
    var place = autocomplete.getPlace(); 
    map.panTo(place.geometry.location); 
    markers[0] = new google.maps.Marker({ 
     position: place.geometry.location, 
     map: map 
    }); 
    iw = new google.maps.InfoWindow({ 
     content: getIWContent(place) 
    }); 
    iw.open(map, markers[0]); 
    } 

    function search() { 
    var type; 
    for (var i = 0; i < document.controls.type.length; i++) { 
     if (document.controls.type[i].checked) { 
     type = document.controls.type[i].value; 
     } 
    } 

    autocomplete.setBounds(map.getBounds()); 

    var search = { 
     bounds: map.getBounds() 
    }; 

    if (type != 'establishment') { 
     search.types = [ type ]; 
    } 

    places.search(search, function(results, status) { 
     if (status == google.maps.places.PlacesServiceStatus.OK) { 
     clearResults(); 
     clearMarkers(); 
     for (var i = 0; i < results.length; i++) { 
      markers[i] = new google.maps.Marker({ 
      position: results[i].geometry.location, 
      animation: google.maps.Animation.DROP 
      }); 
      google.maps.event.addListener(markers[i], 'click', getDetails(results[i], i)); 
      setTimeout(dropMarker(i), i * 100); 
      addResult(results[i], i); 
     } 
     } 
    }) 
    } 

    function clearMarkers() { 
    for (var i = 0; i < markers.length; i++) { 
     if (markers[i]) { 
     markers[i].setMap(null); 
     markers[i] == null; 
     } 
    } 
    } 

    function dropMarker(i) { 
    return function() { 
     markers[i].setMap(map); 
    } 
    } 

    function addResult(result, i) { 
    var results = document.getElementById("results"); 
    var tr = document.createElement('tr'); 
    tr.style.backgroundColor = (i% 2 == 0 ? '#F0F0F0' : '#FFFFFF'); 
    tr.onclick = function() { 
     google.maps.event.trigger(markers[i], 'click'); 
    }; 

    var iconTd = document.createElement('td'); 
    var nameTd = document.createElement('td'); 
    var icon = document.createElement('img'); 
    icon.src = result.icon; 
    icon.setAttribute("class", "placeIcon"); 
    icon.setAttribute("className", "placeIcon"); 
    var name = document.createTextNode(result.name); 
    iconTd.appendChild(icon); 
    nameTd.appendChild(name); 
    tr.appendChild(iconTd); 
    tr.appendChild(nameTd); 
    results.appendChild(tr); 
    } 

    function clearResults() { 
    var results = document.getElementById("results"); 
    while (results.childNodes[0]) { 
     results.removeChild(results.childNodes[0]); 
    } 
    } 

    function getDetails(result, i) { 
    return function() { 
     places.getDetails({ 
      reference: result.reference 
     }, showInfoWindow(i)); 
    } 
    } 

    function showInfoWindow(i) { 
    return function(place, status) { 
     if (iw) { 
     iw.close(); 
     iw = null; 
     } 

     if (status == google.maps.places.PlacesServiceStatus.OK) { 
     iw = new google.maps.InfoWindow({ 
      content: getIWContent(place) 
     }); 
     iw.open(map, markers[i]);   
     } 
    } 
    } 

    function getIWContent(place) { 
    var content = ""; 
    content += '<table class="style_infowin"><tr><td>'; 
    content += '<img class="placeIcon" src="' + place.icon + '"/></td>'; 
    content += '<td><b><a href="' + place.url + '">' + place.name + '</a></b>'; 
    content += '<tr class="iw_table_row"><td class="iw_attribute_name">Address:</td><td>' + place.vicinity + '</td></tr>'; 
    content += '</td></tr></table>'; 
    return content; 
    } 
+0

https://developers.google.com/maps/documentation/javascript/markers#icons – geocodezip

+0

してください[最小、完全、テスト済みおよび読み取り可能な例]を提供する(http:// stackoverf low.com/help/mcve)を試してみてください。 '型'とは何ですか? – geocodezip

答えて

0

がチェックhttps://developers.google.com/maps/documentation/javascript/reference#Marker

のマーカークラスリファレンスを参照してくださいあなたは

marker.setIcon('newImage.png'); 

またはあなたが作成できるとのアイコンを変更することができます適切なアイコンのマーカー

var iconBase = 'https://maps.google.com/mapfiles/kml/shapes/'; 
var marker = new google.maps.Marker({ 
    position: myLatLng, 
    map: map, 
    icon: iconBase + 'schools_maps.png' }); 

これはgoogle doc https://developers.google.com/maps/documentation/javascript/tutorials/custom-markers#try_it_out

0

各結果のアイコンURLが含まれています。 1つの選択肢は、それらを使用することです。

places.search(search, function(results, status) { 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
    clearResults(); 
    clearMarkers(); 
    for (var i = 0; i < results.length; i++) { 
     markers[i] = new google.maps.Marker({ 
     position: results[i].geometry.location, 
     animation: google.maps.Animation.DROP, 
     icon: { url: results[i].icon, scaledSize: new google.maps.Size(20,20)} 
     }); 
     google.maps.event.addListener(markers[i], 'click', getDetails(results[i], i)); 
     setTimeout(dropMarker(i), i * 100); 
     addResult(results[i], i); 
    } 
    } 
}) 

proof of concept fiddle

コードスニペット:

var map, places, iw; 
 
var markers = []; 
 
var autocomplete; 
 

 
function initialize() { 
 
    var myLatlng = new google.maps.LatLng(17.717063, 83.300310); 
 
    var myOptions = { 
 
    zoom: 14, 
 
    center: myLatlng, 
 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    } 
 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
 
    places = new google.maps.places.PlacesService(map); 
 
    google.maps.event.addListener(map, 'tilesloaded', tilesLoaded); 
 
    autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete')); 
 
    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
 
    showSelectedPlace(); 
 
    }); 
 
} 
 

 
function tilesLoaded() { 
 
    google.maps.event.clearListeners(map, 'tilesloaded'); 
 
    google.maps.event.addListener(map, 'zoom_changed', search); 
 
    google.maps.event.addListener(map, 'dragend', search); 
 
    search(); 
 
} 
 

 
function showSelectedPlace() { 
 
    clearResults(); 
 
    clearMarkers(); 
 
    var place = autocomplete.getPlace(); 
 
    map.panTo(place.geometry.location); 
 
    markers[0] = new google.maps.Marker({ 
 
    position: place.geometry.location, 
 
    map: map 
 
    }); 
 
    iw = new google.maps.InfoWindow({ 
 
    content: getIWContent(place) 
 
    }); 
 
    iw.open(map, markers[0]); 
 
} 
 

 
function search() { 
 
    var type = 'atm'; 
 
    /* for (var i = 0; i < document.controls.type.length; i++) { 
 
    if (document.controls.type[i].checked) { 
 
     type = document.controls.type[i].value; 
 
    } 
 
    } */ 
 

 
    autocomplete.setBounds(map.getBounds()); 
 

 
    var search = { 
 
    bounds: map.getBounds() 
 
    }; 
 

 
    if (type != 'establishment') { 
 
    search.types = [type]; 
 
    } 
 

 
    places.search(search, function(results, status) { 
 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
 
     clearResults(); 
 
     clearMarkers(); 
 
     for (var i = 0; i < results.length; i++) { 
 
     markers[i] = new google.maps.Marker({ 
 
      position: results[i].geometry.location, 
 
      animation: google.maps.Animation.DROP, 
 
      icon: { 
 
      url: results[i].icon, 
 
      scaledSize: new google.maps.Size(20, 20) 
 
      } 
 
     }); 
 
     google.maps.event.addListener(markers[i], 'click', getDetails(results[i], i)); 
 
     setTimeout(dropMarker(i), i * 100); 
 
     addResult(results[i], i); 
 
     } 
 
    } 
 
    }) 
 
} 
 

 
function clearMarkers() { 
 
    for (var i = 0; i < markers.length; i++) { 
 
    if (markers[i]) { 
 
     markers[i].setMap(null); 
 
     markers[i] == null; 
 
    } 
 
    } 
 
} 
 

 
function dropMarker(i) { 
 
    return function() { 
 
    markers[i].setMap(map); 
 
    } 
 
} 
 

 
function addResult(result, i) { 
 
    var results = document.getElementById("results"); 
 
    var tr = document.createElement('tr'); 
 
    tr.style.backgroundColor = (i % 2 == 0 ? '#F0F0F0' : '#FFFFFF'); 
 
    tr.onclick = function() { 
 
    google.maps.event.trigger(markers[i], 'click'); 
 
    }; 
 

 
    var iconTd = document.createElement('td'); 
 
    var nameTd = document.createElement('td'); 
 
    var icon = document.createElement('img'); 
 
    icon.src = result.icon; 
 
    icon.setAttribute("class", "placeIcon"); 
 
    icon.setAttribute("className", "placeIcon"); 
 
    var name = document.createTextNode(result.name); 
 
    iconTd.appendChild(icon); 
 
    nameTd.appendChild(name); 
 
    tr.appendChild(iconTd); 
 
    tr.appendChild(nameTd); 
 
    results.appendChild(tr); 
 
} 
 

 
function clearResults() { 
 
    var results = document.getElementById("results"); 
 
    while (results.childNodes[0]) { 
 
    results.removeChild(results.childNodes[0]); 
 
    } 
 
} 
 

 
function getDetails(result, i) { 
 
    return function() { 
 
    places.getDetails({ 
 
     reference: result.reference 
 
    }, showInfoWindow(i)); 
 
    } 
 
} 
 

 
function showInfoWindow(i) { 
 
    return function(place, status) { 
 
    if (iw) { 
 
     iw.close(); 
 
     iw = null; 
 
    } 
 

 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
 
     iw = new google.maps.InfoWindow({ 
 
     content: getIWContent(place) 
 
     }); 
 
     iw.open(map, markers[i]); 
 
    } 
 
    } 
 
} 
 

 
function getIWContent(place) { 
 
    var content = ""; 
 
    content += '<table class="style_infowin"><tr><td>'; 
 
    content += '<img class="placeIcon" height="20" width="20" src="' + place.icon + '"/></td>'; 
 
    content += '<td><b><a href="' + place.url + '">' + place.name + '</a></b>'; 
 
    content += '<tr class="iw_table_row"><td class="iw_attribute_name">Address:</td><td>' + place.vicinity + '</td></tr>'; 
 
    content += '</td></tr></table>'; 
 
    return content; 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
} 
 
.placeIcon { 
 
    height: 20px; 
 
    width: 20px; 
 
} 
 
.cols { 
 
    -webkit-columns: 3 150px; 
 
    -moz-columns: 3 150px; 
 
    columns: 3 150px; 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> 
 
<input id="autocomplete" /> 
 
<div class="cols" id="results"></div> 
 
<div id="map_canvas"></div>

関連する問題