发表用户:讨论贴
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=13&ID=10269
信息原始来源:James MapInfo技术论坛

文章标题:自己建oracle表,导入空间数据的问题

zhenglipin

  我自己的语句如下:
1:建立表
create table roads
( name   varchar2(42),
  MI_PRINX number,
   GEOLOC mdsys.sdo_geometry);
2
INSERT INTO MAPINFO_MAPCATALOG(
SPATIALTYPE,TABLENAME,OWNERNAME,SPATIALCOLUMN,DB_X_LL,DB_Y_LL, DB_X_UR,
 DB_Y_UR,COORDINATESYSTEM, SYMBOL,XCOLUMNNAME, YCOLUMNNAME,RENDITIONTYPE, RENDITIONCOLUMN)
  values (13.1,'roads','system','geometry',-130,-30,400,300,'earth projection 1,0','symbol(35,0,12)','no_column','no_column',null,null);


  INSERT INTO user_sdo_geom_metadata 
 values ('roads','geometry', mdsys.sdo_dim_array
(mdsys.sdo_dim_element('x',-180,180,0),mdsys.sdo_dim_element('y',-90,90,0)),1);
3
create index rtree_index on roads(geoloc) indextype is MDSYS.SPATIAL_INDEX;
4
insert into roads values('short street',null,
 mdsys.sdo_geometry(2002,8307,mdsys.SDO_POINT_TYPE(0, 0, NULL),
mdsys.sdo_elem_info_array(1,2,1),mdsys.sdo_ordinate_array(10,10,10,15,15,15)));

问题如下,如果 3,4 建立成功,则插入数据失败
错误代码如下:
*
ERROR 位于第 1 行:
ORA-29875: 无法执行 ODCIINDEXINSERT 例行程序
ORA-13365: 层 SRID 与几何对象 SRID 不匹配
ORA-06512: 在"MDSYS.SDO_INDEX_METHOD_9I", line 319
ORA-06512: 在line 1

如果不建立索引即没有做第3步。直接作第4步,插入数据成功,但是第四步,不能建立索引,错误如下
ERROR 位于第 1 行:
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-13249: internal error in Spatial index: [mdidxrbd]
ORA-13249: Error in Spatial index: index build failed
ORA-13249: Error in spatial index: [mdrcrtxfergm]
ORA-13249: Error in spatial index: [mdpridxtxfergm]
ORA-13200: 空间索引建立中出现内部错误 [ROWID:AAAHePAABAAAMoSAAB]
ORA-13206: 创建空间索引时出现内部错误 []
ORA-13365: 层 SRID 与几何对象 SRID 不匹配
ORA-06512: 在"MDSYS.SDO_INDEX_METHOD_9I", line 7
ORA-06512: 在line 1

我在百般无奈之下,这样做了。使用easyloader上载了一个表test。主要是线。
然后,把我的数据插入到这个表中。
insert into test values('short street',null,
 mdsys.sdo_geometry(2002,8307,mdsys.SDO_POINT_TYPE(0, 0, NULL),
mdsys.sdo_elem_info_array(1,2,1),mdsys.sdo_ordinate_array(10,10,10,15,15,15)));

然后在mapx上显示成功!这就是借鸡生蛋的无奈做法。请指教!盼望答复!

wtusmchen

  我在百般无奈之下,这样做了。使用easyloader上载了一个表test。主要是线。
然后,把我的数据插入到这个表中。
-----------------
呵呵,我都是这么做的,最简单了^_^

James.Liu

  老陈说的办法最省事

你如果一定要自己插入表的话,你需要在mdsys.coordsys表中找你用的坐标系所对应的SRID,并且保证在user_sdo_geom_metadata 中记录的图层元数据SRID和你插入的图元用到的坐标系一致

zhenglipin

是srid的问题,已解决