2011-04-19 25 views
10

koordinatları verilen bir LatLngBounds dikdörtgen (kare) oluşturmak nasıl bir nokta (X, Y) var ve bir kare oluşturmak istiyorum, Google haritalar LatLngBounds nesne böylece geocode istekleri sadece bu LatLngBound bölgesine bias yapmak.google maps. Bir merkez noktası

Belirtilen noktayı ortalayarak böyle bir LatLngBounds karesi nasıl oluşturabilirim? NE ve SW noktasını bulmalıyım. Ama d ve bir nokta (x, y) verildiği zaman onu nasıl bulabilirim?

Teşekkürler

cevap

33

Ayrıca daire olarak tanımlanan bir yarıçaptan getBounds ve trig'i google'a bırakabilirsiniz.

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

+4

Teşekkür ederiz! Bu benim için çalıştı: 'var latLng = yeni google.maps.LatLng (32.79503, -117.24142);/* San Diego */var yarıçap = 2000;/* metre */var daire = yeni google.maps.Circle ({center : latLng, radius: radius}); var defaultBounds = circle.getBounds(); ' – Ryan

+0

Harika. Güzel çözüm! –

6

Bu çok karmaşık bir işlemdir. kaba bir kutu için bu deneyin:

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); 

DÜZENLEME

yukarıdaki şekilde geri 2011'de bunu yazdığında bunu yapmak için onlar yol oldu. Bu günlerde google maps api bir loooong yolunda geldi. @wprater tarafından yanıt çok daha yenidir ve yeni api yöntemlerinden bazılarını kullanır.

+2

Tamam, ancak diğer görüntüleyenlerin anlayabilecekleri kod hakkında biraz daha fazla açıklama açıklayın. brng değişkeni ve ne yaptığı ve 10'u dist olarak eklerken kilometre nedir? NE köşesi için 45,10 ve SW köşesi için 225, 10 koyduğunuzda ne anlama geliyor? – maiky

+0

tamam 'brng' rulman veya açıdır. 45,10 kullanarak, başlangıç ​​noktanızın 10 km kuzeydoğusundaki bir noktanın yerini hesaplıyoruz. 225,10 size güney batı bölgesini verecektir. Bunlar bir google sınırları nesnesi için gereken iki nokta. – herostwist

+0

Burada çalışma örneği: http://jsfiddle.net/herostwist/DnSHY/1/ – herostwist

1

basitçe senin x/y yerlere d/2 çıkarma/eklemek için çalışmak olmaz mı? y merkez noktası olarak

Verilen x,:

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

da, bu konuda bana güvenme - Matematikte :)

Buna "çap" olarak d varsayar korkunç değilim, yarıçaptan ziyade. Eğer yarıçap "d" ise, ikiye bölme ile uğraşmayın.

+0

Oh nasıl küresel geometri bu kadar basit olsaydı. Ne yazık ki öyle değil. – herostwist