问题标签 [arcobjects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1384 浏览

.net - 为什么在手动强制 GC 完成之前释放的 ArcObjects COM 对象没有最终确定?

我正在开发一个 .NET 应用程序,用于处理通过 ESRI 自己的 .NET 互操作程序集使用 ESRI 的 ArcObjects COM 库的地理数据。

在生产环境中运行时,由于达到每个进程 2GB 的内存限制,该进程可能会在某些操作期间崩溃。(ArcObjects 是一个 32 位库。)这是因为某些处理步骤可以创建许多临时 ArcObjects 几何对象。FinalReleaseComObject尽管使用和关联的辅助方法手动释放这些对象,但它会泄漏内存并最终耗尽内存。但是,我可以通过调用强制GC释放内存WaitForPendingFinalizers,并定期调用它GC.CollectFinalReleaseComObject控制内存使用。否则,许多对象会保留在内存中,直到进程退出(正常或异常)。

第一个问题:为什么 ArcObjects COM 对象持有的内存没有立即释放?或者,为什么 GC 允许进程崩溃,而不是在崩溃之前完成释放的 COM 对象并回收内存?

该应用程序在 Windows 2008 64 位上运行,而我使用 Windows 7 32 位进行开发。我可以让进程在生产盒上崩溃,但不能在我的开发盒上崩溃。我认为这可能是因为我通常在本地使用 Debug 版本在 Visual Studio 中运行,但我也使用 Release 版本在没有调试器的情况下尝试过(不使用调试启动),但即便如此,它也没有使用任何地方。内存在生产中,不会崩溃。

第二个问题:为什么?

编辑:在我之前的实验中,我发现它GC.Collect本身是不够的,即使我明确地调用它。我有一个实用方法,在每次算法迭代后调用并调用它可以降低内存使用率GC.CollectGC.WaitForPendingFinalizers

0 投票
2 回答
3822 浏览

c# - Rhino.Mocks 和 ref 参数

我在测试具有 ref 参数的方法时遇到问题。我不是库/代码所有者,所以我无法更改它,所以请不要建议我删除 ref 参数。

我使用这个网站作为参考: http ://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#OutandRefarguments

这是测试:

这是我发现的错误:

Rhino.Mocks.Exceptions.ExpectationViolationException : ICommandBar.Add(ESRI.ArcGIS.esriSystem.UIDClass, 0); 预期 #0,实际 #1。

我已经尝试了很多方法,但它根本不起作用。构建方法实现如下。这仅接收要构建的功能列表和具有相关功能的用户。如果他有一个函数,它应该被构建,使用 add 方法。

有人可以帮助我吗?

0 投票
3 回答
722 浏览

java - 扩展 ArcGIS

我的任务是完成一个论文项目,我必须扩展 ArcGis 的功能。我被要求创建一个用 Python 编写的模型,该模型可以用完 ArcGIS 10。这个模型将有一个简单的用户界面,用户可以在其中拖放各种 shapefile 并输入特定变量的值,以便有效运行的模型。模型完成运行后,将创建一个新的 shapefile,其中列出了风力涡轮机从 A 点到 B 点的最具成本效益的集电极电缆路线。

我想知道 ArcGIS 中是否已经存在这样的功能/扩展,所以我不必重新发明轮子。如果不是,那么学习扩展 ArcGIS 的最佳编程语言是什么(Python vs Visual basic vs Java)。我的背景是 Java、PHP、Jquery 和 Javascript。此外,任何指向正确方向的指针,即文档、资源等,都将不胜感激

0 投票
1 回答
377 浏览

c# - 是否可以使用 AutoMapper 或 ValueInjecter 将源属性映射到目标方法?

我试图将一个简单的、普通的源对象映射到一个目标对象,该对象实现一个接口(IFeatureClass)并且只有一个名为SetValue(index, value)用于设置目标“属性”的公共方法。

我希望能够将我的对象(DTO/BO)动态映射到实现IFeatureClass的对象。可以使用调用的接口的另一种方法找到该字段的索引,该方法FindField(string fieldname)返回该字段的索引。

您是否认为可以使用AutoMapperValueInjecter来完成此类工作。或者是否有任何模式或其他东西可以帮助我做到这一点?如果是这样,你能告诉我怎么做吗?我检查了文档和现有示例,但找不到符合我需要的示例。

问候, 克里斯蒂安

0 投票
0 回答
314 浏览

.net - 如何创建原理图属性(ArcObject .Net api)

我正在编写用于创建逻辑示意图模板和元素类的 ArcCatalog(10.1) Addin(C#)。现在我需要为 Link 类创建一些属性,例如 OriginNode 和 ExtrimityNode,为其他类创建 Constant 和另一个字段 Attribute。

我创建了如下元素类,无法创建 ISchematicElementClass emtClass = [ISchematicDataset].CreateSchematicElementClass(elmClassName, esriSchematicElementType.esriSchematicNodeType);

元素类对象有一个方法 CreateSchematicAttribute("NodeName", uid) 但无法管理,如何使用它......

它给出了一个错误“在集合中找不到项目”

有人可以帮助....

谢谢奈姆

0 投票
1 回答
537 浏览

vb.net - 传递给 ISelectionSet 的 Search 方法的 FeatureCursor 实例抛出 NullReferenceException

我正在尝试在 VB.Net 中为 arcmap 创建一个自定义工具。但是我在将 FeatureCursor 传递给 ISelectionSet 的 Search() 方法时遇到了问题。

这是我的代码的一部分:

在 Search() 内的 provCursor 下出现一个蓝色波浪线,表示“变量 'provCursor' 在被赋值之前通过引用传递。运行时可能导致空引用异常。” 我试过了

但是 New FeatureCursor 下的曲线显示“'ESRI.ArcGIS.Geodatabase.FeatureCursorClass.Friend Sub New()' 在此上下文中不可访问,因为它是 'Friend'。”。我也试过

但没有成功。

在我所有的调试尝试中,Arcmap 都因以下错误而崩溃:Microsoft.VisualBasic.dll 中发生了“System.NullReferenceException”类型的第一次机会异常

有人可以帮我弄清楚我的代码有什么问题吗?我真的很感激任何帮助。

-斯皮尔曼

我实际上不确定上述代码或之前的代码中是否发生错误。因此,我发布了整个子程序内容:

0 投票
1 回答
334 浏览

vb.net - 使用过的 IWorkspace 上的 IDatabaseCompact.Compact()

我正在用 vb.net 编写 ArcMap-AddIn。尝试使用compactIWorkspace(mdb) 时出现错误,错误是:

异常

您试图打开一个数据库,该数据库已由计算机“XXXXXX”上的用户“ADMIN”打开。当数据库可用时再试一次。

在 ESRI.ArcGIS.Geodatabase.IDatabaseCompact.Compact() 上 MyProject.MyClass.CompactGDB(IWorkspace pWS)

如何压缩使用过的工作空间?还有 8 个其他功能也使用了我的工作区。

有什么建议么?

编码:

0 投票
1 回答
407 浏览

vb.net - 在 VB.Net 中以编程方式关闭字段

我正在通过 VB.net 在 Arcmap 中创建一个插件按钮,单击该按钮时会运行识别工具。但我只希望选定的字段出现在识别对话框中。我想隐藏不必要的字段,然后在使用按钮后再次显示它们。

有谁知道如何以编程方式关闭/打开字段?

0 投票
3 回答
513 浏览

arcobjects - 两个多边形合并后删除共享边

我有两个相邻的多边形(左图)。在执行两个多边形的联合后,我有一个多边形,其轮廓类似于左图。我正在寻找的是一种删除两个多边形的共享边的方法,如右图所示。我正在使用 arcobjects (.net) 和 arcdesktop 10.1。希望有一个很好的内置方法来实现这一点。谢谢。

左图是我在工会后得到的。 正确的图像是我想要的。

0 投票
1 回答
480 浏览

wcf - 使用 WCF 和 ArcGIS Silverlight API 从服务器返回 feature.shape

我正在使用 arcgis silverlight api

我需要做的就是通过objectid从特征中获取几何以缩放到它

所以我使用 WCF 服务来获取几何,但我发现错误说

类型“System.__ComObject”无法序列化

你能帮我吗?

先感谢您