首頁 資料庫 mysql教程 ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题

ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题

Jun 07, 2016 pm 03:44 PM
oracle 發布

环境: ArcGIS Desktop10.2 ArcGIS Server 10.2 ArcSDE10.2 Oracle 11.2.0.3 问题描述:根据ArcGIS10.2 的新特性,ArcGIS Server10.2可以发布原生的数据库存储的Feature Service。也就是说,我可以发布在没有任何ArcSDE环境下的使用Oracle Spatial存储的数据

环境:

ArcGIS Desktop10.2

ArcGIS  Server 10.2

ArcSDE10.2

Oracle 11.2.0.3


问题描述:根据ArcGIS10.2 的新特性,ArcGIS Server10.2可以发布原生的数据库存储的Feature Service。也就是说,我可以发布在没有任何ArcSDE环境下的使用Oracle Spatial存储的数据的Feature Service,直接编辑Oracle Spatial数据。但是我发布完相关服务,可以进行数据删除,在进行新增数据的时候没有反应。查看浏览器的F12信息,

报:Rowbuffer creation failed.

ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题


但是,通过ArcGIS10.2连接非ArcSDE环境的数据库,也可以创建Oracle Spatial存储的数据,这个数据发布Feature Service 编辑数据没有任何问题。

ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题

帮助上如下所示:

http://resources.arcgis.com/en/help/main/10.2/index.html#/What_s_new_in_ArcGIS_10_2/016w0000005s000000/

Publishing feature services from databases
Prior to 10.2, you could only publish a map service with feature access enabled (a feature service) to ArcGIS Server if the database contained a geodatabase. At 10.2, you can publish editable feature services from supported database management systems. See the ArcGIS database management system requirements for a list of supported databases and spatial data types.


Beginning with ArcGIS 10.2, you should use ArcGIS Server feature services to publish data from a database rather than using ArcGIS Spatial Data Server feature services, as these have been deprecated.
登入後複製

延伸阅读:

也就是说,我在不用安装ArcSDE库的情况下,可以使用ArcGIS Server10.2发布Oracle(Oracle Spatial)、SQLServer(Geometry、Geography)、PostgreSQL(PostGIS Geometry)存储的Feature Service。


非常纳闷,这本来是ArcGIS10.2的新特性,怎么就不能编辑呢?


经过N天的沟通和研究,我发现了一个问题。而问题出在我自己的数据上。

我的Oracle有两个实例,一个实例安装了SDE库,另一个实例就是一个非SDE库的环境,我构造的Oracle Spatial数据,是使用ArcGIS Desktop连接SDE库,创建了SDO_Geometry的要素类,然后通过Oracle的EXP/IMP的方法导入到非SDE库,这样也能达到模拟Oracle Spatial数据存储的环境,但是正是这个数据导致了相关问题。


首先我们看一下原生的Oracle Spatial数据的结构:

SQL> desc  MDSYS.SDO_GEOMETRY
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 SDO_GTYPE                                          NUMBER
 SDO_SRID                                           NUMBER
 SDO_POINT                                          MDSYS.SDO_POINT_TYPE
 SDO_ELEM_INFO                                      MDSYS.SDO_ELEM_INFO_ARRAY
 SDO_ORDINATES                                      MDSYS.SDO_ORDINATE_ARRAY
登入後複製

--------------------------------------------------------------------------------------------

Blog:               http://blog.csdn.net/linghe301
Weibo:            http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------


但是,在SDE环境下,通过桌面创建的Oracle Spatial数据的结构
SQL> desc wgs_p
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 OBJECTID                                  NOT NULL NUMBER(38)
 SHAPE                                              MDSYS.SDO_GEOMETRY
 SE_ANNO_CAD_DATA                                   BLOB
登入後複製


ArcGIS不光创建了MDSYS.SDO_GEOMETRY以外,还创建了一个SE_ANNO_CAD_DATA字段。


Tips:如果存储 CAD 和注记属性,则会向业务表中添加一个附加列。
SDO_GEOMETRY 类型无法存储 ArcGIS 存储必定支持的所有类型的几何元素。当需要存储这些元素时(由创建要素类时所指定的几何类型标记决定),ArcGIS 会向业务表中添加名为 SE_ANNO_CAD_DATA 的列。

每当 ArcGIS 检测到数据源中含有 CAD 数据时,ArcGIS 就会将 CAD 数据的简单几何表示写入 SDO_GEOMETRY 值中并将未修改的 CAD 数据写入 SE_ANNO_CAD_DATA 值中。如果数据源中不含 CAD 数据,ArcGIS 会将 SE_ANNO_CAD_DATA 值设置为 NULL。SE_ANNO_CAD_DATA 属性包含来自大量 ArcGIS 组件的数据:

  • 来自 ArcSDE CAD 客户端的 AutoCAD 或 MicroStation 数据 
  • 来自 ArcMap 的三次样条和贝塞尔曲线等参数对象 
  • 来自 ArcGIS Spatial Analyst 扩展模块的表面片 

我尝试是否是这个字段导致的问题,进行相关测试,该字段并不是导致该问题的原因。


而且我还发现,使用桌面在SDE环境下创建的带有Oracle Spatial存储的表的结构是

-- Create table
create table SDO
(
  OBJECTID         INTEGER not null,
  SHAPE            MDSYS.SDO_GEOMETRY,
  SE_ANNO_CAD_DATA BLOB
)
tablespace SDE
  pctfree 0
  initrans 4
  maxtrans 255;
-- Create/Recreate indexes 
create unique index R95_SDE_ROWID_UK on SDO (OBJECTID)
  tablespace SDE
  pctfree 0
  initrans 4
  maxtrans 255;
登入後複製
使用桌面,在非SDE环境下创建的Oracle Spatial存储的要素类的结构是
-- Create table
create table AAB
(
  OBJECTID INTEGER not null,
  SHAPE    MDSYS.SDO_GEOMETRY
)
tablespace ESRI
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Add comments to the columns 
comment on column AAB.OBJECTID
  is 'ESRI auto-incrementing';
-- Create/Recreate primary, unique and foreign key constraints 
alter table AAB
  add primary key (OBJECTID)
  using index 
  tablespace ESRI
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
登入後複製
我曾经试图去比较两者的区别,但是感觉有深层次的差别,其实是没有找到具体原因。


也就是说,非SDE环境下(ArcGIS Desktop或者SQL语句)创建的OracleSpatial存储的数据可以发布要素服务,而且可以编辑,但是在SDE环境下发布的要素类,将该表迁移到非SDE环境下发布Feature Service服务,编辑就报错。


最后,解决方法:使用该功能,建议在非SDE环境下直接创建,而不能是其他迁移过来的数据。

--------------------------------------------------------------------------------------------

Blog:               http://blog.csdn.net/linghe301
Weibo:            http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------


其他扩展:关于Oracle Spatial

将数据以Oracle Spatial进行存储,Oracle也有一个关于投影的系统表,还有一个管理这些空间数据的系统表。


关于空间数据系统表

 将 SDO_GEOMETRY 列添加到业务表时,它还会将所需的 Oracle Spatial 元数据记录添加到 USER_SDO_GEOM_METADATA 视图。此元数据包括表名称、SDO_GEOMETRY 列名称、空间参考 ID 和坐标维度信息。

ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题

关于投影的系统表,可以查看MDSYS.CS_SRS,相关的SRID信息必须在该表里面,如果没有,你的数据显示就会有相关问题。

ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题


关于Oracle Spatial的空间索引:

数据库中有好多的MDRT打头的表,而这些表的字段都是一样的,那这些表是做什么用呢?


MDRT_$: 用来存储与空间索引相关的信息。这些表与常规表不一样,不能做复制,删除,新建等。如果对这些表进行操作后,会导致其对应的空间索引无效,因此必须重新将该索引删除重建。
    SQL> ALTER TABLE MDRT_1F89F$ MOVE STORAGE(INITIAL 1M) ;
            ALTER TABLE MDRT_1F89F$ MOVE STORAGE(INITIAL 1M)
           ORA-30967: 不允许在路径表上直接执行操作
具体如下:


    不应当将MDRT表从一个表空间移动到另一个表空间:如果这样做,相应的空间索引将不可用,所有基于表索引的空间操作符都将失效。在这种情况下,恢复的唯一方法就是删除并重建空间索引。为了避免这些问题,应确保数据库管理员知道这个限制并在执行一些优化时不要移动MDRT表。可以在创建空间索引时使用tablespace参数来指定MDRT表需要的表存储空间。
    
    不应该删除/修改MDRT表或MDRS序列:当它们与任何空间索引都不关联时(在正常的情况下,这种情况是不能发生的),可以删除它们。可以通过检查USER_SDO_INDEX_METADATA视图来确定所有的MDRT表与用户的空间索引是否相关联。
  SQL> SELECT sdo_index_name, sdo_index_table, sdo_rtree_seq_name  FROM USER_SDO_INDEX_METADATA; 


    不应当显式地导出MDRT表:当导入一个表时,如含有空间索引的customers表,相应的空间索引信息同样被导出。在导入的过程中,空间索引(和相应的MDRT表)将被重建。不需要导入或导出任何MDRT表(或MDRS序列)。


    不应当将MDRT表复制到一个复制型数据库中:如果想复制一个用户表,如customers表,所有你要复制的就是那个customers表。你需要显式地在复制实例上创建空间索引。
 

--------------------------------------------------------------------------------------------

Blog:               http://blog.csdn.net/linghe301
Weibo:            http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

oracle打不開怎麼辦 oracle打不開怎麼辦 Apr 11, 2025 pm 10:06 PM

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

oracle游標關閉怎麼解決 oracle游標關閉怎麼解決 Apr 11, 2025 pm 10:18 PM

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

oracle怎麼循環創建游標 oracle怎麼循環創建游標 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

oracle數據庫怎麼停止 oracle數據庫怎麼停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

HDFS配置CentOS需要哪些步驟 HDFS配置CentOS需要哪些步驟 Apr 14, 2025 pm 06:42 PM

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

oracle日誌寫滿怎麼辦 oracle日誌寫滿怎麼辦 Apr 12, 2025 am 06:09 AM

Oracle 日誌文件寫滿時,可採用以下解決方案:1)清理舊日誌文件;2)增加日誌文件大小;3)增加日誌文件組;4)設置自動日誌管理;5)重新初始化數據庫。在實施任何解決方案前,建議備份數據庫以防數據丟失。

甲骨文在商業世界中的作用 甲骨文在商業世界中的作用 Apr 23, 2025 am 12:01 AM

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

oracle動態sql怎麼創建 oracle動態sql怎麼創建 Apr 12, 2025 am 06:06 AM

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。

See all articles