programing

오라클에서 sdo_geometry에서 lat and long으로 이동하는 방법

css3 2023. 9. 12. 20:09

오라클에서 sdo_geometry에서 lat and long으로 이동하는 방법

오라클의 시점에서 지연 및 지연을 방지하려면 어떻게 해야 합니까?

다음과 같은 경우:

MDSYS.SDO_GEOMETRY(2001,4326,NULL,
  MDSYS.SDO_ELEM_INFO_ARRAY(1,1,1),
  MDSYS.SDO_ORDINATE_ARRAY(51.702814,32.624736))

표시된 표기법은 단일 2D 또는 3D 점을 나타내는 데 가장 적합한 표기법이 아닙니다.이러한 점을 인코딩하는 가장 일반적이고 효율적인 방법은 다음과 같습니다.

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

제가 본 GIS 도구들은 모두 이 표기법을 사용합니다.당신이 보여준 것도 유효합니다. 단지 더 많은 스토리지를 사용할 뿐입니다.그러나 두 표기법은 기능적으로 완전히 동등합니다.

콤팩트한 표기법을 사용하면 개별 좌표를 꺼내는 것은 사소한 일입니다.예를 들어, US_CITIES가 위의 콤팩트 표기법에 점을 포함한다고 생각하면 다음과 같습니다.

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.

보다 복잡한 배열 기반 표기법을 사용하면 동일한 결과를 얻을 수 있습니다.SDO_UTIL을 사용할 수 있습니다.GET VERTICES 접근 방식.예를 들어, US_CITIES_A가 동일한 점을 포함하지만 배열 기반 표기법은 다음과 같습니다.

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.

제가 실제로 더 간단하다고 생각하는 또 다른 접근법은 배열에서 값을 추출하기 위해 몇 가지 간단한 함수를 정의하는 것입니다.

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;
/

그런 다음 함수를 사용하면 보다 간단한 구문을 사용할 수 있습니다.

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.

sdo_util.verties를 사용할 수 있습니다.설명서의 예제

SELECT c.mkt_id, c.name, t.X, t.Y, t.id
   FROM cola_markets c,
   TABLE(SDO_UTIL.GETVERTICES(c.shape)) t
   ORDER BY c.mkt_id, t.id;

별칭을 사용하지 않으면 작동하지 않습니다.

geometry_table a에서 a.id , t.x, t.y를 선택합니다(sdo_table.getverts(a.table_column)). 여기서 a.id = 1;

언급URL : https://stackoverflow.com/questions/30908013/how-to-get-lat-and-long-from-sdo-geometry-in-oracle