使用sql语句向SDO_Geometry插入要素

环境描述:

使用ArcGIS10.1直连数据库,以SDO_Geometry导入Featureclass,注册数据库,发布动态服务。

js(arcgis api for js + dojo + .net)添加地图服务,.net后台使用sql语句向图层插入要素。

问题:

原插入语句

insert into GDDBJB (OBJECTID,SHAPE) values (sde.gdb_util.next_rowid('fruitmanagesde','GDDBJB'),MDSYS.SDO_GEOMETRY(2003,2363,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(39563026.8692193,4040154.89189684,39564019.0587037,4037059.26070558,39563026.8692193,4040154.89189684)));  

执行后,图层中确实有插入,web端刷新地图也显示出新要素,但无法查询其属性,js使用identify也无法识别到新的要素。


问题探寻:

使用arcgis在插入或更新数据时,会进行几何验证。如果使用 ArcGIS 客户端以外的方法(如 SQL)插入或更新几何,则插入或更新 SDO_GEOMETRY 值时,Oracle Spatial 本身不会自动强制执行几何验证。在 Oracle 10g 中,如果使用 ArcGIS 客户端以外的方法(如 SQL)插入或更新几何,则插入或更新 SDO_GEOMETRY 值时,Oracle Spatial 本身不会自动强制执行几何验证。在 Oracle 11g 中,Oracle Spatial 在插入索引时验证几何。如果将不合法的或格式设置不正确的几何值传送到 ArcGIS 客户端应用程序,就会产生问题。为减少这些潜在问题的出现次数,应该验证通过除了 ArcGIS 应用程序之外的任何其他方法创建或更改的所有几何。(本部分参考自http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//002n0000006s000000)

Oracle 的 VALIDATE_GEOMETRY_WITH_CONTEXT 使用 Oracle 的 shape 验证规则检查几何。使用VALIDATE_GEOMETRY_WITH_CONTEXT 验证几何发现,使用sql插入的要素查询结果为

查询语句:select SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(shape,0.0001) from GDDBJB where FBFWBH='FB37120201';

使用sql语句向SDO_Geometry插入要素_第1张图片

发现,使用arcgis,load入库的数据,检查结果为true,而使用sql插入的数据,结果为 13367 [Element <1>] [Ring <1>] 。

解决方法:

使用oracle spatial的空间修正函数,SDO_UTIL.RECTIFY_GEOMETRY,它可以修复以下可能:a、重复节点 b、自相交 c、坐标串朝向不正确。

修改后的sql语句:

insert into GDDBJB (OBJECTID,SHAPE) values (sde.gdb_util.next_rowid('fruitmanagesde','GDDBJB'),

SDO_UTIL.RECTIFY_GEOMETRY(MDSYS.SDO_GEOMETRY(2003,2363,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
MDSYS.SDO_ORDINATE_ARRAY(39563026.8692193,4040154.89189684,39564019.0587037,4037059.26070558,39561359.9908855,4039877.07884122,39563026.8692193,4040154.89189684)),0.005))

你可能感兴趣的:(arcgis开发js,arcgis操作问题)