谷歌地图从数组中编辑多个标记
Google Maps edit multiple markers from array
>EDIT : 我已经设法让它工作,最后一个代码片段是我的代码的解决方案。
这里相当新,如果我的问题不完美,我很抱歉。
我正在创建一个带有谷歌地图的网站。
用户输入自己的地址或地理位置以查找其位置,然后脚本计算用户与所有办公室分支机构之间的距离。选择 3 个最近的分支。
用户可以选择即时更改其地址,或在固定菜单中切换到地理位置,反之亦然。
我需要将用户路由到最近的办公室,并让标记内容div带有按钮来调用JS函数,因此需要完全编辑标记。你们告诉我,是否最好简单地删除所有标记并重生它们,或者是否最好就地编辑标记。
一旦地理定位或地理编码,它就会调用此函数:
编辑:警告错误代码!
function successCall(position) {
//Gets data from both getLocation & codeAddress !
// Branch_id and distance for all branches
// Resets the arrays.
var branches_distance = [];
var branches_closest = [];
var userlat = position.coords.latitude;
var userlng = position.coords.longitude;
//Store ID and Distance of branch in array
for (i = 0; i < branches_array.length; i++){
var branch_distance = {
id: branches_array[i].branch_id,
distance: calculateDistance(userlat, userlng, branches_array[i].branch_lat, branches_array[i].branch_lng)
}
branches_distance.push(branch_distance);
}
//Sort branches_distance from closest to farthest
for (i = 0; i < branches_distance.length; i++){
sortByKey(branches_distance, 'distance');
}
//Populate branches_closest with branch IDs
for (i = 0; i < branchesToShow; i++){ // SETTING
branches_closest.push(branches_distance[i].id);
}
//TIME TO MAKE MARKERS AND ROUTES
createMarkers(branches_closest, userlat, userlng);
}
和创建标记功能:
编辑:警告错误代码!
var markers = [];
zero = 0;
function createMarkers(closest_items, ulat, ulng) {
//If markers array is empty, create markers
if(zero == markers.length){
//Create User Loc marker and push in the array
var userLatLng = new google.maps.LatLng(ulat, ulng);
var uMarker = new google.maps.Marker({
position: userLatLng,
id: 'user'
});
markers.push(uMarker);
//Create branches markers
for (i = 0; i < closest_items.length; i++){
var result = $.grep(branches_array, function(e){ return e.branch_id == closest_items[i]; });
var latLng = new google.maps.LatLng(result[0].branch_lat, result[0].branch_lng);
var marker = new google.maps.Marker({
position: latLng,
id: closest_items[i]
});
markers.push(marker);
}
for (index in markers) {
addMarker(markers[index]);
}
console.log(markers);
} else {
console.log('I just want to update my markers :''( ');
}
}
我处于当您输入第二个地址时,它会控制台.log一个字符串。我尝试了很多东西,但我无法编辑或删除它们。
如果你们可以简单地指出在哪里寻找,任何帮助将不胜感激。
非常感谢,请记住,我是这里的新手,所以如果我的问题不合适/不完整,请留下有关它的正面信息,以便我变得更好!
编辑:现在我让它工作了,主要是你需要为每个标记调用这个函数:
google.maps.event.addListener(marker,"click",function(){});
我删除了整个 addMarker 函数并将代码直接放入 createMarkers();
var 标记 = [];//存储标记
function createMarkers(closest_items, ulat, ulng) {
clearOverlays(); var infowindow = new google.maps.InfoWindow(); //Markers have been cleared, hurray, lets pop some new var uLatLng = new google.maps.LatLng(ulat, ulng); umarker = new google.maps.Marker({ position: uLatLng, map: map, title: 'user' }); markers.push(umarker); google.maps.event.addListener(umarker,"click",function(){ infowindow.setContent(umarker.title); infowindow.open(map, umarker); }); for (i = 0; i < closest_items.length; i++) { var result = $.grep(branches_array, function(e){ return e.branch_id == closest_items[i]; }); var latLng = new google.maps.LatLng(result[0].branch_lat, result[0].branch_lng); marker = new google.maps.Marker({ position: latLng, map: map, title: closest_items[i].toString() }); markers.push(marker); google.maps.event.addListener(marker,"click",function(){ infowindow.setContent(this.title); infowindow.open(map, this); }); } makeRoute(); }
清除当前标记:
function clearOverlays() {
for (var i = 0; i < markers.length; i++ ){
markers[i].setMap(null);
}
markers.length = 0;
}
我建议你删除所有标记并再次调用该函数:
......
} else {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(null); // remove marker
}
// Reset the array
markers = [];
// Call the function again. The markers size will be zero and
// everything will work fine!
createMarkers(closest_items, ulat, ulng);
}
您可以使用新图钉更新现有地图。我个人认为这将创造更好的用户体验。用户可以查看办公地点的更新,而无需记住他们之前搜索的位置。
演示 http://jsfiddle.net/cmd932z3/20/
function clearMarkers() {
setAllMap(null);
}
function showMarkers() {
setAllMap(map);
}
function updateMarkers() {
clearMarkers();
markers = [];
}
- 编辑CSV数组中的项目-快速CSV node.js
- 如何使用并行/多线程Hamsters.js Javascript库编辑数组中的对象属性
- 剑道编辑模板数组
- 在可编辑的分区中使用多分区数组
- 使用Vue.JS编辑数组的对象
- 将已编辑的文件(图像)数组发送到php脚本
- 在 html 中制作可编辑的表格时,是否最好将表格内容保留在数组中
- 谷歌地图从数组中编辑多个标记
- 删除和编辑挖空可观察数组中的项目
- 编辑类型化数组中的值
- 使用AngularJS重置变量和编辑数组
- 如何推送到实际对象的数组最后状态,清除它并像新对象一样单独编辑
- 编码后如何编辑 JSON 数组
- 编辑数组元素并将字母大写
- 在 Javascript/Jquery 中编辑对象的子集化和编辑数组
- 滑动时编辑数组
- 编辑数组中的变量
- 在元窗口小部件中编辑数组
- 如何在PHP中编辑数组中字符串值的一部分,并在Javascript中使用它
- Angular如何编辑数组中的所有元素