Trong mã của tôi, tôi phải thực hiện rất nhiều phép tính khoảng cách giữa các cặp giá trị lat/long.Tối ưu hóa chức năng tính toán khoảng cách
mã trông như thế này:
double result = Math.Acos(Math.Sin(lat2rad) * Math.Sin(lat1rad)
+ Math.Cos(lat2rad) * Math.Cos(lat1rad) * Math.Cos(lon2rad - lon1rad));
(lat2rad ví dụ là vĩ độ chuyển đổi sang radian).
Tôi đã xác định chức năng này là nút cổ chai hiệu suất của ứng dụng của tôi. Có cách nào để cải thiện điều này không?
(Tôi không thể sử dụng bảng tra cứu vì các tọa độ khác nhau). Tôi cũng đã xem xét this question nơi đề xuất một sơ đồ tra cứu như một lưới, có thể là một khả năng.
Cảm ơn bạn đã dành thời gian! ;-)
Bạn nên lưu ý rằng thuật toán này chỉ đúng nếu bạn cho rằng Trái đất là một hình cầu hoàn hảo và sự khác biệt giữa xấp xỉ và câu trả lời thực tế n là khá đáng kể (ít nhất là trong thế giới của tôi). http://en.wikipedia.org/wiki/WGS84 –
Đó là sự thật. Bạn thực sự có thể cần phải tính toán các tuyến đường tròn lớn. –
Có, tôi biết, nhưng xấp xỉ là OK cho trường hợp của tôi. Theo như tôi biết độ lệch lớn nhất quanh xích đạo do xoay vòng trái đất. – puls200