日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle数据类型查询,Oracle 空间查询, 数据类型为 sdo_geometry

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。