2010-08-04 36 views
11

Uygulamamda google maps kullanıyorum ve lat/lon değerleriyle dolu bir veritabanına sahip bir web sunucum var. Onları harita üzerinde işaretlemek istiyorum, ama aynı zamanda birbirlerinden belirli bir piksel uzaklığı içinde olduklarında bunları bir araya getirmek istiyorum.Lat/lon'u piksellere dönüştür ve geri dön

clusters[]; 
while(count(points)) { 
    cluster[]; 
    point = points.pop(); 
    boundingbox = pixelsToBB(point, pixeldistance, zoomlevel); 
    query = "select * from database where lat > boundingbox.minlat 
      and lat < boundingbox.maxlat and lng > boundingbox.minlng 
      and lng < boundingbox.maxlng"; 
    for (result in executedquery) { 
     cluster[] += result; 
     points.remove(result); 
    } 
    clusters[] += cluster; 
} 

pixelsToBB(point, distance, zoomlevel) { 
    center = convertXY(point, zoomlevel); 
    maxlng = convertToLng(center.X, distance, zoomlevel); 
    minlng = convertToLng(center.X, -distance, zoomlevel); 
    minlat = convertToLat(center.Y, -distance, zoomlevel); 
    maxlat = convertToLat(center.Y, distance, zoomlevel); 
    return boundingbox(maxlng, maxlat, minlng, minlat); 
} 

benim pixelsToBB işlevi ihtiyacı zoomlevel ne ilgisi olur:

ben veritabanından tüm puanları almak eğer anlamaya, ben bu (pseudocode) böyle bir şey yapmak mümkün olmalıdır? OR yerine convertToXY, convertToLng ve convertToLat ne yapmalı? Bunu doğru şekilde mi düşünüyorum yoksa bunu yapmak için daha iyi yollar var mı? Ne arayacağımı bile bilmiyorum, eğer daha önce sorulursa özür dilerim.

cevap

7

kullanma Google Maps API v3:

var latLng = // your position object here 
var projection = map.getProjection(); 
var bounds = map.getBounds(); 
var topRight = projection.fromLatLngToPoint(bounds.getNorthEast()); 
var bottomLeft = projection.fromLatLngToPoint(bounds.getSouthWest()); 
var scale = Math.pow(2, map.getZoom()); 
var worldPoint = projection.fromLatLngToPoint(latLng); 
return [Math.floor((worldPoint.x - bottomLeft.x) * scale), Math.floor((worldPoint.y - topRight.y) * scale)]; 
7

Bunu, Google Maps API belgelerinin bir parçası olarak this page üzerinde yapmak için bir JavaScript örneği vardır. Görmek için sayfa kaynağına bakmanız gerektiğini unutmayın. Bu gerçek bir doküman sayfası değil, bir örnek.

İlgili konular