2013-08-05 2 views
10

मैंने एक मुद्दा सुझाया और लेखक ने इसे गीथब पर बंद कर दिया, लेकिन मुझे अभी भी कोई निष्कर्ष नहीं मिला है। Longitudes -180 से 180 तक है। लेकिन कभी-कभी, पत्रक get4 (47) से 474.2578215 की तरह लंबे समय तक लौटता है, जो निश्चित रूप से मेरे डेटाबेस में कुछ भी वापस नहीं आ जाता है।पत्रक getBounds() 180 से अधिक लंबे समय तक लौटने वाले

मुझे बताया गया था: यह इरादा व्यवहार है। ऐसा तब होता है जब आप बहुत दूर ज़ूम करते हैं और/या मानचित्र को दुनिया की दूसरी प्रतियों पर खींचते हैं, और प्राप्त करें बाउंड्स लम्बाई डिफ़ॉल्ट रूप से लपेटा नहीं जाता है। आप जो चाहते हैं उसे प्राप्त करने के लिए आप LatLng रैप विधि का उपयोग कर सकते हैं - उदा। bounds.getSouthWest()। लपेट()।

ठीक है। इसलिए मैंने वहां रैप विधि जोड़ा, और सही डेटा वापस कर दिया गया है, लेकिन अब मानचित्र पर कोई मार्कर दिखाई नहीं देगा। यह संभवतः उस उच्च संख्या सीमा के भीतर नहीं होने वाले मार्कर स्थानों के कारण है (सीमाओं के निर्देशांक क्या हैं ...)

मुझे यकीन नहीं है कि ज़ूमिंग या ड्रैगिंग समस्या का कारण है। पृष्ठ को रीफ्रेश करते समय समस्या बनी रहती है, जहां उपयोगकर्ता ज़ूमिंग या ड्रैगिंग ईवेंट नहीं करता है। मेरे पास init में ज़ूम सीमित है: minZoom: 6, maxZoom: 13.

मुझे यह भी ध्यान रखना चाहिए कि यह कोड (अपरिवर्तित) ठीक काम करने के लिए उपयोग किया जाता है। यहां मेरा कोड है:

$(document).ready(function(){ initmap(); }); 

var map; 
var plotlist; 
var plotlayers=[]; 

function initmap(){ 
    // set up the map 
    map = new L.Map('map'); 

    //get our map 
    var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; 
    var osmAttrib='&copy; <a href = "http://www.openstreetmap.org/copyright"> OpenStreetMap </a> contributors'; 
    var osm = new L.TileLayer(osmUrl, {minZoom: 6, maxZoom: 13, 
      attribution: osmAttrib});  

    map.setView(new L.LatLng(<?=$slat;?>, <?=$slng;?>),9); 
    map.attributionControl.setPrefix(''); 
    map.addLayer(osm); 
    getGameMarkers(); 
    map.on('moveend', onMapMove); 
} 

    function onMapMove(e){ 
     getGameMarkers(); 
    } 

function getGameMarkers(){ 
    var center = map.getCenter(); 
    var zoo = map.getZoom(); 
    var bounds = map.getBounds(); 
    console.log(bounds); 

     var min = bounds.getSouthWest().wrap(); 
    var max = bounds.getNorthEast().wrap(); 

    $.ajax({type: "GET", url: "./ajax/markers.php", dataType: "json", data: "clat="+center.lat+"&clng="+center.lng+"&zoom="+zoo+"&minlat="+min.lat+"&minlng="+min.lng+"&maxlat="+max.lat+"&maxlng="+max.lng+cookiestr, 
    success: function(data){ 
     if (data.showmap == 1) { 
      plotlist = data.map_data;  
      removeMarkers(); 
      for (i=0;i<plotlist.length;i++) { 
       var iconic = String(plotlist[i].icon); 
       var plotmark = new L.marker([plotlist[i].lat,plotlist[i].lng], {icon: L.icon({iconUrl: iconic, iconSize: [32, 32]}) }).bindPopup(plotlist[i].html); 
       map.addLayer(plotmark); 
       plotlayers.push(plotmark); 
      } 

      $("#content").html(data.html); 
     }else { 
      $("#map_content").show(); 
      $("#map_content").html(data.main_content); 
      $("#content").html(data.side_content); 
     } 
     } 
     }); 
    } 

लपेटें() फ़ंक्शन सही निर्देशांक देते हैं, और डीबी सही भूखंड देता है। लेकिन किसी कारण से, वे प्रदर्शित नहीं होते हैं। यहाँ भूखंडों लौटा दिए जाते हैं (map_data भाग):

map_data: [{lat:36.672825, lng:-76.541748, icon:./img/avicon3.png,…},…] 
      0: {lat:36.672825, lng:-76.541748, icon:./img/avicon3.png,…} 
      1: {lat:36.901314, lng:-76.041870, icon:./img/avicon2.png,…} 
      2: {lat:37.101192, lng:-76.264343, icon:./img/avicon3.png,…} 
      3: {lat:37.300274, lng:-75.673828, icon:./img/avicon3.png,…} 
      4: {lat:37.348328, lng:-76.830139, icon:./img/avicon3.png,…} 
      5: {lat:37.2481003, lng:-76.1194000, icon:./img/bicon3.png,…} 
      6: {lat:37.0298691, lng:-76.3452225, icon:./img/ricon.png,…} 
      7: {lat:37.6087608, lng:-77.3733063, icon:./img/ricon.png,…} 
      8: {lat:37.7440300, lng:-77.1316376, icon:./img/ricon.png,…} 
      9: {lat:37.5917015, lng:-77.4207993, icon:./img/bicon2.png,…} 
      10: {lat:37.5206985, lng:-77.3783112, icon:./img/ricon.png,…} 
      11: {lat:37.3306999, lng:-77.3227615, icon:./img/ricon.png,…} 
      12: {lat:37.1228981, lng:-75.9063034, icon:./img/bicon2.png,…} 

कंसोल में कोई त्रुटि नहीं है, और जैसा कि मैंने कहा, कभी कभी यह सब काम करता है (जब getBounds एक पागल बड़ा LON वापस नहीं करता है)। तो बिल्ली में क्या मैं गलत कर रहा हूं, और सबसे महत्वपूर्ण बात यह है कि मैं इसे कैसे हल करूं?

उत्तर

11

यह दुनिया के कारण है क्योंकि कॉपीऑम्प डिफ़ॉल्ट रूप से गलत पर सेट हो रहा है। इसे सही पर सेट करना, और मार्कर सही तरीके से प्रदर्शित होंगे, क्योंकि दुनिया ओवरलैप नहीं होगी।

0

मैंने कभी भी उन गलत सीमाओं का अनुभव नहीं किया है, लेकिन प्रोग्रामिंग रूप से उन्हें कम से कम अस्थायी समाधान के रूप में कार्य नहीं कर पाएंगे?

मार्करों के प्रदर्शन के लिए नहीं - क्या यह तब होता है जब आप मानचित्र को स्थानांतरित कर रहे हों? यदि ऐसा है तो 'ओवरेंडिंग' घटनाओं के कारण यह काफी संभावना है। मुझे नहीं पता कि औसत पर कितने अंक हैं लेकिन यदि डेटा डाउनलोड खत्म नहीं होता है और मार्कर जोड़ते हैं तो 'चालान' का अगला कॉल सभी मौजूदा मार्करों को हटा देगा और उन्हें बदलना शुरू कर देगा (यह 'प्लॉटलिस्ट' को ओवरराइड करेगा जो माइग्रेट कारण बाद में त्रुटियों)। सभी परिचालन समाप्त होने के बाद आप उन्हें वैश्विक सूची में जोड़ने का प्रयास कर सकते हैं और मार्कर तैयार किए जाते हैं या आप केवल नए मार्कर में नहीं जा सकते हैं।

sidenote पर - उन परतों को बनाने के लिए geojson का उपयोग क्यों नहीं करें? 'पॉइंट टॉलेयर' और 'ऑनएचफेचर' के साथ आप मार्कर/पॉपअप को कस्टमाइज़ कर सकते हैं और अंत में एक परत ले सकते हैं, बल्कि मार्करों की लंबी सूची।

+0

वे सीमाएं नक्शा खींचने से आती हैं, और उन्हें पुस्तिका द्वारा वापस कर दिया जाता है। तो मुझे यकीन नहीं है कि मैं प्रोग्रामेटिक रूप से इसे बदल सकता हूं। मार्कर इनिट, या ड्रैग पर नहीं दिखते हैं। मेरे पास console.log है जो लूप के माध्यम से जाता है और हर मार्कर को प्रिंट करता है, इसलिए मुझे पता है कि घटना कम से कम हो रही है। मैं Google मानचित्र का उपयोग करता था, इसलिए मैं प्रोग्रामिंग को अपने अंतिम कार्यान्वयन के लिए जितना संभव हो सके रखता था (बस अगर मुझे वापस कूदने की आवश्यकता होती है)। मैं भी geojson में अच्छी तरह से ज्ञात नहीं हूँ, तो मुझे यकीन नहीं है कि इसका उपयोग कैसे करें। –

1

मैं एक समान चीज़ देख रहा था, सिवाय इसके कि मैं एक कॉलबैक के माध्यम से एक मानचित्र क्लिक ईवेंट को event.latlng.lng के रूप में संसाधित कर रहा था।

event.latlng.wrap().lng 

जो तय: - जोड़ना worldCopyJump: true मेरे लिए किया था नहीं ठीक इस मुद्दे मैं अभी भी देख रहा था देशांतर से अधिक 180.

को महत्व देता है अंत में, मैं latlng वस्तु को wrap() विधि कहा जाता है मुसीबत।

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