Javascript 关于本地存储的传单标记,如何获取标记lat lng并从存储中排除?
我创建了一个函数,可以单击在地图上放置一个标记,并将其保存到localstorage。在标记弹出窗口内,它显示标记位置和删除按钮 我怎样才能使delete按钮获得实际的标记位置,与localstorage中存储的标记位置进行比较,如果找到一个相等的值,就从localstorage中删除它 使用此选项:Javascript 关于本地存储的传单标记,如何获取标记lat lng并从存储中排除?,javascript,html,local-storage,leaflet,marker,Javascript,Html,Local Storage,Leaflet,Marker,我创建了一个函数,可以单击在地图上放置一个标记,并将其保存到localstorage。在标记弹出窗口内,它显示标记位置和删除按钮 我怎样才能使delete按钮获得实际的标记位置,与localstorage中存储的标记位置进行比较,如果找到一个相等的值,就从localstorage中删除它 使用此选项: for ( var i = 0, len = localStorage.length; i < len; ++i ) { console.log( localStorage.getIte
for ( var i = 0, len = localStorage.length; i < len; ++i ) {
console.log( localStorage.getItem( localStorage.key( i ) ) );
}
守则:
function onMapClick(e) {
var geojsonFeature = {
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [e.latlng.lat, e.latlng.lng]
}
}
var marker;
L.geoJson(geojsonFeature, {
pointToLayer: function(feature, latlng){
marker = L.marker(e.latlng, {
title: "Resource Location",
alt: "Resource Location",
riseOnHover: true,
draggable: false,
icon: totem
}).bindPopup("<span>X: " + e.latlng.lng + ", Y: " + e.latlng.lat + "</span><br><a href='#' id='marker-delete-button'>Delete marker</a>");
marker.on("popupopen", onPopupOpen);
marker.on("dragend", function (ev) {
var chagedPos = ev.target.getLatLng();
this.bindPopup(chagedPos.toString()).openPopup();
});
// Begin store markers in local storage
storeMarker(e.latlng);
// End store markers in local storage
return marker;
}
}).addTo(map);
}
function onPopupOpen() {
var tempMarker = this;
$("#marker-delete-button:visible").click(function () {
map.removeLayer(tempMarker);
localStorage.removeItem("markers");
});
}
/// Load markers
function loadMarkers(){
var markers = localStorage.getItem("markers");
if(!markers) return;
markers = JSON.parse(markers);
markers.forEach(function(entry) {
latlng = JSON.parse(entry);
var geojsonFeature = {
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [latlng.lat, latlng.lng]
}
}
var marker;
L.geoJson(geojsonFeature, {
pointToLayer: function(feature){
marker = L.marker(latlng, {
title: "Resource Location",
alt: "Resource Location",
riseOnHover: true,
draggable: true,
icon: totem
}).bindPopup("<span>X: " + latlng.lng + ", Y: " + latlng.lat + "</span><br><a href='#' id='marker-delete-button'>Delete marker</a>");
marker.on("popupopen", onPopupOpen);
return marker;
}
}).addTo(map);
});
}
/// Store markers
function storeMarker(marker){
var markers = localStorage.getItem("markers");
if(!markers) {
markers = new Array();
console.log(marker);
markers.push(JSON.stringify(marker));
}
else
{
markers = JSON.parse(markers);
markers.push(JSON.stringify(marker));
}
console.log(JSON.stringify(markers));
localStorage.setItem('markers', JSON.stringify(markers));
}
map.on('click', onMapClick);
loadMarkers();
函数onmaplick(e){
var geojsonFeature={
“类型”:“功能”,
“属性”:{},
“几何学”:{
“类型”:“点”,
“坐标”:[e.latlng.lat,e.latlng.lng]
}
}
var标记;
L.geoJson(geojsonFeature{
pointToLayer:功能(特性、latlng){
标记器=L.标记器(如板条{
标题:“资源位置”,
alt:“资源位置”,
上升悬停:对,
可拖动:错误,
图标:图腾
}).bindPopup(“X:+e.latlng.lng+”,Y:+e.latlng.lat+”
”;
marker.on(“popupopen”,onPopupOpen);
标记器打开(“dragend”,功能(ev){
var chagedPos=ev.target.getLatLng();
this.bindpoppup(chagedPos.toString()).openPopup();
});
//开始在本地存储中存储标记
存储标记(如latlng);
//本地存储中的结束存储标记
返回标记;
}
}).addTo(地图);
}
函数onPopupOpen(){
var tempMarker=这个;
$(“#标记删除按钮:可见”)。单击(函数(){
地图移除层(临时标记);
localStorage.removietem(“标记”);
});
}
///装载标记
函数loadMarkers(){
var markers=localStorage.getItem(“标记”);
如果(!标记)返回;
markers=JSON.parse(markers);
markers.forEach(函数(条目){
latlng=JSON.parse(条目);
var geojsonFeature={
“类型”:“功能”,
“属性”:{},
“几何学”:{
“类型”:“点”,
“坐标”:[latlng.lat,latlng.lng]
}
}
var标记;
L.geoJson(geojsonFeature{
pointToLayer:函数(特性){
标记器=L.标记器(板条{
标题:“资源位置”,
alt:“资源位置”,
上升悬停:对,
真的,
图标:图腾
}).bindPopup(“X:+latlng.lng+”,Y:+latlng.lat+”
”;
marker.on(“popupopen”,onPopupOpen);
返回标记;
}
}).addTo(地图);
});
}
///存储标记
函数存储标记器(标记器){
var markers=localStorage.getItem(“标记”);
如果(!标记){
markers=新数组();
控制台日志(标记器);
markers.push(JSON.stringify(marker));
}
其他的
{
markers=JSON.parse(markers);
markers.push(JSON.stringify(marker));
}
log(JSON.stringify(markers));
setItem('markers',JSON.stringify(markers));
}
map.on('click',onmaclick);
loadMarkers();
您似乎对locaStorage是什么/做什么感到困惑,它将数据存储为键:值对,因此您所拥有的基本上是一个包含以下内容的列表:
key: \"lat\":1780,
value: \"lng\":456
至于删除geoJSON功能,一种可能是使用函数onEachFeature()
,该函数可以在geoJSON功能添加到地图之前将其绑定到geoJSON功能,因此,当单击弹出窗口的删除按钮时,您可以使用该函数绑定删除功能,但同时可以从地图中删除图层,它不会将本地存储中的数据作为传单擦除,因为无法引用其中的数据
另一种可能是在创建点时添加点,以便在希望从数据库中删除点时更容易引用它们。关于\,您的数据已经是JSON格式,因此当您从localStorage获取数据并再次运行stringify时,您将JSON转换为JSON。所以,在loadmarkers函数中,我必须删除这一行:
markers=JSON.parse(markers)代码>?
key: \"lat\":1780,
value: \"lng\":456