Tôi hiện đang phát triển một trang web ánh xạ OpenLayers. Các phép đo có thể được thực hiện bằng cách sử dụng công cụ đường và công cụ khu vực. Cả hai điều này hiện được thiết lập để tính toán các phép đo trắc địa như được nêu trong API OpenLayers .
Tôi sử dụng các phép đo trắc địa thay vì đo phẳng như trong quá trình kiểm tra người dùng đã đặt câu hỏi cho các phép đo của công cụ về khoảng cách họ đã biết (chẳng hạn như lái xe giữa các thị trấn).
Một tính năng mới của trang web là cho người dùng có thể vẽ một vòng tròn trên bản đồ bán kính đã đặt. OpenLayers chỉ cho phép vẽ các vòng tròn bằng khoảng cách phẳng, vì vậy khi người dùng đo vòng tròn bằng công cụ đo trắc địa, các giá trị không khớp. Trong ảnh bên dưới bán kính phẳng hình tròn là 10km, nhưng số đo đường trắc địa cho đường kính là 12km.
Rõ ràng điều này sẽ khiến người dùng (và bản thân tôi) tự hỏi cái nào là chính xác.
Nhìn vào câu trả lời này, có vẻ như hầu hết các hệ thống GIS trên máy tính để bàn "bỏ qua" vấn đề này và trả về các phép đo và khoảng cách phẳng. Vì vậy, thực tiễn tốt nhất về giao diện người dùng và độ chính xác để đối phó với các phép đo phẳng và trắc địa là gì?
Cập nhật
Tôi đã tìm thấy ví dụ Google này minh họa vấn đề bán kính và phép chiếu Mercator:
http://maps.forum.nu/gm_sensitive_circle2.html
Mã JavaScript để vẽ vòng tròn như sau:
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);
}
Liệu vòng tròn này có tính đến độ cong của trái đất?
Cập nhật cuối cùng
Mã làm việc được đăng tại http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers