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. 【WePY小程序框架实战三】-组件传值

    [WePY小程序框架实战一]-创建项目 [WePY小程序框架实战二]-页面结构 父子组件传值 静态传值 静态传值为父组件向子组件传递常量数据,因此只能传递String字符串类型. 父组件 (paren ...

  2. smtp的host地址

    SMTP是SIMPLE MAIL TRANSFER PROTOCOL的缩写,一般的发信软件,如Outlook Express.FoxMail.Eudora都是使用这个协议进行发信的.SMTP Host ...

  3. java中递归实现复制多级文件夹

    常见的流的用法 递归实现复制多级文件夹 FileInputStream & FileOutputStream String content = null;//用来储存解码后的byte数组 in ...

  4. Java - "JUC" ReentrantReadWriteLock

    Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock ReadWriteLock 和 ReentrantReadWriteLock介绍 ReadWriteLo ...

  5. NIO学习笔记五:Buffer 的使用

    Java NIO中的Buffer用于和NIO通道进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffe ...

  6. javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException PK

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f ...

  7. Onsen UI for React文档

    注:采用ES6+JSX语法 1.开始一个项目 在React中使用Onsen UI 需要首先安装onsenui和react-onsenui模块. 可以使用monaca CLI工具包快速初始化一个应用: ...

  8. [原创]数据驱动决策:BI在零售业的数据化管理

    无论是商业智能时代的应用建设,还是当下大数据时代的数据应用/数据产品建设,行业化.角色化与场景化,均是一个重要的趋势. 当下,许多企业逐步开始具备场景化思维,更为注重用户体验,业务运营更多的围绕用户的 ...

  9. Nginx的日志剖析

    1.访问日志(access.log) Nginx的访问日志就是一个文件,它存储着每个用户对网站的访问请求,这个功能是有ngx_http_log_module模块来负责的,这个文件存在的主要目的就是为了 ...

  10. [Android] 布局优化技巧

    看了一些关于优化布局的资料,了解了很多平时不怎么注意的问题,于是把资料整理了一下,一部分内容是翻译来的,一部分是自己理解加上的.每部分内容都有demo,有些资料里的demo比较好的,我就直接拿来用了: ...