简介

Esri公司推出的ArcGIS产品是一个非常强大的体系,里面包含ArcGIS Desktop、ArcGIS Server、ArcGIS Engine、ArcSDE、ArcGIS Online等,那么这些产品不仅仅包含基础平台软件,也包含供用户二次开发的组件,那么这些组件也包含C/S、B/S、移动端的。

C/S架构

主要是应用于局域网方面,一般是安装开发软件,一般情况下机器都不连互联网,主要处理数据编辑、数据入库、地图整饰等对机器性能要求比较高,那么这种开发模式包含

  • ArcGIS Engine\ArcObject(后简称AO)
  • Spatial SQL
  • ArcSDE API
  • FileGeodatabase API
  • ArcGIS Runtime(10.1版本)(先归到这里吧)

B/S架构

主要应用于局域网或者互联网,一般情况下使用浏览器,主要是进行数据查询、分析等

  • ADF(基本不用了)
  • WebAPI
ArcGIS API for JavaScript 
ArcGIS API for Flex
ArcGIS API for Silverlight
  • SOE(扩展)
  • Service API
ArcGIS Server Administrator API
ArcGIS Server REST API
ArcGIS Server SOAP API
ArcGIS Spatial Data Server REST API
ArcGIS Portal API 
WebAPI主要关注客户端的展现,比如加载地图、符号、查询、分析、报表
ServiceAPI主要关注服务的管理

针对现在火爆的移动开发

  • Mobile API for Windows Phone
  • Mobile API for Android
  • Mobile API for IOS

各种API相关的下载地址:http://support.esrichina.com.cn/support/download/software/

C/S的开发模式

从上面的图我们可以看出,针对ArcGIS提供的三种GDB类型,AO都可以进行操作,FileGDB API直观看出只能操作FileGDB,剩下的SQL和ArcSDE API只能操作ArcSDE GDB。

以上三者所能做的事情

AO:可以这么说,凡是ArcGIS Desktop能够做的,AO都可以搞定,ArcGIS Engine开发(有些功能因为许可问题不能实现),这种开发模式就是开发系统或者在桌面的基础上增加相关功能。

空间SQL:对ArcGIS简单对象(点、线、面、多点、多片)进行查询、编辑(增删改),编辑支持ArcGIS版本和非版本,不支持复杂对象(拓扑、几何网络等),支持影像

ArcSDE API:其实跟SQL类似,但是多了关于ArcSDE管理、投影转换、Schema、XML对象操作等

FileGeodatabase API:FGDB创建删除、数据编辑、属性查询、简单空间查询等.

以上开发所需的语言

AO:.Net(C#、VB)、Java、QT、C++(有些根据版本不同不再支持)

SQL:会写SQL语句即可

ArcSDE API:Java、C++

FileGeodatabase API:C++

系统部署

AO:在ArcGIS Desktop机器上使用VBA、AddIn、Python或者其他

ArcGIS Engine:开发的话安装ArcGIS Engine Developkit,部署的话安装ArcGIS Engine Runtime

SQL:不同的数据库配置不太相同,以oracle为例,需要引用相关的dll或者so文件

ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry

怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry

FileGeodatabase API:把相关的dll加载上去即可

ArcSDE API:因为C++我没有用过,java的也没有怎么部署过,应该和普通java开发引用包部署类似

开发效率

通常使用AO每秒可以插入500条记录,但是使用SQL每秒只能插入50条记录。

解释一下,为什么SQL查询和编辑比AO慢

编辑情况:WKT(string)============>AO对象================>BLOB

如 果了解SQL操作的话都知道,我们传入的都是WKT串,比如POLYGON ((10.0 10.0, 50.0 10.0, 50.0 50.0, 10.0 50.0, 10.0 10.0)),那么我们需要将这个WKT串转换为AO对象,这一步是比较耗费CPU资源的,那么AO的话我们之间使用接口就可以将传入的坐标转换为AO对 象,差别就出来了,剩下的就是将AO对象存储在数据库的BLOB对象。

查询情况:BLOB=================>AO对象============>WKT(string)===========>展现

那 么在查询的时候,还需要将在数据库存储的BLOB转换为AO对象,AO可以直接将这些对象展示在Mapcontrol上,但是SQL还需要将AO对象转换 为WKT串,最主要的是这些WKT串并不是最终的展示结果,我们还需将WKT串的坐标解析出来,显示出来,点对象或者线对象还好说,如果是面对象,洞、岛 等就更耗时了。

那么性能最快的是什么呢,当然是ArcSDE API,光从名字上就可以看出来,ArcSDE API底层是C的程序,AO也是将ArcSDE API封装为COM组件,所以理论上也有性能的损失,所以性能方面的比较就是

ArcSDE API>AO>SQL

以下仅供参考

为什么SQL效率最低,还会有人用呢?

从上面的开发环境我们可以看出,SQL的开发对环境要求不高,可以说只要能够执行SQL语句就可以进行操作,前提还需要进行配置SQL引用。

因为不是所有公司都是专业的GIS公司,其他IT公司也可以承担GIS项目,那么没有GIS专业或者ArcGIS经验的开发者来说,使用SQL操作就比较方便了,不需要再花时间去学习AO或者ArcSDE API的开发,这是好多公司选择SQL的一个原因。

另外好多公司的业务比如电力或者电信都是点、线居多,那么数据量少的话,效率方面差别是没有感觉的。

还有一点,SQL开发可以集成多种查询、构造函数与一体执行,这是其他两种开发方式不可比拟的

关于SQL开发的效率参考

另外,SQL开发并不是简单的SQL语句执行就行了,都是在一定的应用环境下,不能把空间SQL与简单的非空间数据表的操作进行比较,可以这么说,如果是对空间数据读,你随便折腾都没有问题,但是对空间数据写的话,就不是普通数据增删改那么简单了。

因 为空间数据与非空间数据区别很大,简单说明,空间数据要记录位置,有投影,有空间索引,等,使用AO开发或者ArcSDE API这些东西系统都会自动做了,根本不需要用户来管理,举个例子,往一个要素类里面添加数据,北京要素类,我添加了个天津蓟县的数据,如果是AO操作, 添加完毕之后,系统会自动更新该要素类的extent,因为天津的数据以及超出了北京要素类的范围,但是使用SQL操作增加肯定能加进去,但是自动更新要 素类extent的步骤你明没有操作。你也可以理解为AO执行了两步SQL语句第一步insert数据,第二步就是更新extent,但是如果你不了解 GIS的知识,只走第一步,肯定会有问题的。

所以SQL使用需谨慎。

ArcObject和ArcGIS Engine

好多ArcGIS开发者对这两个概念比较模糊,其实这些东西没有必要纠结,ArcObject是相关的COM组件。

ArcObjects components are installed with ArcGIS for Desktop, ArcGIS Engine, and ArcGIS for Server and can be used in the following ways:

To customize ArcGIS for Desktop applications

To build stand-alone mapping applications

To develop Web applications

从上面的帮助可以看出,ArcObject包含三个方向:

ArcGIS Desktop的自定义应用,扩展

ArcGIS Engine建立自己的应用

ArcGIS Server建立自己的Web应用(如果大家都觉得Web是经常使用WebAPI,其实原来的ADF或者现在的SOE都是AO的概念)

总体来说,没有必要纠结这个概念问题,ArcObject是基础,但是ArcObject可以实现的功能,ArcGIS Engine不一定可以实现。(至少我是这样理解的)

参考一下帮助文档其实也很清楚

上面的是支持ArcGIS Desktop开发


上面的ArcGIS Engine就可以用

参考文章

1.浅谈ArcGIS开发模式积思园

2.File Geodatabase API开发及空间SQL应用

3.SQL访问Geodatabase

4.ArcSDE SDK介绍

5.File Geodatabase API介绍

Arc Object开发,概述2的更多相关文章

  1. Web前端开发最佳实践(1):前端开发概述

    引言 我从07年开始进入博客园,从最开始阅读别人的文章到自己开始尝试表达一些自己对技术的看法.可以说,博客园是我参与技术讨论的一个主要的平台.在这其间,随着接触技术的广度和深度的增加,也写了一些得到了 ...

  2. 前端开发概述+JS基础细节知识点

    一 前端开发概述 html页面:html css javascript 拿到UI设计图纸:切图-->html+css静态布局-->用JS写一写动态效果-->ajax和后台进行交互,把 ...

  3. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

  4. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...

  5. linux交叉环境的搭建以及嵌入式开发概述

    嵌入式开发概述 由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发3大部分 在系统总体开发中,由于嵌入式系统与硬件依 ...

  6. JAVA与网络开发(TCP:Socket、ServerSocket;UDP:DatagramSocket、DatagramPacket;多线程的C/S通讯、RMI开发概述)

    通过TCP建立可靠通讯信道 1)为了对应TCP协议里的客户端和服务器端,Socket包提供了Socket类和ServerSocket类. 2)Socket类构造函数及相关方法 Public Socke ...

  7. PHP.1-网站开发概述

    网站开发概述 网站开发从本质来说,就是软件开发 1.B/S软件体系统结构 BS:浏览器与服务器的结构[降低客户端电脑的负荷,减轻维护成本,对CS的改进,可随时随地进行业务处理] #对美工要求比较高,注 ...

  8. Excel 开发概述

    浅谈Excel开发:一 Excel 开发概述 做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识. ...

  9. Office 365开发概述及生态环境介绍(二)

    本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...

随机推荐

  1. 测试环境docker化—容器集群编排实践

    本文来自网易云社区 作者:孙婷婷 背景 在前文<测试环境docker化-基于ndp部署模式的docker基础镜像制作>中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭 ...

  2. 谋哥:《App自推广》连载2直立人行走迁徙

    [谋哥每天一干货,第六十九篇] 前篇说到声音在远古时代,是一个神奇的东西,它能够很快地把信息传播到其他地方,突破了短距离.然而能人的后代直立人学会了直立行走,他们开始走出非洲,到达遥远的中东.中国,还 ...

  3. 使用 Spirit 类在 XNA 中创建游戏中的基本单位精灵(十三)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  4. manjaro无声音

    解决方法:https://forum.manjaro.org/t/no-sound-solved/3517 LOL i feel like such a noob. Fixed my problem ...

  5. [译]为什么pandas有些命令用括号结尾,有些则没有?

    文章来源:https://nbviewer.jupyter.org/github/justmarkham/pandas-videos/blob/master/pandas.ipynb 方法:用括号调用 ...

  6. nyoj 题目6 喷水装置

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...

  7. VS2015 +.NETMVC5 +EF实践

    -- 当做笔记,以上图片按照顺序来的. 跟着 http://www.cnblogs.com/sanshi/ 一步步来的

  8. Mysql升级ORACLE 记录

    自增主键问题 php和mysql不写主键mysql可以自动生成主键; 想用pdo批量向mysql插入数据只能每条一个pdostarment->execute 看tp5.1的源码提供的方案是 IN ...

  9. 一小时学会用Python Socket 开发可并发的FTP服务器!!

    socket是什么 什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求 ...

  10. POJ 1753 Flip Game(高斯消元+状压枚举)

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45691   Accepted: 19590 Descr ...