问题标签 [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.
c# - 我应该为每个地理处理工具创建一个新的地理处理器对象吗?
常见故事:我使用 C# 开发了一个 ArcMap 扩展。大多数问题都可以通过使用 ArcToolbox 中的各种地理处理工具来解决。通常更可取的是:
- 为每个工具创建一个新的地理处理器对象?
- 重复使用一个地理处理器对象?
推荐 1) 时,是否必须在执行单个工具后释放 com 对象?调用 GC.Collect() 怎么样?
当推荐 2) 时,将其实例化一次并一遍又一遍地重用它是否是一种好方法,例如使用单例模式?
我个人的经验是,使用第二种方法时,我在调试代码时遇到了严重的内存访问冲突。
c# - 如何通过 ArcObjects 中的 ReverseGeoCoding 找到多个交叉点结果?
我正在进行的项目要求我找到一个点附近的交叉点(搜索街道中心线图层)。对于我 90% 以上的搜索,我似乎得到了适当的结果,但是在某些情况下,就 ArcObjects 而言,我得到的交叉点在技术上是交叉点,但不是我需要的。
例如,如果我在 S. Main St 上搜索离某个点最近的交叉点,我应该得到 S. Main St 和 First St 的交叉点。但是,该交叉点恰好是 N. Main St 的交叉点, S. Main St、W. First St 和 E. First St. 因此,当我对搜索交叉点的点进行反向地理编码时,我得到 N. Main St 和 S. Main St. 的单一结果。
有没有办法在同一点获得所有交叉点,而不仅仅是一个交叉点?如果没有,有没有办法过滤可用的结果?
我下面的当前代码最终得到了intersectionName 变量中N. Main & S. Main 的值。
vb.net - 如何从 arcobjects 中的字符串创建变量?
希望这是一个简单的问题,有一个简单的答案。如果我有一个列表框或具有类似 4 年(如 2006 年到 2009 年)列表的东西,我如何以编程方式制作这些年份的变量,名称如 pTable2006、pTable2007 等(当然是 ITable)。
如果这是不可能的,并且我已经在声明中公开声明了这些表(例如 pTable2006 为 ITable,pTable2007 为 ITable 等),我如何根据用户选择以编程方式分配这些变量?我要问的是,如果用户想选择 2006 年和 2007 年,我该怎么写: pTable & ListBox.Items.Item(0) = [table path string] & ListBox.Items.Item(0) (请忽略“列表框”的语法,我只是想举个例子)
我希望这是有道理的。我不确定问这个问题的最佳方法,但每当我输入 pTable & "string" 之类的东西时,我都会收到错误消息。
谢谢,阿德里安
c# - 为类型 T 编写扩展方法;如何为 T 的字段添加类型约束?
初始情况:
我正在使用一个专有框架(ESRI的ArcGIS Engine),我想用一些新功能对其进行扩展。为此,我选择在 C# 中使用扩展方法。
下面显示的是与此问题相关的框架 API 部分:
我想做的事:
我想为此编写一个扩展方法IFeature
,将允许以下操作:
问题是点和多边形形状 (IPoint
和IPolygon
) 都包裹在同一个类型 ( IFeature
) 中,为此定义了扩展方法。扩展方法必须打开,IFeature
因为我只能从一个IFeature
到它的IGeometry
,反之亦然。
问题:
虽然可以在运行时轻松检查IFeature
对象的类型Shape
(参见下面的代码示例),但如何在编译时实现这种类型检查?
(是否有可能使用通用包装器类型IFeature
,例如FeatureWithShape<IPoint>
,在此包装器类型上定义扩展方法,然后以某种方式将所有IFeature
对象转换为此包装器类型?)
arcobjects - 查找道路形状文件的悬挂点
我有一个道路形状文件 n 我想在不创建拓扑的情况下找到 Dangles,是否可以使用 arcobjects 找到没有拓扑的 Dangles 请评估我,因为创建地理数据库、拓扑结构太麻烦了,n 所有事情都请评估我吗?提前感谢
arcgis - 开始使用 arcobjects,而不打算成为开发人员?
如果一个人不是开发人员并且不打算成为一名开发人员,那么开始使用 arcobjects 的最佳途径或地点是什么?
我专业地使用 gis 已经有很长一段时间了,差不多二十年了,其中大部分是 arcinfo/arcgis;我很好。我正在学习软件开发,甚至在公共项目中使用了一个相当成功的小型 Python 应用程序;我不好!我不想成为一个成熟的软件开发人员,但我一直在遇到一些我无法在没有编程的情况下做的事情(例如)。在 arcgis 世界中,这让我非常适合 python 阵营,这对我来说很好,因为我喜欢 python,但是 python 不能直接访问 arcobjects。
太棒了,我需要开始,但是在哪里?Arcgis help 说要开始使用ESRI 开发者网络,但 1500 美元/年绝对不在我的预算之内,听起来就像用大锤打蚊子。.NET、Visual Basic 或 Visual C++ 是哪种语言?
谢谢你的想法。
arcobjects - 如何从内存而不是数据库或文件中添加点特征?
我将 MapControl 嵌入到 C++ 应用程序中。该应用程序与专有的非关系数据库相关联。因此,将地图控件直接链接到 GIS 数据是不可行的。相反,我想简单地将我自己的点要素加载到要素图层中。我了解创建要素图层的机制,但它们似乎与某种类型的数据源相关联。如何在不指向文件或数据库的情况下将要素数据直接加载到图层中?换句话说,我只希望这些功能常驻内存。
visual-studio - 使用 COM 和查询仍然“活着”的对象
我经常使用 ArcObjects,ESRI 的 API 为 ArcGIS 应用程序编程。
我想知道是否有一个工具可以检查哪些 COM 对象是活动的或在堆栈上。
我已经知道要释放它们,但是我会检查每种方法以查看是否有剩余物。
c++ - 如何在 ESRI 地图控件中释放 InMemoryWorkspaceFactory?
我将 ESRI 地图控件嵌入到用 MFC/C++ 编写的自定义 ActiveX 控件中。自定义 ActiveX 控件用作地图控件包装器,因此我可以将其嵌入到仅运行时且非关系的特定环境中。感谢这个站点,我能够将特征点加载到内存工作区中。但是,现在托管环境在关闭时会卡在内存中,并且仅在我使用 InMemoryWorkspaceFactory 时才会这样做。因此,我的结论是,工厂锁定了一个文件或资源,并且不释放它,导致主机环境永远不会关闭。
有没有办法可以在我的 ActiveX 控件的 WM_DESTROY 消息期间手动删除所有要素和要素类并完全释放工作区?IWorkspaceFactory 的 Create 方法似乎没有对应物。我的代码正在向工作区工厂发布所有接口,但显然 ArcObjects 内部仍有引用。
.net - 为什么我的代码没有使用可用的处理器周期?
我为 ESRI ArcEditor 编写了一个插件,可以在道路网络上运行一些验证检查。为了检查规则是否都满足,它基本上做了一大堆不同的相交,在选定的特征上进行一些缓冲和包络等。
它是用 C# 编写的。
现在我注意到的是,在选定的特征上运行给定的算法确实需要很长时间。我加载了 ANTS 分析器并优化了瓶颈,直到我无能为力为止。
我注意到的一件奇怪的事情是,ANTS 在时间线上几乎没有报告 CPU 使用率——一条平坦线。然后,我在验证操作运行时使用任务管理器验证了处理器保持在大约 10% 到 15% 以下。这对我来说毫无意义。为什么它不使用可用的处理器周期?
没有 I/O 发生,因为它从 ArcSDE 加载所有内容。我还验证了在验证过程中没有明显的网络流量,认为它可能正在等待 ArcEditor 和服务器之间的通信。然后我检查了服务器上的处理器,以确保没有任何处理被委派给它,但它的 CPU 使用率在验证过程中保持稳定在 1%。
然后我认为 ArcEditor 可能会抑制它的插件可以运行的优先级,或者类似的东西。所以我插入了一个数学运算,它将在大约 10 秒内使 CPU 最大化,而不是验证例程,它就是这样做的。CPU 使用率稳定在 50% 以上,这是有道理的,因为数学运算将最大限度地利用我的 Core 2 Duo 的一个内核。所以那里没有运气。并且有超过 1GB 的 RAM 可用。
最后,我一直试图找到 perfmon 的问题,但在那里没有运气。没有太多经验,但找不到任何问题。
是因为 ArcObjects COM 接口吗?尽管我也使用 perfmon 检查了 .NET Interop 计数器。
我很茫然。
因此,任何帮助或提示将不胜感激。