问:用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. Thinkphp下记录和统计时间(微秒)和内存使用情况

    * 记录和统计时间(微秒)和内存使用情况 * 使用方法: * <code> * G('begin'); // 记录开始标记位 * // ... 区间运行代码 * G('end'); // ...

  2. 【http】Coolie 属性

    expires属性 指 定了coolie的生存期,默认情况下coolie是暂时存在的,他们存储的值只在浏览器会话期间存在,当用户推出浏览器后这些值也会丢失,如果想让 cookie存在一段时间,就要为e ...

  3. java 获取对象的数据类型

    // java 获取对象的数据类型 public static String getType(Object object){ String typeName=object.getClass().get ...

  4. linux添加用户adduser出现 useradd:cannot lock /etc/passwd; try again

    找一下有个叫/etc/passwd.lock的文件,找到,给它用root删掉就好了,可能是上次使用到这个文件没有正常关闭.具体操作:切换到root用户,用cd etc到etc目录下,rm .pwd.l ...

  5. EntityFramework6 学习笔记(一)

    1.什么是EF? EF是一种ORM(Object-relational mapping)框架,它能把我们在编程时使用对象映射到底层的数据库结构.比如,你可以在数据库中建立一个Order表,让它与程序中 ...

  6. Permission denied (publickey,gssapi-keyex,gssapi-with-mic).错误的解决

    SSH登录提示 Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 修改被登录的SSH服务器ssh配置,/etc/ssh/sshd_ ...

  7. 如何用okr做好目标规划

    有朋友和我吐槽公司总是规划一个个振奋人心的目标,让大家对工作充满了热情.然而好的开头却缺少追踪反馈没有好的结尾,那些大家所渴望达成的目标随着时间的流逝便逐渐没有了音信,不再有人主动提起,团队成员迎来的 ...

  8. Log4net 单独创建配置文件(三)

    1.建立ASP.Net空的Web程序,添加Default.aspx窗体 2.添加web配置文件命名为:log4net.config,添加配置 <?xml version="1.0&qu ...

  9. 浏览器端使用less

    一.思路 ①less无法在浏览器中直接使用,浏览器不能识别 ②通过less解析插件less.js(JavaScript插件)可以把less文件解析成css代码(下载地址) 二.具体应用 ①less.j ...

  10. OpenFOAM——平行平板间具有相对运动(库埃特流)

    本算例翻译整理自:http://the-foam-house5.webnode.es/products/chapter-1-plane-parallel-plates-case/ 这个算例研究了一个距 ...