关于oracle空间坐标处理

本文主要探讨了在GIS工作中遇到的空间坐标处理问题,包括通过Oracle空间函数和OpenLayer获取空间面积的方法,解决大量坐标导入异常的策略,以及如何读取和处理空间坐标数据。涉及到的关键技术包括Oracle的SDO_GEOMETRY类型、Java的JGeometry库以及SQL操作。

因为最近在做GIS相关的工作,在工作过程中出现了很多的关于对空间坐标处理的问题,下面来记录一下:

一、已知空间坐标数据,获取当前空间坐标数据的面积:

获取空间面积存在两个方面,

一种是java通过oracle的空间函数进行获取

通过oracle空间坐标的:

SDO_GEOM.SDO_AREA函数进行获取。
SDO_GEOM.SDO_AREA(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY       
  [, unit  IN VARCHAR2]      
) RETURN NUMBER;

or

SDO_GEOM.SDO_AREA(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit  IN VARCHAR2]      
) RETURN NUMBER;

函数的使用根据不同参数可以采取不同的使用方式,其中参数geom为空间坐标数据,参数dim为集合维度数组,tol为公差值,unit为单位,一版默认不填写

例如:

select SDO_GEOM.SDO_AREA(geom,0.05) area from tableNmae

第二种是通过将图层进行发布之后,通过openlayer的方式获取

通过openlayer的方式获取面积需要获取到图形的经纬度,然后进行计算,因为我这边使用的是

EPSG:4326,因为我们需要获取的单位是常规的平方米,所以需要进行转化,示例代码:
var sphere = new ol.Sphere(6378137);
console.log(Math.abs(sphere.geodesicArea(feature.getGeometry().getCoordinates()[0])));

二、对于空间坐标可能会出现坐标值很多的情况,通过直接导入的方式会出现异常,所以我们需要将空间坐标进行一个转化,在进行导入:

DECLARE geom mdsys.sdo_geometry; BEGIN geom :=  mdsys.sdo_geometry(2003,4326,null,sdo_elem_info_array(1,1003,1),sdo_ordinate_array(121.71358318910205,31.382628846679829,121.71149355855012,……121.71358318910205,31.382628846679829));EXECUTE IMMEDIATE 'UPDATE TABLENAME set GEO_ = :gm WHERE IDOLD=405' USING geom; END; 

将空间坐标的值伪装成函数进行存储,这样就可以实现

三、空间坐标的读取

当我们需要将空间坐标读取,需要对空间坐标进行处理的时候:我们首先通过sql读取出来的数据是

STRUCT geom = (STRUCT)map.get("GEOM");   --STRUCT  是jdbc-driver的类

然后再通过JGeometry读取STRUCT的数据

JGeometry jg = JGeometry.load(geom);

通过JGeometry我们可以获取到空间数据的坐标,及坐标系等信息

double[] jgArr = jg.getOrdinatesArray();--获取空间坐标系坐标
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值