2016-02-26 57 views
0

我创建了一个函数,点击时在地图上放置一个标记,并将其保存到localstorage。在标记弹出框内,显示标记位置和删除按钮。本地存储中的单张标记,如何获取标记经纬度并从存储中排除?

如何让删除按钮获得实际标记位置,与存储在localstorage中的标记位置进行比较,如果找到相同的值,将其从本地存储中删除?

使用此:

for (var i = 0, len = localStorage.length; i < len; ++i) { 
    console.log(localStorage.getItem(localStorage.key(i))); 
} 

我得到了什么是在本地存储,我注意到标记保存为“\”,什么办法改善这种代码?

["{\"lat\":1780,\"lng\":456}","{\"lat\":1280,\"lng\":904}","{\"lat\":1000,\"lng\":-132}","{\"lat\":216,\"lng\":300}"] 

代码:

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(); 
+0

对于你关于\的问题,你的数据已经是JSON形式,所以当你从localStorage得到它并且再次运行它时,你将JSON转换为JSON。别。 –

+0

因此,在loadmarkers函数中,我必须删除这一行:'markers = JSON.parse(markers);'? – RogerHN

回答

0

你似乎混淆了locaStorage是什么/做,存储数据的关键:值对,所以你有什么有基本的东西,其中一个列表您有:

key: \"lat\":1780, 
value: \"lng\":456 

至于删除GeoJSON的功能,一个可能性是使用是可以结合的功能将它们添加到地图前GeoJSON的特色功能onEachFeature(),所以也许你可以当点击弹出框的删除按钮时,使用它来绑定删除功能,但是当它可以从地图中移除图层时,它不会将localStorage中的数据作为传单擦除,因为没有办法在那里引用数据。

另一种可能性是在创建它们时将unique id's添加到您的要点中,以便您可以在从数据库中删除它们时更轻松地引用它们。

相关问题