问:用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开发笔记之zip()函数用法详解

    今天分享一篇关于python下的zip()函数用法. zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素按顺序组合成一个tuple,每个tuple中包含的是原 ...

  2. JDK1.8 java.io.Serializable接口详解

    java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...

  3. 浏览器-同源政策(same-origin policy)

    浏览器安全的基石是“同源政策”(same-origin policy). 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策. 何为同源? 协议相同 域名相同 端 ...

  4. 如何使用 淘宝 NPM 镜像

    淘宝 NPM 镜像 原文链接 http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同 ...

  5. JSON和计算机网络的个人总结

    JSON JSON是什么? JSON:JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于ECMAScript (欧洲计算机协会制定的js规范) ...

  6. 解决bash: less: command not found

    问题描述 使用less命令查找日志时,less命令未找到: 解决办法 安装less,执行如下命令: npm install -g less

  7. 如何防范web前端安全攻击

    一.对于XSS防御: 1.不要信任任何外部传入的数据,针对用户输入作相关的格式检查.过滤等操作,以及转义字符处理.最普遍的做法就是转义输入输出的内容,对于括号,尖括号,斜杠进行转义 function ...

  8. gdb 调试core文件报错: in free () from /lib64/libc.so.6 找不到原因啊

    运行程序死掉  找不到原因啊..gdb 跟踪与堆栈信息 贴出来了 麻烦大佬们看一下,给个回复,不胜感激!! Core was generated by `./scene_s0037 10037'.Pr ...

  9. Noip2019暑期训练2

      题目名称 骑士遍历 和谐俱乐部 农场派对 对称二叉树 存盘文件名 knight Beautiful party tree 输入文件名 knight.in Beautiful.in party.in ...

  10. UVA 12299 RMQ with shifts

    就是线段树的单点修改和区间查询. 然而输入打了一个小时才弄清楚. #include<iostream> #include<cstdio> #include<cstring ...