2010年12月1日 

终于搞定了shp到oracle spatial,说下步骤和感受吧!

1 XP系统:转换工具的下载(shp2sdo.exe );下载后把此文件复制到PATH变量包含的目录下(E:\oracle\product\10.2.0\db_1\BIN)
    unix系统:ftp ip 回车;输入用户名密码;cd /oracle/product/10.2.0/db_1/bin;put 直接将本机文件拖到命令窗口 回车
2 将要转的shp文件放到某个目录下(F:\SHP_DATA)
3 在dos下执行以下命令
  C:\Documents and Settings\administrator>cd f:\shp_data
  C:\Documents and Settings\administrator>f:
  F:\SHP_DATA>  转入放置shp数据的目录
  F:\SHP_DATA>shp2sdo shp_data oper_data -i id -s null -g GEOMETRY -d

运行完该命令后自动生成了
  oper_data.sql和oper_data.ctl
  备注:

    shp_data:要导入的shp图层的名称;
    oper_data :导入Oracle后该数据存放的表名;

-i id_colum指定id序列列,默认是id,即作为生成数据的唯一性标志;

-s 指定生成srid(即采用什么坐标),默认是null(虽默认为null,导入后值是0,因此要注意将插入的元数据表的该条记录的srid更新为null,否则0值在MDSYS.CS_SRS表中没有记录,在后面会出错);

-g  geometry column指定sdo_geometry,默认是GEOM;

-d 代表含义是将分解后的 ctl文件(控制文件)和data文件(数据存储文件)合并到一个文件,数据存储和控制都在ctl一个文件中,

如果没有该选项,则会有单独的data文件生成,即ctl文件(控制文件)和data文件(数据存储文件);

4 F:\SHP_DATA>sqlplus dd/xxx@oracl  --登陆数据库

SQL> @F:\SHP_DATA\oper_data.sql  --创建表并注册到USER_SDO_GEOM_METADATA

SQL> quit --退出数据库

5 F:\SHP_DATA>sqlldr dd/xxx@oracl oper_data --导入数据 (sqlldr即sql loader工具)

6 然后升级数据到当前oracle版本:对polygon类型是必须的 

SQL> execute sdo_migrate.to_current('oper_data');

7 创建空间索引 注意oper_data该记录在USER_SDO_GEOM_METADATA表中的srid为null

UPDATE OPER_DATA a SET a.geom.SDO_SRID =NULL;

UPDATE USER_SDO_GEOM_METADATA SET SRID = NULL where table_name='OPER_DATA';

CREATE INDEX INDEX_OPER_DATA_SPATIAL ON OPER_DATA(GEOMETRY)INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS('LAYER_GTYPE=POLYGON') NOPARALLEL;

中间出现的一些问题:

1、第一次导后,我想创建空间索引,但是却提示:ora-29879:使用同一个索引类型无法再列表上创建多个域索引

一查原来该表的geom字段已经有了空间索引(以为是导入数据后自动创建了空间索引,但是我第二次转的时候却可以成功创建空间索引,不知何故)

2、在shp转oracle spatial的时候,在该命令中 F:\SHP_DATA>shp2sdo shp_data oper_data -i id -s null -g GEOMETRY -d 我设-s为null,是不是null默认是0?所以创建空间索引的时候会提示srid为0的在MDSYS.CS_SRS表srid没有0值;而更新oper_data这个表的任何字段都出现错误:ora-29861:域索引标记为loading/failed/unusab

做如下更新后UPDATE USER_SDO_GEOM_METADATA SET SRID = NULL where table_name='OPER_DATA';  空间索引和表都可以更新了。

原因分析:导致OPER_DATA该表无法更新是因为该表的空间索引创建的问题,因为在最开始shp转oraclespatial的时候,对于srid值(坐标系统值,因为上海的坐标系统比较特殊,所以我就将该值设为null)设为了null,而null在数据库里面默认为了0,而0值在MDSYS.CS_SRS表又没有这个定义,所以导致了这样的错误

因此如果想设srid为0,那么直接不要指定-s参数,这样就会默认为空,如果指定了-s null那么数据库会默认为srid为0.

shp转oracle spatial的更多相关文章

  1. Oracle Spatial导入shp数据

    现在开始尝试用oracle spatial管理空间数据,刚学会shp数据的导入,总结如下.oracle11g安装后,已经有了oracle spatial组件,我们只需要用shp2sdo.exe工具,就 ...

  2. 简析将shp导入Oracle并利用geoserver将导入的数据发布

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.环境准备 1.1 软件准备 首先要安装有支持空间数据的Oracle ...

  3. Oracle Spatial中SDO_Geometry详细说明[转]

    在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...

  4. Oracle Spatial中SDO_Geometry说明

    Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...

  5. Oracle Spatial操作geometry方法

    Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...

  6. Oracle spatial抽稀函数(SDO_UTIL.SIMPLIFY)

    在使用Oracle spatial做空间查询和展示时,经常会遇到展示或者查询过慢,这时候我可以通过空间数据抽稀来优化查询展示效率. 在Oracle spatial中的抽稀函数为:SDO_UTIL.SI ...

  7. Oracle spatial 空间修正函数(SDO_UTIL.RECTIFY_GEOMETRY)

    Oracle spatial有个空间修正函数SDO_UTIL.RECTIFY_GEOMETRY,它可以修复以下可能:a.重复节点 b.自相交 c.坐标串朝向不正确. 该函数的构造函数格式: SDO_U ...

  8. Oracle Spatial GIS相关研究

    1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...

  9. C#读取Oracle Spatial的sdo_geometry

    oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...

随机推荐

  1. 我搞zabbix的那两天(1)

    摘要:在生产环境上对服务器进行网络参数(比如CPU.内存等)的监控是很必要的,比如当服务器网络参数如内存不够用.磁盘空间快要占满时及时通知运维人员进行处理,保证服务器系统的安全.而zabbix就是这么 ...

  2. Docker swarm 实战-部署wordpress

    Docker swarm 实战-部署wordpress 创建一个overlay的网络 docker network create -d overlay demo 6imq8da3vcwvj2n499k ...

  3. weex stream 之fetch的get、post获取Json数据

    无论何种平台,网络数据的获取都是十分重要的,最近学习weex,不可避免的要学习weex的数据请求方法了.网址 个人感觉,weex stream相较于其他平台,还算比较简单了,但是由于文档以及官方代码中 ...

  4. 【JVM】2、JVM调优总结

    转自:http://unixboy.iteye.com/blog/174173/ 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内 ...

  5. Access to XMLHttpRequest at 'XXX' from origin 'XX' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present o AJAX跨域请求解决方法

    今天出现了一个问题找了好久先看代码: 这可能是个BUG吧插入代码: dataType: 'jsonp', crossDomain: true, 最终:

  6. 还是畅通工程(hdu1233)并查集应用

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. 盒子模型的margin负数用法

    盒子的margin用法大家都应该很清楚,在实际中一般使用margin来水平居中或者让自己移动相应的位置,但是margin给负数在实际中也是有用的. 如图为两个浮动的盒子. 给左边的盒子margin-l ...

  8. 解决访问 jar 包里面的字体报错:OTS parsing error: incorrect file size in WOFF header

    前言:jar 包里面的字体加载,浏览器 console 中报警告信息,这里记录一下解决方案. 附:自己的一个 jar 包源码 https://github.com/yuleGH/querydb 错误问 ...

  9. js-ES6学习笔记-变量的解构赋值

    1.ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 2.ES6允许写成:let [a,b,c] = [1,2,3];上面代码表示,可以从数 ...

  10. 数据分析-kaggle泰坦尼克号生存率分析

    概述 1912年4月15日,泰坦尼克号在首次航行期间撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难.沉船导致大量伤亡的原因之一是没有足够的救生艇给乘客和船员.虽然幸存下来有一些运气因素,但 ...