视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
将shpfiles导入Oracle数据库的方法
2020-11-09 11:47:08 责编:小采
文档

在做GIS工程时,我们经常用到ARCGIS这一GIS领域里最有名的软件,而ARCGIS最常用的文件类型就是shpfiles,它有三种格式的文件组成:

在做GIS工程时,我们经常用到ARCGIS这一GIS领域里最有名的软件,,而ARCGIS最常用的文件类型就是shpfiles,它有三种格式的文件组成:shp、shx和dbf。同时GIS工程需要用到大量地理数据,因此选择良好的数据库也是至关重要的,而Oracle数据库在空间存储和查询方面有很强优势,因此就需要将shpfiles文件导入到oracle数据库里存储。这时问题便来了,oracle不能识别shpfiles文件,因此不能直接将其导入。就此问题我总结了一解决方法,步骤如下:

1.分割数据文件:
首先我们要把shp文件转换分割成oracle可以导入的数据库文件,这个转换可以使用oracle提供的一个现成的工具shp2sdo,下载后把此文件复制到PATH变量包含的目录下,如我的oracle客户端安装后自动注册的环境变量是 path D:\Oracle\product\11.2.0\dbhome_1\BIN;运行shp2sdo,输入shpfiles文件绝对路径(不带扩展名),在输入表名时若不写则生成在原数据文件夹里,若只写文件名(无路径)则生成在oracle默认文件夹里(D:\Oracle\product\11.2.0\dbhome_1\BIN),所以建议输入绝对路径.执行之后生成三个文件ctl,dat,sql(名字跟前面表名一致)。

2.生成表并建立索引:
在DOS运行此命令(或直接打开D:\Oracle\product\11.2.0\dbhome_1\BIN里的sqlplus工具):sqlplus pgg/pgg@orcl
SQL>@[d:\data\name].sql
SQL>CREATE Index [NAME]_idx ON [NAME] (GEOM) INDEXTYPE is MDSYS.SPATIAL_INDEX;
SQL>quit


3.载入数据:
sqlldr scott/[password] control=D:\data\[name].ctl
不行的话修改ctl文件中关于dat文件的路径,要加双引号!

到这里我们已经将shpfiles文件导入到oracle数据库中,可以通过oracle的界面工具developer来查看。

另外还需要建立一个视图,具体作用说不大清楚,但在启动程序发布地图的时候会用到,如果没有此视图文件会出现图层无法map的错误,建立过程如下:

SQL> CREATE OR REPLACE VIEW CS_SRS AS
2 SELECT "CS_NAME","SRID","AUTH_SRID","AUTH_NAME","WKTEXT","CS_BOUNDS"
3 FROM MDSYS.CS_SRS
4 /

另外如果自己手工新建图层的话,过程如下:

DROP TABLE BZXX;

CREATE TABLE BZXX(
GID VARCHAR2(32) NOT NULL,
NAME VARCHAR2(20),
BZNR VARCHAR2(400),
BEIZ VARCHAR2(600),
COOR MDSYS.SDO_GEOMETRY
);

ALTER TABLE BZXX
ADD CONSTRAINT PK_BZXX PRIMARY KEY (GID);

DELETE FROM USER_SDO_GEOM_METADATA
WHERE TABLE_NAME = 'BZXX' AND COLUMN_NAME = 'COOR' ;

INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
VALUES ('BZXX', 'COOR',
MDSYS.SDO_DIM_ARRAY
(MDSYS.SDO_DIM_ELEMENT('X', -180.000000000, 180.000000000, 0.500000000),
MDSYS.SDO_DIM_ELEMENT('Y', -90.000000000, 90.000000000, 0.500000000)
),
8307);
COMMIT;

CREATE INDEX BZXX_GEOM_INDEX ON BZXX(COOR)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS('SDO_INDX_DIMS=2, LAYER_GTYPE=POINT');

下载本文
显示全文
专题