使用ArcGIS平台提高开发人员生产力?


20

我们是.NET开发人员的小团队。我们拥有丰富的GIS经验,而且我们都不是软件/数据库开发或系统管理的新手。我们拥有技术学位和多年行业经验。我们参加了Esri开发者峰会。

Esri的技术-主要是ArcGIS Server,ArcSDE和ArcObjects-在我们开发的所有软件中起着很小但必不可少的作用。尽管ESRI在我们的技术堆栈中仅占少数地位,但我们仍花费大量时间来解决难以捉摸的错误,制定变通办法,破译其模糊的错误消息,跟踪性能问题以及回收流程。

通常,我们的问题源于真正的错误,不良的异常处理,有限的设计/架构决策,缺乏文档,不稳定或它们的某种组合。(我在这里说的是ESRI堆栈。)

从项目经理的角度来看,我非常担心团队的生产力。这花费了我们很多时间。我们没有时间学习ESRI堆栈的每个特质,但是我们仍然需要完成工作。(不能忍受它,不能没有它。)

对于混合使用ESRI的开发人员,您有什么实用的建议?

我不是在寻找有关替代技术堆栈的建议。


2
您介意询问在软件中使用ESRI产品的原因吗?
OptimizePrime

如果您威胁要对发现的每个错误进行测试,则开发人员的反应很好。更严重的是:使用ESRI产品时,您的以下评论是正常的。<blockquote>我们花费大量时间来解决难以捉摸的错误,制定变通办法,破译模糊的错误消息,跟踪性能问题以及回收流程。</ blockquote>
CaptDragon 2011年

@capdragon“我们花费大量时间来解决难以捉摸的错误,精心设计的解决方法,破译模糊的错误消息,跟踪性能问题以及回收过程”,这几乎适用于所有软件开发和安装。.–
geographika,

1
@geographika-关键字是“过分的”-与我们使用的所有其他技术有关。
2011年

1
我要求您的开发者观看“最后的演讲”,并注意“砖墙”的概念。那里的砖墙让我们有机会展示我们多么想要东西。因为那里的砖墙阻止了那些不想要它的人们。
Kirk Kuykendall

Answers:


10

为了提高性能,似乎最好的解决方案是按照本文所述,向ArcObjects编写C ++代理代码。在示例中,ESRI消除了对COM互操作的大量使用,从而使性能提高了6倍。

ESRI还提供了处理隐秘COM错误消息的建议/最佳实践-以及HRESULT错误代码的说明。

除了这些配置问题以外,还有许多与Windows有关的问题,因此对Windows服务器管理,IIS,Windows服务,Windows事件日志,注册表,注册的COM对象等的全面了解都可以提供帮助。

除了这些文章之外,您还可以找到许多更通用的开发方法。

软件开发方法

  • 尽可能对两个地理数据都使用Web服务(WMS,WFS,ArcGIS REST服务)。这种分离使事情更容易调试和维护。
  • 尽可能安装系统以清理Windows安装。创建安装脚本,这样您就可以从头开始重新创建整个系统,而不必依赖于内存和手动过程。虚拟机是完美的选择。
  • 尽量将带有ESRI特定代码的纯.NET和DLL分开
  • 您可以开始尝试在数据库中执行更多的“繁重工作/处理”,例如直接在SQL Server 2008中使用新的Geometry和Geography类

通讯

  • 将难以捉摸的错误发布到GIS SE / StackOverflow,如果您也找到了将解决方案发布的解决方案,那么我会找到以前写的答案,而我一直在寻找自己在寻找大约6个月后完全忘记的错误。
  • 记录笔记,理想情况下允许团队中的其他人搜索它们。我已经尝试过Wiki,但是缺乏粘贴图像的障碍足以阻止我定期这样做。我目前使用Microsoft OneNote,它非常适合跟踪错误,URL,屏幕截图。也可以共享。
  • 有关更详细的技术方法,请将其发布到博客中。ESRI世界中的细节共享似乎要少得多,可能是由于担心其他人会利用商业优势,但是,像样的博客对于您公司的服务是一个很好的广告

答案是-1,还是大胆地提到开发和配置OSS GIS并非完全没有相同的困难?!
geographika

7

我担心这个问题不会带来很多好的答案。但这是一个很好的...。一段时间以来,ESRI产品的性能一直是我关注的问题。

我在上面的评论是在询问对ESRI产品的需求,还是可以迁移到其他技术堆栈。如果您要使用ESRI产品进行开发以与ESRI系统集成,以吸引ESRI用户,那么您将受困于已经移植或扭曲以适合现代开发和用户平台的ESRI代码库。

如果我错了 ,请ESRI的一些人纠正我。大多数ESRI的.NET库都是COM对象的包装器,其中存在访问开销,并且在提供最佳错误报告和处理方式时含糊不清。了解底层COM对象及其在代码库中的参与将有助于您更好地设计代码以适合其操作。这一事实帮助我将Python脚本的性能提高了10倍。以前需要40分钟才能完成的操作现在只需4分钟,而稍作调整现在只需2.5分钟!

我听说过ArcGIS 10的优点,但是请不要屏住呼吸。

如果您正在使用ESRI产品在软件中提供GIS解决方案,那么请锁定提供的众多开源项目之一,并从那里进行构建。@capdragon提供了一组这样的应用程序,这些应用程序将通过云中志趣相投的开发人员的支持团队为您提供大量的灵活性和可伸缩性,以帮助您继续前进。

如果您尝试在ESRI标准操作程序之外进行创新,则使用ESRI产品进行开发是一种思路模糊的游戏,主要参与者含糊不清,骇人听闻的hack和不一致。

我要有人证明我错了!


要回答您的问题,出于太多原因,我们非常困扰。
2011年

ArcObjects .NET SDK几乎完全是基础COM的运行时可调用包装器。Silverlight / WPF SDK不基于COM。
詹姆斯·谢克

@James-如果我写错了,请纠正我,但Silverlight SDK是否不只是REST API客户端?REST API不是基于ArcObjects构建的吗?
2011年

@OptimizePrime-ArcGIS 10在您提到的许多领域都取得了长足的进步,他们宣布的10.1甚至超越了这一范围。他们在10.1版中完全放弃了DCOM支持。
维尔贝克

1
@welbev非常感谢您提供此信息。ESRI在这方面取得了一些进展,但令人高兴的是听到他们正在解决这些问题。
OptimizePrime

7

根据我与ESRI的合作经验,离ArcObjects越远,成功的可能性就越大。实际上,这意味着如果您可以使用更新的REST API来完成您的工作,则应该始终以这种方式访问​​ArcGIS。

他们似乎从彻底的失败中学到了一些东西,那就是Java / .net中的Web ADF,并且REST API得到了大大简化,并且在工作时没有太多麻烦,具有相当不错的业绩。访问REST API的最简单方法是,如果您使用Javascript / Flex / Silverlight进行工作,因为ESRI为那些很好的库提供了库,但是它只是一个标准的REST接口,您几乎可以与它进行通讯。

有些事情是您无法做到的,但是我无法强调与ESRI堆栈中的几乎所有其他东西一起工作要好得多。当您必须使用ArcObjects(或.net包装的ArcObjects)时,您真正能做的就是在代码中创建非常好的文档,并祈祷它们不会破坏下一个补丁中的内容(他们很可能会知道这些知识) )。


6

使支持维护保持最新状态。比试图找出一个代码问题更令人沮丧的是,在没有编写代码的人的帮助下,试图找出它。如果您与ESRI没有维护协议,则他们将不会获得任何帮助。(您可能会从此站点或ESRI论坛上获得一些帮助,但这与直接与他们交谈相差很远。)

紧贴服务包和补丁程序。这样做并不能保证您没有问题,但是在技术支持询问您是否安装了最新版本时,可以安全地回答“是”。

向社区贡献您的变通办法(博客,此处的问题等)。如果有足够多的人这样做,我想将会发生两件事:一是,更多的开发人员将意识到这些问题,并将有机会将其更快地解决;二,ESRI可以更快地解决问题(就像放大一样)玻璃杯,让蚂蚁移动,在吗?


4

我还是ESRI开发人员,每天都在不断与该产品进行斗争。我没有维护支持,因此我没有从开发人员那里得到太多反馈。

当事情“只是不起作用”(而不是IJW-它就可以工作)时,无论您多么努力尝试,这真的很令人沮丧。

我为赢得这场战斗所做的努力:

  • 提出问题(很多)
  • 阅读ArcObjects SDK参考(一遍又一遍)
  • 试验不同的设置

获得结果的最短路径是询问已经存在相同问题的人,因此,如果有人遇到麻烦并找到了解决方法,他们很可能会告诉您。

该文档很好,但是缺少关键元素描述和重要细节-因此,请回到1。

实验也可以。创建一个控制台程序并进行测试。单元测试框架可以帮助您在IDE中进行所有操作,但是可以测试不同的场景。

ESRI库中功能最差或最怪异的是Geodatabase,根据条件的不同,它可能给出奇怪的结果,因此请尝试掌握它。


1

尝试使用PostGIS> GeoServer> OpenLayers。看看这对您的团队如何工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.