我有一个像这样的HTML页面:
<button onclick="initMap()">Regenerate</button><BR>
Latitude<input style="width: 5em;" id="lat" name="lat" type="number" value="35.9000" step="0.1"/></div><BR>
Longitude<input style="width: 5em;" id="long" name="long" type="number" value="15.7500" step="0.1"/></div>
<div id="map"></div>
<script>
var map;
function initMap() {
var latitude = parseFloat ($('#lat').val());
var longitude = parseFloat ($('#long').val());
var mapOptions = {
zoom: 13,
center: new google.maps.LatLng(latitude, longitude),
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map = new google.maps.Map(document.getElementById('map'), mapOptions);
}
$( "#lat" ).change(function() {
placeMarkers();
});
$( "#long" ).change(function() {
placeMarkers();
});
function placeMarkers() {
var latitude = parseFloat ($('#lat').val());
var longitude = parseFloat ($('#long').val());
var markerDep = new google.maps.Marker({
position: {lat: latitude, lng: longitude},
map: map,
label: "D",
draggable: true,
title: 'Departure'
});
var markerArr = new google.maps.Marker({
position: {lat: latitude+0.01, lng: longitude+0.01},
map: map,
label: "A",
draggable: true,
title: 'Arrival'
});
}
</script>
我希望与用户在表单和地图中提供的值进行互动。
编辑:部分解决,请参阅上面的代码
每次用户点击/更改值时刷新地图都有点重#34;因此,我不是每次输入更改时调用initMap(),而是只想替换标记?但是PlaceMarkers()并没有设法这样做......除了第一次(加载时)。其他时候,他们创造了新的标记...
答案 0 :(得分:0)
我有一个可接受的解决方案,对于那些感兴趣的人,这里是:
Departure :
Latitude<input style="width: 5em;" id="latD" name="latD" type="number" value="37" step="0.01"/></div><BR>
Longitude<input style="width: 5em;" id="longD" name="longD" type="number" value="11" step="0.01"/></div>
<BR>
Arrival: <BR>
Latitude<input style="width: 5em;" id="latA" name="latA" type="number" value="38" step="0.01"/></div><BR>
Longitude<input style="width: 5em;" id="longA" name="longA" type="number" value="12" step="0.01"/></div>
<div id="map"></div>
<script>
var map;
var markerArr;
var markerDep;
//init function
function initMap() {
//used for the definition of the map's center
var latitude = parseFloat ($('#latD').val());
var longitude = parseFloat ($('#longD').val());
var mapOptions = {
zoom: 13,
center: new google.maps.LatLng(latitude, longitude),
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map = new google.maps.Map(document.getElementById('map'), mapOptions);
//creates the Departure and Arrival markers
placeDepMarker();
placeArrMarker();
}
//creates Departure
function placeDepMarker() {
var latitude = parseFloat ($('#latD').val());
var longitude = parseFloat ($('#longD').val());
markerDep = new google.maps.Marker({
position: {lat: latitude, lng: longitude},
map: map,
label: "D",
draggable: true,
title: 'Departure'
});
}
//creates Arrival
function placeArrMarker() {
var latitude = parseFloat ($('#latA').val());
var longitude = parseFloat ($('#longA').val());
markerArr = new google.maps.Marker({
position: {lat: latitude+0.01, lng: longitude+0.01},
map: map,
label: "A",
draggable: true,
title: 'Arrival'
});
}
//Erases Arrival marker
function clearArrMarker() {
markerArr.setMap(null);
}
//erases Departure marker
function clearDepMarker() {
markerDep.setMap(null);
}
$( "#latD, #longD").change(function() {
clearDepMarker();
placeDepMarker();
});
$( "#latA, #longA").change(function() {
clearArrMarker();
placeArrMarker();
});
</script>
当然,可以实现许多改进,例如clearDepMarker()和clearArrMarker()可以在同一个函数中实现:
//erases the given marker
function clearMarker(marker) {
marker.setMap(null);
}
现在我需要考虑拖放以刷新表单