2011-04-19 16 views
10

के एक LatLngBounds आयताकार (वर्ग) दिए गए कोऑर्ड बनाने के लिए कैसे करें मेरे पास एक बिंदु (एक्स, वाई) है और मैं एक वर्ग, Google मानचित्र LatLngBounds ऑब्जेक्ट बनाना चाहता हूं ताकि geocode अनुरोध केवल इस LatLngBound क्षेत्र में पूर्वाग्रह बना सके।Google नक्शे। एक केंद्रीय बिंदु

मैं दिए गए बिंदु के साथ ऐसे लैट्लिंगबाउंड स्क्वायर कैसे बना सकता हूं? मुझे एनई और एसडब्ल्यू पॉइंट मिलना है। लेकिन मैं इसे दूरी डी और एक बिंदु (एक्स, वाई) दिया कैसे पा सकता हूं?

धन्यवाद

उत्तर

33

आप सर्कल के रूप में परिभाषित त्रिज्या से getBounds भी कर सकते हैं और ट्रिगर को Google पर छोड़ सकते हैं।

new google.maps.Circle({center: latLng, radius: radius}).getBounds();

+4

धन्यवाद! यह मेरे लिए काम करता है: 'var latLng = new google.maps.LatLng (32.79503, -117.24142);/* सैन डिएगो */var त्रिज्या = 2000;/* मीटर */var circle = new google.maps.Circle ({center : latLng, त्रिज्या: त्रिज्या}); var डिफ़ॉल्ट बाउंड = circle.getBounds(); ' – Ryan

+0

ग्रेट। अच्छा समाधान! –

6

अच्छी तरह से यह बहुत जटिल है। एक मोटा बॉक्स के लिए इस प्रयास करें:

if (typeof(Number.prototype.toRad) === "undefined") { 
    Number.prototype.toRad = function() { 
    return this * Math.PI/180; 
    } 
} 

if (typeof(Number.prototype.toDeg) === "undefined") { 
    Number.prototype.toDeg = function() { 
    return this * 180/Math.PI; 
    } 
} 

var dest = function(lat,lng,brng, dist) { 
    this._radius = 6371; 
    dist = typeof(dist) == 'number' ? dist : typeof(dist) == 'string' && dist.trim() != '' ? +dist : NaN; 
    dist = dist/this._radius; 
    brng = brng.toRad(); 
    var lat1 = lat.toRad(), 
     lon1 = lng.toRad(); 

    var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) + Math.cos(lat1) * Math.sin(dist) * Math.cos(brng)); 
    var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) * Math.cos(lat1), Math.cos(dist) - Math.sin(lat1) * Math.sin(lat2)); 
    lon2 = (lon2 + 3 * Math.PI) % (2 * Math.PI) - Math.PI; 
    return (lat2.toDeg() + ' ' + lon2.toDeg()); 
} 

    var northEastCorner = dest(centreLAT,centreLNG,45,10); 
    var southWestCorner = dest(centreLAT,centreLNG,225,10); 

संपादित

ऊपर वे इसे जिस तरह से 2011 में वापस जब मैं इसे लिखा करने के लिए रास्ता नहीं था। इन दिनों गूगल मैप्स एपीआई बहुत कम तरीके से आया है। @wprater द्वारा उत्तर बहुत साफ है और कुछ नए एपीआई तरीकों का उपयोग करता है।

+2

ठीक है लेकिन कोड के बारे में कुछ और शब्दों को समझाएं ताकि अन्य दर्शक समझ सकें। ब्रिंग वैरिएबल क्या है और यह क्या करता है और 10 को दूर करने के दौरान, यह किलोमीटर है? इसका मतलब क्या है जब आप एनई कोने के लिए 45,10 और एसडब्ल्यू कोने के लिए 225, 10 डालते हैं? – maiky

+0

ठीक 'brng' असर या कोण है। इसलिए, 45,10 का उपयोग करके हम आपके शुरुआती बिंदु के पूर्व में 10 किमी उत्तर पूर्व के बिंदु की गणना कर रहे हैं। 225,10 आपको दक्षिण पश्चिम स्थान देगा। ये Google बाउंड ऑब्जेक्ट के लिए आवश्यक दो बिंदु हैं। – herostwist

+0

यहां एक कामकाजी उदाहरण है: http://jsfiddle.net/herostwist/DnSHY/1/ – herostwist

1

यह बस जोड़ें/घटाना घ/2 अपने x/y स्थानों के लिए करने के लिए काम नहीं करेंगे? केंद्र बिंदु के रूप में y

को देखते हुए एक्स,:

NW = x-(d/2),y-(d/2) 
SE = x+(d/2),y+(d/2) 

, हालांकि इस पर मुझ पर भरोसा मत करो - मैं गणित :)

यह एक "व्यास" के रूप में मान लिया गया है घ पर भयानक रहा हूँ, त्रिज्या के बजाए। यदि त्रिज्या "डी" है, तो विभाजन से दो भाग से परेशान न हों।

+0

ओह कैसे मैं गोलाकार ज्यामिति की इच्छा करना इतना आसान था। हां यह नहीं है। – herostwist

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