oracle数据类型查询,Oracle 空间查询, 数据类型为 sdo_geometry
數據:通過arcgis直連數據庫,導入測試數據,導入時數據類型選擇SDO_GEOMETRY。
測試數據包含點線面,點數據MAP_USER_POINT,?線數據MAP_USER_LINE,面數據MAP_USER_POLY。在arcmap中顯示如下:
創建存儲過程?添加幾何要素
創建函數??創建?幾何要素
create or replace FUNCTION FUN_CreateGeometry
( wkt IN VARCHAR2
,srid IN NUMBER
) RETURN sdo_geometry AS
BEGIN
RETURN SDO_GEOMETRY(wkt,srid);
END FUN_CreateGeometry;
創建存儲過程?向矢量表插入要素
create or replace
PROCEDURE AddNEWPOINT(
OBJECTID IN NUMBER
WKT IN VARCHAR2
,SRID IN NUMBER
) AS
v_Return SDO_GEOMETRY;
BEGIN
v_Return := FUN_CREATEGEOMETRY(
WKT => WKT,
SRID => SRID
);
INSERT INTO MAP_USER_8332(OBJECTID, SHAPE)
VALUES
(OBJECTID, v_Return);
END AddNEWPOINT;
調用存儲過程創建幾何,注意srid必須一致
Oracle SQL Developter中調用:
DECLARE
OBJECTID NUMBER;
WKT VARCHAR2(200);
SRID NUMBER;
BEGIN
OBJECTID := 100;
WKT := ‘POINT (118.731963311458 32.0661417793197) ‘;
SRID := 4326;
ADDNEWPOINT(OBJECTID, WKT, SRID);
END;
Sql plus中調用:
EXECUTE ADDNEWPOINT(1,’POINT(118 32)’, 4326)
Commit
空間查詢
Sql語句給定要素500緩沖區之內的要素,可變部分為輸入要素wkt(點,線,面),查詢圖層,緩存距離,示例如下:
創建包,定義一個cursor
CREATE OR REPLACE
PACKAGE PACKAGE_GEOMETRY AS
TYPE GEOMETRY_CURSOR IS ref cursor;
/* TODO enter package declarations (types, exceptions, methods etc) here */
END PACKAGE_GEOMETRY;
創建存儲過程,返回查詢結果cursor
create or replace
PROCEDURE SEARCHGEOMETRY(
WKT VARCHAR2
,SRID NUMBER
,buflength VARCHAR2
,p_cursor in out PACKAGE_GEOMETRY.CURSOR_GEOMETRY) AS
srarch_geom SDO_GEOMETRY;
bufferCondition VARCHAR2(35);
BEGIN
srarch_geom := FUN_CREATEGEOMETRY(
WKT => WKT,
SRID => SRID
);
bufferCondition := ‘distance=‘ || buflength;
open p_cursor for SELECT c_c.objectid,c_c.NAME OBJNAME? FROM? MAP_USER_0000008332 c_c
WHERE SDO_WITHIN_DISTANCE(c_c.SHAPE, srarch_geom, bufferCondition) = ‘TRUE‘;
END SEARCHGEOMETRY;
調用存儲過程查詢要素
Oracle SQL Developter或plSql中調用:
DECLARE
BUFLENGTH VARCHAR2(25);
WKT VARCHAR2(200);
SRID NUMBER;
RESULT_CUR PACKAGE_GEOMETRY.CURSOR_GEOMETRY;
OBJECTID NUMBER;
OBJNAME VARCHAR2(200);
BEGIN
WKT := ‘POINT (118.731963311458 32.0661417793197) ‘;
SRID := 4326;
BUFLENGTH := ‘500‘;
SEARCHGEOMETRY(WKT, SRID,BUFLENGTH, RESULT_CUR);
loop
fetch RESULT_CUR
into OBJECTID,OBJNAME;
exit when RESULT_CUR%notfound;
dbms_output.put_line(OBJECTID);
dbms_output.put_line(OBJNAME);
end loop;
CLOSE RESULT_CUR;
END;
空間查詢測試
查詢點周圍500米內的點數據
選取點數據內某一個點獲取其wkt坐標:
SELECT CC.SHAPE.GET_WKT() FROM MAP_USER_POINT CC WHERE CC.NAME=‘湖心花園‘
POINT (118.748698730662 32.035395102502)
修改SEARCHGEOMETRY內查詢的表名為MAP_USER_POINT,
查詢結果:
8
車站小區
9
文體西村
7
蓓蕾小區
11
迎賓村
10
茶亭村
12
湖心花園
19
園中園公寓
Arcmap查詢結果:
Plsql查詢結果與arcmap查詢結果一致。
查詢點周圍500米內的線數據
選取點數據內某一個點獲取其wkt坐標:
SELECT CC.SHAPE.GET_WKT() FROM MAP_USER_POINT CC WHERE CC.NAME=‘萬科金色家園‘
POINT (118.759385095746 32.0420345318682)
修改查詢參數wkt為’?POINT (118.759385095746 32.0420345318682)’,?修改存儲過程SEARCHGEOMETRY內查詢的表名為MAP_USER_LINE。
查詢結果:
線段2被選中,arcmap中做該點的緩沖區查詢,線段2被選中。修改查詢緩沖區大小為700米,線段2、3被選中。
Plsql查詢結果與arcmap查詢結果一致。
查詢點周圍500米內的面數據
選取點數據內某一個點獲取其wkt坐標:
SELECT CC.SHAPE.GET_WKT() FROM MAP_USER_POINT CC WHERE CC.NAME=‘名湖雅居‘
POINT (118.759724313726 32.0354580244683)
修改查詢參數wkt為’?POINT (118.759724313726 32.0354580244683)’,?修改存儲過程SEARCHGEOMETRY內查詢的表名為MAP_USER_POLY。
查詢結果:
2
face2
6
face6
7
face7
面2、6、7被選中,arcmap中做該點的500米緩沖區查詢,面2、6、7被選中。
Plsql查詢結果與arcmap查詢結果一致。
查詢線周圍500米內的點數據
選取線數據內某一條線段獲取其wkt坐標:
SELECT CC.SHAPE.GET_WKT() FROM MAP_USER_LINE CC WHERE CC.NAME=‘line3‘
查詢所得wkt:
LINESTRING (118.763605759798 32.0391445982447, 118.763755695669 32.0386259340397, 118.763874074329 32.0381089704527, 118.763949962721 32.0377700573423, 118.764039433573 32.0374028695468, 118.764145034666 32.0369562671181, 118.764232941597 32.0365690568166, 118.76430597554 32.0362041074337, 118.764344298351 32.0359930356501, 118.764388237427 32.0357066978059, 118.764487386784 32.0350466349943, 118.764565439843 32.0345753407794, 118.76460084975 32.0343352406788, 118.764633191169 32.0341192388119, 118.764646064065 32.0339927329783, 118.764660872302 32.0337829885941, 118.764663602643 32.0336185295715, 118.764666619869 32.0334691063143, 118.764654318942 32.0330732652191, 118.764633596763 32.032851987929, 118.764589327635 32.0325688795502, 118.764551264729 32.0323638844857, 118.764504484694 32.0321339440263, 118.764435108294 32.0317689748584, 118.764351598148 32.0313420450993, 118.764308733761 32.0311321028643, 118.764242330519 32.0307380145478, 118.76422386474 32.0305728504567)
修改查詢參數wkt為上一步查詢到的wkt,修改存儲過程SEARCHGEOMETRY內查詢的表名為MAP_USER_POINT。
查詢結果:
5
碧虹苑
6
草根居
22
君園
23
莫愁東寓小區
24
名湖雅居
25
萬科金色家園
36
羅廊巷2號小區
37
環宇軒小區
38
中興新村
39
止馬營社區
44
陶李王巷新苑
45
漢中苑物管小區
46
漢中苑物管小區
47
止馬村
48
通宇花園
49
韓家苑小區
50
韓家苑小區
在arcmap中通過line3的500米緩沖區查詢點要素,查詢結果如下圖:
Plsql查詢結果與arcmap查詢結果一致。
查詢線周圍500米內的線數據
Plsql查詢結果與arcmap查詢結果一致。
查詢線周圍500米內的面數據
PLSQL?查詢結果:
1
face1
3
face3
6
face6
7
face7
arcmap查詢結果如下圖:
Plsql查詢結果與arcmap查詢結果一致。
Oracle 空間查詢, 數據類型為 sdo_geometry
標簽:end???body???返回???pack???資料???create???method???語句???in out
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴 本文系統來源:https://www.cnblogs.com/telwanggs/p/8440837.html
總結
以上是生活随笔為你收集整理的oracle数据类型查询,Oracle 空间查询, 数据类型为 sdo_geometry的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dw做php怎么做表格透明,DW做的简单
- 下一篇: 特斯拉抛售50亿美元股票 缓解公司未来