搜索带有标记位置的Google地图,无需替换

时间:2018-06-27 11:37:50

标签: javascript jquery html

在这里我要创建一个地图,在其中有一个搜索框和一个无法更改的默认位置,并且在搜索位置时,默认位置不会丢失/更改/替换。

并且我想用标记parking更改搜索框创建的位置标记

这是我的脚本:

var iconBase = 'https://maps.google.com/mapfiles/kml/shapes/';
	var icons = {
      parking: {
        icon: iconBase + 'parking_lot_maps.png'
      },
      library: {
        icon: iconBase + 'library_maps.png'
      },
      info: {
        icon: iconBase + 'info-i_maps.png'
      }
    };
	var locations = [
	['location 1', -33.80010128657071, 151.28747820854187, 2,"info"],
	['location 2', -33.950198, 151.259302, 1,"info"]
	];

	var map = new google.maps.Map(document.getElementById('map'), {
		zoom: 11,
		center: new google.maps.LatLng(-33.92, 151.28747820854187),
		mapTypeId: google.maps.MapTypeId.ROADMAP
	});

	var infowindow = new google.maps.InfoWindow();

	var marker, i;

	for (i = 0; i < locations.length; i++) {  
		marker = new google.maps.Marker({
			position: new google.maps.LatLng(locations[i][1], locations[i][2]),
			icon: icons[locations[i][4]].icon,
			map: map
		});

		google.maps.event.addListener(marker, 'click', (function(marker, i) {
			return function() {
				infowindow.setContent(locations[i][0]);
				infowindow.open(map, marker);
			}
		})(marker, i));
	}

	var input = document.getElementById('location');
	    // map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
	    var geocoder = new google.maps.Geocoder();
	    var autocomplete = new google.maps.places.Autocomplete(input);
	    autocomplete.bindTo('bounds', map);
	    var infowindow = new google.maps.InfoWindow();   
	    autocomplete.addListener('place_changed', function() {
	        infowindow.close();
	        marker.setVisible(false);
	        var place = autocomplete.getPlace();
	        if (!place.geometry) {
	            window.alert("Autocomplete's returned place contains no geometry");
	            return;
	        }
	  
	        // If the place has a geometry, then present it on a map.
	        if (place.geometry.viewport) {
	            map.fitBounds(place.geometry.viewport);
	        } else {
	            map.setCenter(place.geometry.location);
	            map.setZoom(17);
	        }
	       
	        marker.setPosition(place.geometry.location);
	        marker.setVisible(true);          
	    
	        bindDataToForm(place.formatted_address,place.geometry.location.lat(),place.geometry.location.lng());
	        infowindow.setContent(place.formatted_address);
	        infowindow.open(map, marker);
	       
	    });
	    // this function will work on marker move event into map 
	    google.maps.event.addListener(marker, 'dragend', function() {
	        geocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
	        if (status == google.maps.GeocoderStatus.OK) {
	          if (results[0]) {        
	              bindDataToForm(results[0].formatted_address,marker.getPosition().lat(),marker.getPosition().lng());
	              infowindow.setContent(results[0].formatted_address);
	              infowindow.open(map, marker);
	          }
	        }
	        });
	    });


		function bindDataToForm(address,lat,lng){
		   document.getElementById('location').value = address;
		   document.getElementById('lat').value = lat;
		   document.getElementById('lng').value = lng;
		}
.map{
	width: 100%;
	min-height: 500px;
	background-color: #eaeaea;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input  type="text" name="latitude" id="lat" class="hidden lat-1">
<input  type="text" name="longitude" id="lng" class="hidden lng-1">
<input required="" id="location" class="form-control" style="border-radius: 5px;" name="location">
<div class="map" id="map"></div>

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>

我应该对脚本进行哪些更改?像我需要的那样运行?

0 个答案:

没有答案