2013-02-05 13 views
8

मेरे पास ओवरले के साथ एक नक्शा है जिसे मैं कैश करना चाहता हूं - प्रत्येक स्थान पर उपयोगकर्ता मानचित्र पर जाता है (जो एक आयताकार क्षेत्र है) - मैं जांचता हूं कि मेरे पास इस आयत में रहने वाले ओवरले का कैश है या नहीं।समन्वय आयताकार गोल करके कैशिंग ओवरले - कैसे?

कैशिंग में सुधार करने के लिए (इसलिए यदि उपयोगकर्ता पहले एक ही आयताकार पर था, सिवाय इसके कि अब वह पिछले आयत से कुछ मीटर दूर है) - मैं निर्देशांक को "गोल" करना चाहता हूं।

इस तरह, प्रत्येक बार जब उपयोगकर्ता एक आयताकार में होता है - मैं जांचता हूं कि यह आयताकार पहले कैश किए गए आयत के समान है और यदि ऐसा है तो मैं कैश्ड परिणाम लाता हूं।

इसके अलावा, यदि उपयोगकर्ता ज़ूम आउट हो गया है और उसका आयत के भीतर एक बड़ा (पहले कैश किया गया) आयताकार है - तो मैं कैश किए गए आयत का भी उपयोग कर सकता हूं।

कोई सुझाव?

उत्तर

1

यदि आप समन्वय समूह को कैसे समूहित करना चाहते हैं, तो एक्स और वाई या अक्षांश और अक्षांश में समन्वय के बीच अधिकतम अंतर पर निर्णय लें। फिर आप उन्हें समूहित करने के दो तरीके हैं। पहला आसान है, लेकिन यदि आपके पास कई अंक हैं तो यह धीमा हो जाएगा।

कहें कि हमारे पास कैशपॉइंट्स नामक डेटा संरचना है, जो अधिकतम बिंदु नामक संबंधित बिंदुओं के बीच अधिकतम दूरी और एक नया बिंदु है जिसे हम यह देखने के लिए जांच कर रहे हैं कि यह अन्य बुलाए गए बिंदु के करीब है या नहीं।

for each cachedPoint in cachedPoints 
{ 
    if (point.x - cachedPoint.x < maxdistance) 
    { 
     if (point.y - cachedPoint.y < maxdistance) 
     { 
       cachedPoint.incrementvisits(); 
     } 
    } 
} 

अन्य तरीके से, तो y या लॉन्गटिट्यूड जाँच डेटा संरचना एक्स या अक्षांश के अनुसार क्रमबद्ध उपयोग करने के लिए, और फिर अगर वहाँ एक एक्स या अक्षांश बिंदु के maxdistance भीतर के साथ एक cachedpoint है देखने के लिए खोज है। यह थोड़ा तेज़ होगा, लेकिन यह लागू करने के लिए किसी प्रकार का हैश ले जाएगा और जटिलता का एक गुच्छा जोड़ता है जिसकी आपको आवश्यकता नहीं हो सकती है।

उम्मीद है कि आप यही पूछ रहे हैं।

1

आप की तरह एक डेटा संरचना सेट करते हैं:

var a = { 'scales' : [50, 100, 200, 400, 1000], 
    'cachedRects': [{'location': 'rect-large-1234-5678.png', x: 1234, y: 5678, scale: 3} 
        {'location': 'rect-small-1240-5685.png', x: 1240, y: 5685, scale: 1} ] 
} 

आपको बस इतना करना सापेक्ष समारोह का उपयोग कर सकते:

var currentx = GetCurrentX(); 
var currenty = GetCurrentY(); 

var currentScale = GetCurrentScale(); 

var rectFound = false; 

foreach(rect in a.cachedRects) { 
    if (rect.scale === currentScale 
     && currentx % a.scales[currentScale] === rect.x 
     && currenty % a.scales[currentScale] === rect.y) { 
      rectFound = true; 
      useOverlay(rect); 
      break; 
    } 

} 

if(!rectFound) { 
    //could loop again for a larger rectangle of a lower scale. 
} 

ऊपर हो सकता है या बदल नहीं हो सकता वैध जे एस होने के लिए - मैंने इसे चलाने की कोशिश नहीं की है। मुझे उम्मीद है कि आप भी गड़बड़ हो जाएंगे।

0

अरे आप एंड्रॉइड में Google मानचित्र v2 में मार्कर जोड़ सकते हैं।

यहाँ मैं ऐड मार्कर लिए देना कोड

MarkerOptions mOpt = new MarkerOptions(); 
    mOpt.position(new LatLng(userHstry.getMyLatlng().latitude, userHstry.getMyLatlng().longitude)); // map.clear(); 
       mOpt.title("Address : " + userHstry.getAddress()).snippet("Date : " + userHstry.getDate() + " , Time : " + userHstry.getTime()); 
       map.addMarker(mOpt); 
संबंधित मुद्दे