用ArcMap在PostgreSQL中创建要素类需要执行”create enterprise geodatabase”吗
问:用Acmap在PostgreSQL中创建要素类需要执行"create enterprise geodatabase"吗?
关于这个问题,是在为新员工做postgresql培训后触发的。我要求他们使用arcmap在postgresql中创建要素类,他们大多数解题思路走错了。思路错了这其实不要紧,要紧的是,我发现他们好多人是在咨询了有经验的同事后选择了错误的解题思路,我比较在意的是有经验的同事对postgis认识的不足。新员工们大多被告知:"你需要执行create enterprise geodatabase"。然而,真的是这样的吗?
首先,非常明确地告诉你:不是的,不需要。
接下来,咱们来细细描述一下这个问题。
1. create enterprise geodatabase到底在干什么?
在不明白它是做什么的时候,最有效的方式就是看官方文档。以下为官方文档的截图:

从官方文档的描述中,可以知道,对于PostgreSQL数据库,该功能主要做3件事:
- 创建database
- 创建geodatabase administrator user 并授权
- 创建geodatabase
估计很多同学会在geodatabase与database这之间产生疑惑?而理解geodatabase恰恰是理解该文档所要阐述问题的关键。那么什么是geodatabase呢?
在描述geodatabase之前,先描述一下database。在PostgreSQL中,database表示一个容器,这个容器可以用来存储表、视图、索引、存储过程等对象。可以把它理解成一间房子,房子里可以放置沙发、冰箱、电视(这些设备就是表、索引等对象)。而geodatabase不是一个容器的概念,它是一个模型的概念。如果把database看成房子,那geodatabase就是装修方案,而且该装修方案是为特定环境设计的装修方案——假设是为生产车间设计的装修方案。为生产车间设计的装修方案规定了房间里需要配置哪些电器设备;规定了设备的摆放放置;规定了墙电的电压与插排的型号等。这么说吧,database是房屋开发商做的事情,geodatabase是装修公司做的事情。
有一家公司,简称E好了(你当然知道我指的是ESRI啦)。它本来不是装修公司,而是卖机床的。它不盖房子,控制不了房子的建筑材料和规格,但它为了让自己的机床在各种房子里都能运转起来,就根据自家机床对环境的要求,制定了一个装修方案,给它取名就叫"ArcSDE Geodatabase"。 "ArcSDE Geodatabase"就是geodatabase的一种具体实现,而机床实际上就是ArcMap或ArcEngine。"create enterprise geodatabase",其实质是将"ArcSDE Geodatabase"模型实例化,也就是创建一个repository(配置库。包含数十张表、视图,以及一些数据类型(ST_GEOMETRY)和存储过程)。如果这一过程还要以装修房子来类比,那就是按照E公司的装修方案,把房子装修出来。
最后,我们可以从实际操作中,来体验一下该过程:

可以看到,arcmap在处理时,只是改变了执行顺序,把创建用户放到了第1步执行,把创建database放到了第2步执行,而具体执行内容与上文所述一致。
那最为关键的第3步,即repository在数据库里是怎么体现的呢?实际上,正如上文所述,包括:repository包括数十张表、视图,以及一些数据类型(ST_GEOMETRY)和存储过程。如下图:

可以看到创建了数十张属主为sde的表、视图,以及序列、存储过程等对象。
2. sde 与 postgis 是什么关系?
可以把SDE看作上文提到的"ArcSDE Geodatabase"模型。
那postgis又是什么呢?
上文说到,E公司不盖房子,它把别人家盖好的房子装修装修,以适应它自己机床的运转使用。房屋开发商与E公司以这种模式合作了一段时间。直到有一天,房屋开发商意识到,为什么我只能给用户(生产车间的承包商)提供半成品的毛坯,为什么必需由E公司介入才能给用户提供服务?我为什么不能直接给用户提供整体的解决方案呢?P公司意识到这个问题,然后设计了postgis装修方案。P公司以后开发的厂房,交付的时候就已经按照postgis的装修方案装修完毕了。不仅如此,在房间里,连车床都已经部署安装完毕,用户打开厂房即可直接生产。
既然postgis也是一个装修方案,那么create postgis 这一过程,也就是在数据库中创建一个postgis repository。而所有的repository,无非就是表、视图,以及一些数据类型和存储过程(存储过程相当于机床)等。在postgresql数据库中实例化postgis,从9.1之后(包括该版本),开始支持以create extension postgis的语法来创建postgis repository。该语法,其底层仍然如9.0之前的版本,是调用一些.sql文件,而这些sql文件里定义了geometry数据类型、元数据表、存储过程等。例如postgis.sql文件中部分内容如下图:

那么,create extension postgis之后,数据库中会有什么变化呢?我们来看看:

可以看到,新增了一些表和视图。其中geometry_columns是要素类的元数据表,spatial_ref_sys是空间参考的字典表。
3. 使用arcmap管理sde与管理postgis有什么差异?
P公司刚刚推出postgis装修方案的时候,E公司说:postgis的装修方案问题太多:例如墙电功率不够、没有安装新风系统等,因此不对自己家的机床进行postgis的相关适配(这就是为什么,早期的时候arcmap不能直接读取、使用以postgis模型存储的数据)。虽然P公司在销售厂房时,连同车床都已经配置好了,但毕竟不是专业做车床的,车床的质量和效率与E公司的车床比仍有差距,所以很多客户仍然需要使用E公司的车床,而E公司的车床要求必须使用E公司的"ArcSDE Geodatabase"装修方案。这就解释了为什么很多数据库明明已经有空间扩展组件,但仍然需要创建SDE库,典型的如Oracle + SDE模式。
随着时间的推移,P公司的用户规模爆炸式增长。与此同时该公司的postgis装修方案也在不断完善,车床质量也在不断提高。E公司审时度势,觉得P公司的用户规模不可小觑,必须考虑相互之间的合作了,于是有意愿地将自家的机床针对postgis做适配了。由于双方的努力,其结果就是使用postgis装修方案,也可以把E公司的机床运转起来了。但这毕竟是相互迁就、非同根生的组合,所以尽管E公司机床运转起来了,但机床的很多高级功能仍然没法实现。
那使用arcmap(E公司的机床)管理postgis到底能实现哪些功能呢?
我们用arcmap分别连接SDE库与postgis库,然后在数据库连接上单击右键,看看两种repository分别支持哪些功能。

新建菜单包括的菜单项有:要素集、要素类、表、视图、栅格目录、栅格数据集、镶嵌数据集等。

新建菜单包括的菜单项仅有:要素类、表、视图。
从以上两图可知,虽然arcmap支持读取postgis配置库,但支持较弱,能够实现的功能较少,不过,创建要素类这一功能是支持的。
回到最初的问题上:"用Acmap在PostgreSQL中创建要素类需要执行create enterprise geodatabase吗"
现在,你可以大声地说了:"不~~~~需~~~~要"
用ArcMap在PostgreSQL中创建要素类需要执行”create enterprise geodatabase”吗的更多相关文章
- ArcGIS创建要素类
在使用ARCGIS软件进行工作时,免不了要建立地理数据库和要素类之类的.一下是我创建文件地理数据库并在数据库中创建要素类写相关步骤: 1.启动软件,可以使用ARCCatalog直接进行创建也可以使用A ...
- 往sde中导入要素类报错000732
sde可以成功连接,可以在Server中注册. 但是向sde中导入要素类报错000732,如图所示. 点击红色圆圈提示 ERROR 000732. 将路径修改为绝对路径即可,如下图所示.
- 在ArcMap 10.3中创建和编辑数据
在ArcMap 10.3中创建和编辑数据 .......待补充 新建 创建一个新文件((Points, Polylines, and Polygons/点.线.多边形)
- GDB中创建要素数据集
转自 在geodatabase中创建要素集 //在数据集中创建要素 private void menuItem25_Click(object sender, System.EventArgs e) { ...
- arcgis python 使用光标和内存中的要素类将数据加载到要素集 学习:http://zhihu.esrichina.com.cn/article/634
学习:http://zhihu.esrichina.com.cn/article/634使用光标和内存中的要素类将数据加载到要素集 import arcpy arcpy.env.overwriteOu ...
- 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款
查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...
- [ArcGIS]Oracle RAC下创建地理数据库(Create Enterprise Geodatabase)失败的解决方法
转载请注明原文地址:http://www.cnblogs.com/litou/p/8028843.html 环境:Oracle 11g 11.2.0.1.0(双节点RAC群集),ArcGIS Desk ...
- Geodatabase - 创建要素类.
在NET中,会遇到以“_2”结尾的属性,这些属性是可写的. 以下代码在已有工作空间下,创建一个新的点要素类: //例如,personalDBPath=@"G:\doc\gis\1.400\d ...
- 通过arcgis在PostgreSQL中创建企业级地理数据库
部署环境: Win7 64位旗舰版 软件版本: PostgreSQL-9.1.3-2-windows-x64 Postgis-pg91x64-setup-2.0.6-1 Arcgis 10.1 SP1 ...
随机推荐
- get_template_part()调用自定义模板|wordpress函数
我们在用wordpress开发主题的时候,可能需要调用一段固定的代码比如左侧菜单,这段代码会在主页.栏目页.文章页用到,如果直接写入每个页面模板是没有问题,但是如果要改左侧菜单一个链接那就要改三次,很 ...
- TAPD---“文档”的用途
主要用途:文件的存放 (1)对于测试组:存放测试用例.主要针对当前的迭代,可新建对应的文件夹,上传存放相应的xmind.excel文件.方便开发查找用例文件 (2)对于项目:存放共用的文档等 这里只是 ...
- C++中优先队列的使用
既然是队列那么先要包含头文件#include <queue> 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的 .定义:priority_ ...
- TypeScript语言学习笔记(3)函数,泛型
函数 // 具名函数和匿名函数 // Named function function add(x, y) { return x + y; } // Anonymous function let myA ...
- Apache Shiro<=1.2.4反序列化RCE漏洞
介绍:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 漏洞原因:因为shiro对cookie里的rememberme字段进行了反序列化,所以如果知道了 ...
- proc near/far
proc是定义子程序的伪指令,位置在子程序的开始处,它和endp分别表示子程序定义的开始和结束两者必须成对出现. far是该子程序的属性,决定调用程序和子程序是否在同一代码段如下:为子程序定义及说明, ...
- 关于新版本cube.js 集成preosto 的一个说明
实际上cubejs cli 是可以使用的,只是官方文档对于dbtype 说明的问题 使用如下命令我们可以创建prestodb 的基本项目 cubejs create -d prestodb myd ...
- C# 读取Excel 单元格是日期格式
原文地址:https://www.cnblogs.com/liu-xia/p/5230768.html DateTime.FromOADate(double.Parse(range.Value2.To ...
- Hdu 5093 Battle Ship
每个海面要么放要么不放,因此可以用二分图匹配, 考虑把同一行内的能互相看到的点放到一个行块里,同一列内能看到的点放到一个列块里,然后每一个行块都可以和该行块里所有海面的列块连边,选了这个行块,就必须选 ...
- Python之NumPy(axis=0/1/2...)的透彻理解
https://blog.csdn.net/sky_kkk/article/details/79725646 numpy中axis取值的说明首先对numpy中axis取值进行说明:一维数组时axis= ...