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

Cách lấy vĩ độ và độ dài từ sdo_geometry trong oracle

Ký hiệu bạn hiển thị không phải là ký hiệu tốt nhất để biểu diễn các điểm 2D hoặc 3D đơn lẻ. Cách phổ biến và hiệu quả nhất để mã hóa những điểm đó là:

SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(51.702814,32.624736,NULL),NULL,NULL)

Tất cả các công cụ GIS tôi đã thấy đều sử dụng ký hiệu này. Cái bạn hiển thị cũng hợp lệ - nó chỉ sử dụng thêm dung lượng. Nhưng hai ký hiệu hoàn toàn tương đương về chức năng.

Sử dụng ký hiệu nhỏ gọn, việc lấy ra các tọa độ riêng lẻ là việc làm nhỏ. Ví dụ:xem xét US_CITIES chứa điểm trong ký hiệu nhỏ gọn ở trên:

select c.city, c.location.sdo_point.x longitude, c.location.sdo_point.y latitude 
from us_cities c where state_abrv='CO';

CITY                                        LONGITUDE   LATITUDE
------------------------------------------ ---------- ----------
Aurora                                     -104.72977  39.712267
Lakewood                                   -105.11356    39.6952
Denver                                     -104.87266  39.768035
Colorado Springs                            -104.7599    38.8632

4 rows selected.

Nhận được cùng một kết quả từ ký hiệu dựa trên mảng phức tạp hơn mà bạn sử dụng phức tạp hơn. Bạn có thể sử dụng phương pháp SDO_UTIL.GETVERTICES. Ví dụ:giả sử US_CITIES_A chứa các điểm giống nhau nhưng ở ký hiệu dựa trên mảng:

select city, t.x longitude, t.y latitude
from us_cities_a, table (sdo_util.getvertices(location)) t
where state_abrv = 'CO';

CITY                                        LONGITUDE   LATITUDE
------------------------------------------ ---------- ----------
Aurora                                     -104.72977  39.712267
Lakewood                                   -105.11356    39.6952
Denver                                     -104.87266  39.768035
Colorado Springs                            -104.7599    38.8632

4 rows selected.

Một cách tiếp cận khác mà tôi thực sự thấy đơn giản hơn là chỉ cần xác định một vài hàm đơn giản để trích xuất các giá trị từ mảng:

create or replace function get_x (g sdo_geometry) return number is
begin
  return g.sdo_ordinates(1);
end;
/

create or replace function get_y (g sdo_geometry) return number is
begin
  return g.sdo_ordinates(2);
end;
/

Sau đó, sử dụng các hàm tạo ra cú pháp đơn giản hơn:

select city, get_x(location) longitude, get_y(location) latitude
from us_cities_a
where state_abrv = 'CO';

CITY                                        LONGITUDE   LATITUDE
------------------------------------------ ---------- ----------
Aurora                                     -104.72977  39.712267
Lakewood                                   -105.11356    39.6952
Denver                                     -104.87266  39.768035
Colorado Springs                            -104.7599    38.8632

4 rows selected.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để chuyển đổi một chuỗi ngày thành định dạng ngày trong oracle10g

  2. Tạo dạng xem Pivot trong SQL từ bảng SQL

  3. Bắt lỗi - ORA-01858:một ký tự không phải số được tìm thấy ở vị trí số được mong đợi

  4. Oracle tương đương với gợi ý truy vấn ROWLOCK, UPDLOCK, READPAST

  5. Cách tạo người dùng trong Oracle 11g và cấp quyền