Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tính khoảng cách giữa hai điểm vĩ độ trong Oracle

select sdo_geom.sdo_distance(
  sdo_geometry(2001, 4326, sdo_point_type(40.0, 10.0, null), null, null),
  sdo_geometry(2001, 4326, sdo_point_type(40.0, 11.0, null), null, null),
  0.01,
  'unit=KM'
) as distance
from dual;

DISTANCE
----------
110.611186

Phép tính Oracle trả về 110,611186 km

Một trên trang web của bạn trả về 111,19 km vì vậy chênh lệch 580 m . Sự khác biệt đó là do máy tính trực tuyến của bạn sử dụng phép toán đơn giản với giả định là hình cầu Earth, trong khi Oracle sử dụng ellipsoidal thích hợp hình dạng của trái đất (hình elip WGS84).

Bạn có thể thấy sự khác biệt trên https://www.fai.org/page/world -distance-máy tính Nếu bạn chọn WGS84 mô hình trái đất (ellipsoid WGS84) thì bạn nhận được kết quả tương tự như Oracle (110.611186562098). Nếu bạn thay đổi nó thành FAI Sphere thì bạn nhận được 111.19492643325476, giống như trình so sánh của bạn.

Khoảng cách chính xác là 110,611 km. Việc tính toán nó với độ lệch 580 m có quan trọng hay không phụ thuộc vào ứng dụng của bạn. Nếu bạn đo khoảng cách ngắn (như km hoặc ít hơn), sai số là không đáng kể. Nhưng đối với đường dài, nó có thể là đáng kể. Ở đây, điều đó có nghĩa là thiếu mục tiêu 1/2 km!

Nó cho thấy tầm quan trọng của việc sử dụng mô hình trái đất chính xác cho những tính toán đó.

CHỈNH SỬA: Và đại diện của Oracle (và hầu như tất cả các công cụ GIS) là kinh độ, vĩ độ . Nếu bạn hoán đổi các con số, sau đó bạn sẽ nhận được kết quả rất khác nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Làm cách nào để xác định tên MỚI của một đối tượng trong kích hoạt SAU KHI thay thế?

  2. Phiên máy chủ ORACLE đã kết thúc do lỗi nghiêm trọng

  3. sự cố khi tạo tiêu đề bằng cách sử dụng spool trong sqlplus

  4. Công cụ để làm việc với các thủ tục được lưu trữ trong Oracle, trong một nhóm?

  5. Tôi cần cài đặt những gì để sử dụng OraOLEDB