问:用Acmap在PostgreSQL中创建要素类需要执行"create enterprise geodatabase"吗?

关于这个问题,是在为新员工做postgresql培训后触发的。我要求他们使用arcmap在postgresql中创建要素类,他们大多数解题思路走错了。思路错了这其实不要紧,要紧的是,我发现他们好多人是在咨询了有经验的同事后选择了错误的解题思路,我比较在意的是有经验的同事对postgis认识的不足。新员工们大多被告知:"你需要执行create enterprise geodatabase"。然而,真的是这样的吗?

首先,非常明确地告诉你:不是的,不需要。

接下来,咱们来细细描述一下这个问题。

1.  create enterprise geodatabase到底在干什么?

  1. 在不明白它是做什么的时候,最有效的方式就是看官方文档。以下为官方文档的截图:

从官方文档的描述中,可以知道,对于PostgreSQL数据库,该功能主要做3件事:

  1. 创建database
  2. 创建geodatabase administrator user 并授权
  3. 创建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分别支持哪些功能。

1)用arcmap连接SDE配置库

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

2)用arcmap连接postgis配置库

新建菜单包括的菜单项仅有:要素类、表、视图。

从以上两图可知,虽然arcmap支持读取postgis配置库,但支持较弱,能够实现的功能较少,不过,创建要素类这一功能是支持的。

回到最初的问题上:"用Acmap在PostgreSQL中创建要素类需要执行create enterprise geodatabase吗"

现在,你可以大声地说了:"不~~~~需~~~~要"

用ArcMap在PostgreSQL中创建要素类需要执行”create enterprise geodatabase”吗的更多相关文章

  1. ArcGIS创建要素类

    在使用ARCGIS软件进行工作时,免不了要建立地理数据库和要素类之类的.一下是我创建文件地理数据库并在数据库中创建要素类写相关步骤: 1.启动软件,可以使用ARCCatalog直接进行创建也可以使用A ...

  2. 往sde中导入要素类报错000732

    sde可以成功连接,可以在Server中注册. 但是向sde中导入要素类报错000732,如图所示. 点击红色圆圈提示 ERROR 000732. 将路径修改为绝对路径即可,如下图所示.

  3. 在ArcMap 10.3中创建和编辑数据

    在ArcMap 10.3中创建和编辑数据 .......待补充 新建 创建一个新文件((Points, Polylines, and Polygons/点.线.多边形)

  4. GDB中创建要素数据集

    转自 在geodatabase中创建要素集 //在数据集中创建要素 private void menuItem25_Click(object sender, System.EventArgs e) { ...

  5. arcgis python 使用光标和内存中的要素类将数据加载到要素集 学习:http://zhihu.esrichina.com.cn/article/634

    学习:http://zhihu.esrichina.com.cn/article/634使用光标和内存中的要素类将数据加载到要素集 import arcpy arcpy.env.overwriteOu ...

  6. 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款

    查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...

  7. [ArcGIS]Oracle RAC下创建地理数据库(Create Enterprise Geodatabase)失败的解决方法

    转载请注明原文地址:http://www.cnblogs.com/litou/p/8028843.html 环境:Oracle 11g 11.2.0.1.0(双节点RAC群集),ArcGIS Desk ...

  8. Geodatabase - 创建要素类.

    在NET中,会遇到以“_2”结尾的属性,这些属性是可写的. 以下代码在已有工作空间下,创建一个新的点要素类: //例如,personalDBPath=@"G:\doc\gis\1.400\d ...

  9. 通过arcgis在PostgreSQL中创建企业级地理数据库

    部署环境: Win7 64位旗舰版 软件版本: PostgreSQL-9.1.3-2-windows-x64 Postgis-pg91x64-setup-2.0.6-1 Arcgis 10.1 SP1 ...

随机推荐

  1. Python 简单批量请求接口实例

    #coding:utf-8 ''' Created on 2017年11月10日 @author: li.liu ''' import urllib import time str1=''' http ...

  2. 对当前目录下的所有APK包执行Monkey测试,并自动保存Crash日志

    适用平台:Android,代码几个月前写的,有问题请及时回复.本代码会依次安装当前目录下的APK安装包,之后执行Monkey测试,然后卸载掉换下一个,继续重复执行,如出现Cransh,会自动保存在当前 ...

  3. 字节序 —— Big Endian 和 Little Endian

    一.字节序 字节序指的是多字节的数据在内存中的存放顺序 内存有高地址端与低地址端.其中,低地址端既可以存放高位字节,也可以存放低位字节. Big Endian 是指低地址端 存放 高位字节. Litt ...

  4. Dubbo源码分析:Filter

    类图 Filter链 在ProtocolFilterWrapper对象中完成Filter完成组建. 实现代码

  5. Python2.7 报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-4: ordinal not in range(128)

    一. 错误原因(网上找的是这样说的,具体的我也不是很了解2.7版本的编码问题): 1.python默认使用ASCII处理字符流. 2.Unicode编码与ASCII编码的不兼容,Python脚本文件是 ...

  6. Tips on Java

    1.JAVA种数组的两种定义方式. int[] nums; int nums[]. 2.整型默认为int,如果需要long,须加l或L.小数默认double,d或D可省略,但如果需要float,须加f ...

  7. python 字符串方法整理

    Python字符串方法 1.大小写转换 1.1 lower.upper lower():小写 upper():大写 1.2 title.capitalize S.title():字符串中所有单词首字母 ...

  8. javascript 终极循环方法for... of ..推荐

    js目前有很多的循环方法,如for, forEach,  for .. in,  for of 等等,而在ES6里面,我们又增加了一些数据结构,比如set,map,Symbol等. 那么我们该选取哪一 ...

  9. 如何抓取微信小程序的源码?

    一.引言: 在工作中我们会想把别人的代码直接拿过来进行参考,当然这个更多的是前端代码的进行获取. 那么微信小程序的代码怎么样获取呢?  参考 https://blog.csdn.net/qq_4113 ...

  10. Windows是如何将64位Ntdll映射到32位进程的---转自简书

    今天我们探索一个问题: 64位的ntdll是如何被加载到WoW64下的32位进程?今天的旅程将会带领我们进入到Windows内核逻辑中的未知领域,我们将会发现32位进程的内存地址空间是如何被初始化的. ...