2015-05-27 4 views
6

मैं मानचित्र और मार्करों के लिए जीएमएपी.नेट कोड का उपयोग कर रहा हूं। मार्कर जोड़ने और मानचित्र के साथ कुछ भी करने में समस्या नहीं है, जिसने मुझे मानचित्र से एक मार्कर को हटा दिया है जिसमें मुझे समस्याएं हैं। मैंने मानचित्र पर मार्कर को हटाने के लिए Google पर हर जगह शोध किया लेकिन मार्कर को हटाने का एक गर्म विषय प्रतीत नहीं होता है।Gmap.net मार्कर हटाने

यहां कोड का स्निपेट है जिसे मैं जोड़ने के लिए उपयोग करता हूं।

 private void AddMarker_ButtonClick(object sender, AddMarkerEventArgs e) 
    { 
     DBDictAdd("Marker", " ",e.Latitude, e.Longitude, true, "192.168.1.1"); 
     m_dbMarkers.Insert(_table, dbmarkertable); 
     dbmarkertable.Clear(); 
     GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(e.Latitude, e.Longitude), 
       GMarkerGoogleType.green); 
     marker.ToolTip = new GMapRoundedToolTip(marker); 
     marker.ToolTipMode = MarkerTooltipMode.OnMouseOver; 
     marker.Tag = MarkerIndex; 
     marker.ToolTipText = (marker.Position.ToString()); 
     markersOverlay.Markers.Add(marker); 
     MarkerIndex++; 
    } 

आप मैं SQLite उपयोग कर रहा हूँ मार्करों के लिए डेटाबेस में ID और अन्य जानकारी स्टोर करने के लिए देख सकते हैं। मैं डेटाबेस दृष्टिकोण का उपयोग कर रहा हूं क्योंकि मुझे मार्कर स्थान के साथ अधिक जानकारी स्टोर करने की आवश्यकता होगी। कोड का यह हिस्सा काम करता है।

मेरी समस्या यह है कि मैं मार्कर जानकारी को कॉल कर रहा हूं ताकि मैं इसे हटा सकूं। मुझे पता है कि ये 2 कॉल मौजूद हैं।

markersOverlay.Markers.Remove(); 
markersOverlay.Markers.RemoveAt(); 

मैं removeAt आदेश का इस्तेमाल किया है, लेकिन मैं इसे मैन्युअल रूप से करना था और पाया है removeAt(0) आदेश का उपयोग कि सरणी हर बार की पहली प्रविष्टि से लेता है।

यह वही है मैं अब तक की कोशिश की है है:

private void uxRemoveMarkerButton_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("Select the marker to remove."); 
      uxGmap.OnMarkerClick += new MarkerClick(uxGmap_OnMarkerClick); 

     } 

     private void uxGmap_OnMarkerClick(object sender, EventArgs e) 
     { 
      //int? mID = null; 
      //DataTable da = m_dbMarkers.GetDataTable("SELECT * from markers"); 
      //GMapMarker marker = null; 
      //PointLatLng p = new PointLatLng(lat, lng); 
      //foreach (GMapMarker m in markersOverlay.Markers) 
      //{ 
      // if (m.Position == p) 
      //  marker = m; 
      //} 
      //markersOverlay.Markers.Remove(marker); 
      //MessageBox.Show("done"); 
      //foreach (DataRow dr in da.Rows) 
      //{ 
      // if (Convert.ToDouble(dr[3]) == lat) 
      // { 
      //  MessageBox.Show(dr[3].ToString()); 
      //  //mID = Convert.ToInt32(dr[0]); 
      // } 
      //} 
      //markersOverlay.Markers.IndexOf(marker); 

      //mID= Convert.ToInt32(m_dbMarkers.ExecuteScalar("SELECT ID FROM markers")); 
      //m_dbMarkers.Delete(_table, String.Format("markers.ID = {0} ", mID)); 
      //markersOverlay.Markers.RemoveAt(mID); 
      //MessageBox.Show(mID.ToString()); 
      uxGmap.OnMarkerClick -= new MarkerClick(uxGmap_OnMarkerClick); 

     } 

कैसे मैं मार्कर आईडी प्राप्त करने या खुद के समय मार्कर मैं उस पर क्लिक करें वास्तव में नक्शे से निकालने के लिए कर सकते हैं पर कोई सुझाव या मार्गदर्शन?

संपादित करें: मैं अद्यतन AddMarker_ButtonClick

उत्तर

2

समाधान मैं नक्शे से मार्कर को हटाने के लिए पता चला:

GMap.Net एक MarkerClick घटना है कि आप की सदस्यता ले सकते हैं। मेरे रूप में यह वह कोड है जिसका मैंने उपयोग किया था और जहां मैंने इसे फॉर्म कोड में रखा था।

Public Form1() 
    { 
      uxGmap.OnMarkerClick += new MarkerClick(uxGmap_OnMarkerClick); 
    } 

कोड uxGmap_OnMarkerClick

private void uxGmap_OnMarkerClick(GMapMarker item, MouseEventArgs e) 
    { 
     currentMarker = item; 
     uxRemoveMarkerButton.Enabled = true; 
    } 

अंदर मैं एक वैश्विक GMapMarkercurrentMarker कि item मार्कर है कि आप पर क्लिक करें संग्रहीत करता है कहा जाता है। मैं अपने फॉर्म पर मार्कर को हटाने के लिए बटन को भी सक्षम करता हूं।

private void uxRemoveMarkerButton_Click(object sender, EventArgs e) 
    { 
      int? mID = null; 
      if(currentMarker != null) 
      { 
       mID = Convert.ToInt32(currentMarker.Tag); 
       markersOverlay.Markers.Remove(currentMarker); 
       currentMarker = null; 
      } 
      m_dbMarkers.Delete(_table, String.Format("markers.ID = {0} ", mID)); 
      uxRemoveMarkerButton.Enabled = false; 
    } 

GMapMarker जहाँ मैं मार्कर के लिए मार्कर आईडी स्टोर कर सकते हैं करने के लिए एक Tag संपत्ति है:

तो मैं का उपयोग कर नक्शा से मार्कर दूर करने के लिए एक बटन क्लिक का उपयोग करें। इसके बाद मैं अपने वैश्विक currentMarker.Tag से उस आईडी को निकालता हूं और इसे स्थानीय int mID पर संग्रहीत करता हूं। मैं इस mID का उपयोग करता हूं जो कि मेरे पास एसक्लाइट डेटाबेस में संग्रहीत मार्कर आईडी के साथ पंक्ति को हटाने के लिए करता है। मैं किसी भी उपयोगकर्ता त्रुटि को मार्कर क्लिक करने तक अनुमति देने के लिए बटन को अक्षम भी करता हूं।

संबंधित मुद्दे