oracle怎么取横纵坐标的值,如何在oracle中从sdo_geometry获取lat和long

您显示的符号不是表示单个2D或3D点的最佳符号.编码这些点的常用且最有效的方法是:

SDO_GEOMETRY(2001,SDO_POINT_TYPE(51.702814,32.624736,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.GETVERTICES方法.例如,假设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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值