Şu anda bir OpenLayers haritalama sitesi geliştiriyorum. Ölçümler bir çizgi aracı ve bir alan aracı kullanılarak yapılabilir. Bunların her ikisi de şu anda OpenLayers API'sinde belirtildiği gibi jeodezik ölçümleri hesaplamak üzere ayarlanmıştır .
Kullanıcı testleri sırasında insanların zaten bildikleri mesafeler için (şehirler arasında sürüş gibi) aracın ölçümlerini sorguladığı için düzlemsel ölçümler yerine jeodezik ölçümler kullanıyorum.
Sitenin yeni bir özelliği, kullanıcının ayarlanan yarıçapın haritasında bir daire çizebilmesidir. OpenLayers yalnızca düzlemsel mesafeler kullanarak daire çizmeye izin verir, bu nedenle kullanıcı daireyi jeodezik ölçüm aracıyla ölçtüğünde değerler eşleşmez. Daire düzlemsel yarıçapının altındaki görüntüde 10km, ancak çap için jeodezik hat ölçümü 12km'dir.
Açıkçası bu bir kullanıcının (ve kendimin) hangisinin doğru olduğunu merak etmesini sağlayacaktır.
Bu cevaba bakıldığında, çoğu masaüstü CBS sisteminin bu sorunu "yok saydığı" ve düzlemsel ölçümleri ve mesafeleri döndürdüğü anlaşılıyor. Peki, düzlemsel ve jeodezik ölçümlerle başa çıkmak için kullanıcı arayüzü ve doğruluk açısından en iyi uygulama nedir?
Güncelleme
Yarıçaplar ve Mercator projeksiyonu sorununu gösteren bu Google örneğini buldum:
http://maps.forum.nu/gm_sensitive_circle2.html
Çemberi çizmek için kullanılan JavaScript kodu şöyledir:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
Bu daire dünyanın eğriliğini dikkate alıyor mu?
Son Güncelleme
Http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers adresinde yayınlanan çalışma kodu