oracle spatial 空间数据学习
程序员文章站
2022-06-13 08:11:27
...
最近项目使用 空间数据库 oracle spatial
--创建测试用表 CREATE TABLE SPATIALTEST ( "ID" VARCHAR2(20) NOT NULL, "NAME" VARCHAR2(100), "ADDRESS" VARCHAR2(200), "TELEPHONE" VARCHAR2(50), "LOCATION" "MDSYS"."SDO_GEOMETRY" ) --创建主键约束 ALTER TABLE "SPATIALTEST" ADD CONSTRAINT "PK_SPATIAL" PRIMARY KEY("ID"); --根据用户表填写空间元数据,创建了点信息,与点信息经纬度最大值,与最小值,与误差范围 INSERT INTO USER_SDO_GEOM_METADATA VALUES( 'SPATIALTEST', 'location', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('Longitude',-180,180,10),---Longitude维最小,最大值和容忍度。 MDSYS.SDO_DIM_ELEMENT('Latitude',-90,90,10)-----Latitude维最小,最大值和容忍度。 ), 4326 ); --建立空间索引 关键 假如不创建空间索引,速度很慢 CREATE INDEX SPATIAL_IDX ON SPATIALTEST(location) INDEXTYPE IS MDSYS.SPATIAL_INDEX --导入测试数据 --1 INSERT INTO SPATIALTEST VALUES ('1', '中油瑞飞', '北京市歌华大厦', '010-123456', MDSYS.SDO_GEOMETRY(2001,--定义的点的代码 4326,--定义的坐标系统代码 MDSYS.SDO_POINT_TYPE(113.3293658, 23.14338586, 0),--定义了点的坐标值 NULL, NULL)); --导入测试数据 --2 INSERT INTO SPATIALTEST VALUES ('2', '山东', '山东省日照市东港区', '010-123456', MDSYS.SDO_GEOMETRY(2001,--定义的点的代码 4326, MDSYS.SDO_POINT_TYPE(113.2932474, 23.11883515, 0), NULL, NULL)); -- 关系查询 select location from spatialtest; select s.location.SDO_POINT.x langtitude from spatialtest s; --空间分析查询(113.2359818,23.16937253)周边十公里信息5条 SELECT B.id id, B.name name, B.dist dist FROM (SELECT A.id id, A.name name, SDO_GEOM.SDO_DISTANCE(A.location, MDSYS.SDO_GEOMETRY(2001, 4326, MDSYS.SDO_POINT_TYPE(113.2359818, 23.16937253, 0), NULL, NULL), 1) dist FROM spatialtest A WHERE SDO_WITHIN_DISTANCE(A.LOCATION, MDSYS.SDO_GEOMETRY(2001, 4326, MDSYS.SDO_POINT_TYPE(113.2359818, 23.16937253, 0), NULL, NULL), 'distance=10000') = 'TRUE' ORDER BY A.name) B WHERE ROWNUM <= 5; -- 空间分析查询(113.2359818,23.16937253)附近的5条信息 SELECT A.id id, A.name name, A.location.SDO_POINT.x langtitude, A.location.SDO_POINT.y latitude, MDSYS.SDO_NN_DISTANCE(1) distance FROM spatialtest A WHERE SDO_NN(A.LOCATION, MDSYS.SDO_GEOMETRY(2001, 4326, MDSYS.SDO_POINT_TYPE(113.2359818, 23.16937253, 0), null, null), 'SDO_NUM_RES=5', 1) = 'TRUE'
上一篇: 猪前蹄和后蹄的区别?酱猪蹄怎么做?
下一篇: 白木耳隔夜可以吃吗?再不知道就晚了!