用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 ...
随机推荐
- Alpha冲刺随笔八:第八天
课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(十天冲刺) 团队名称:葫芦娃队 作业目标:在十天冲刺里对每天的任务进行总结. 随笔汇总:https://www.cnblogs ...
- CodeForces - 24D :Broken robot (DP+三对角矩阵高斯消元 随机)
pro:给定N*M的矩阵,以及初始玩家位置. 规定玩家每次会等概率的向左走,向右走,向下走,原地不动,问走到最后一行的期望.保留4位小数. sol:可以列出方程,高斯消元即可,发现是三角矩阵,O(N* ...
- git添加doc文件维护
原文地址:https://www.cnblogs.com/yezuhui/p/6853271.html 说明: git 一般只能对纯文本文件进行版本控制,但是如果有其他中间转化软件的协助,就可以对任意 ...
- linux中>/dev/null 2>&1和2>&1 > /dev/null
转载:https://www.cnblogs.com/520playboy/p/6275022.html 背景 我们经常能在shell脚本中发现>/dev/null 2>&1这样的 ...
- 读取txt写入excel
import csv #实现的思想:首先从txt中读取所有的内容,NUM=1当做键,其他当做值,如果查找缺少a,b,c,d,e,f,g# 则NUM不会添加到字典中,然后通过所有的NUM和字典中的KEY ...
- IN8005 Exercise Session
Exercise Session for Introductioninto Computer Science(for non Informatics studies, TUM BWL)(IN8005) ...
- NOI2018游记【一年后的回忆】
今天是2019年9月6日,我坐在大学的宿舍里,同样敲着键盘,在一年前充满回忆与汗水的博客上,又一次地回忆往事. 那是2018年的7月,我停了三个月的课,攥着一张thusc的安慰约,放手在OI的生涯最后 ...
- php web开发——文件夹的上传和下载
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- java 数组逆序输出(方法内部的代码)
//现在数组中有1, 2, 4, 5, 6, 7, 8 请逆序输出 int [] arrs={1,2,3,4,5,6,7,8}; for(int i=arrs.length-1;i>-1;i-- ...
- 3、kafka工作流程
一.kafka各成员 kafka: 分布式消息系统,将消息直接存入磁盘,默认保存一周. broker: 组成kafka集群的节点,之间没有主从关系,依赖zookeeper来协调,broker负责满息的 ...