问题标签 [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.
python - Python、ArcObjects 和 .AppRef:如何从 IAppROT 到 IMxDocument?
我正在编写一个外部 Python/comtypes 脚本(在 PythonWin 中),它需要获取对当前 ArcGIS 10.0 ArcMap 会话的引用(通过 ArcObjects COM)。因为脚本在应用程序边界之外,所以我通过 AppROT(运行对象表)获取应用程序引用。下面的第一个代码片段是主要的 Python 驱动程序模块。其中有一个 GetApp() 函数,用于从 AppROT 中获取应用程序引用。此代码工作正常,并在单例 AppRef 对象上返回 IApplication。有道理,这就是 ArcObjects 参考似乎表明的。现在,我的主要目标是获得一个 IMxDocument。在主循环中,我成功获得了一个 IDocument 并可以打印标题。但是,下一行查询接口会引发错误 - NameError: name 'esriArcMapUI' is not defined。即使在关闭 PythonWin 并重新打开之后(您总是想在断定您有问题之前尝试),该错误也会持续发生。[顺便说一句,第二个代码片段是 QI 的 CType() 函数,在 SignHelpers.py 模块中定义和导入。] 所以,这是我的问题:
(1) IDocument 在什么 COM 对象上?
(2) 如何从我的 IDocument 获取到预期的 IMxDocument?我需要先创建一个新的 MxDocument 对象吗?[对不起。那里有两个问题。]
(3) 如果我不必创建新对象,那么我该如何做 QI?
几年前,我在 VB6 中做了很多 ArcObjects 工作,所以现在明确的 QI 和命名空间正在给我带来麻烦。一旦我可以访问 IMxDocument,我就可以自由回家了。我将不胜感激任何人都可以为此提供帮助。
另外,对于下面代码的格式,我深表歉意。我不知道如何让 Python 代码正确格式化。缩进不起作用,一些 Python 代码被解释为格式化字符。
arcgis - ArcObjects:使用映射到颜色的双值保存 IRaster
如何在映射到某些颜色的单元格中保存具有双值的 IRaster?例如,(-inf; -50] 映射到蓝色,[+50; +inf) 映射到黄色,其他是逐渐计算的。
arcobjects - 如何直接在地图控件上添加比例尺或指北针?
我已经研究过 SurroundFrames 和 MapSurrounds,但这似乎适用于您希望将这些元素添加到打印页面的情况。另一方面,我在实时应用程序中使用 MapControl,我希望这些元素直接出现在地图上,就像您在 Google 地图上看到它们一样。
我是否必须使用自定义符号和捕获事件从头开始添加这些内容,或者 ArcObjects 是否以任何方式自动执行此操作?
gis - 如何删除使用 ArcObjects 访问的 dbf 文件上的模式锁定?
我正在为 ArcGIS Desktop/Server 创建一个自定义地理处理工具。在工具执行期间,我创建了一个 dbf 文件并使用游标访问其内容。此文件的锁定在工具完成执行后仍然存在,并且只能通过重新启动 ArcMap/ArcCatalog 来解除。是否有删除模式锁的编程方法?
我已经逐行进入了下面的代码。创建 ITable ArcObject 会创建一个以“.sr.lock”结尾的锁定文件,创建 ICursor 对象会在与 dbf 文件相同的目录中创建一个以“.rd.lock”结尾的锁定文件。如果不使用底部的任一 ReleaseComObject 方法,两个文件都会保留。我可以从删除的游标中获取第二个锁定文件,但不能从与表关联的那个中获取。即使我删除了 dbf 文件,锁定文件仍然存在,并且在关闭 ArcMap/ArcCatalog 之前无法删除父目录。
这里有提示解决方案的代码,但缺少该代码的某些元素。
更新:
我发现 dbf 没有被锁定,但是有与 dbf 关联的杂散锁定文件。当 ArcCatalog 仍在运行时,我能够删除表,但无法删除包含 dbf 的文件夹。使用 ArcCatalog GUI 或 Windows 资源管理器时删除父目录失败。我能够使用 Delete_management 地理处理工具删除该文件夹。
我曾考虑使用非 ArcObjects 方法访问 dbf,但我意识到稍后我可能会在使用要素类和地理数据库时遇到此问题,因此最好继续使用 ArcObjects。
为了更好地管理这个问题,我打算在临时工作区(如果未指定,则为系统临时)中创建表,然后在我完成访问后将文件移动到正确的目标。
python - Python、comtypes 和 ArcObjects:创建 AppROT 对象时出错
我comtypes
正在 Python 2.6.5 和 ArcGIS 10 SP1 下试验 ArcObjects。我正在使用纯 Python 方法来包装此答案comtypes.CoCreateInstance
中描述的 ArcObjects OLB,但在该方法中出现错误。
这是我正在运行的代码:
这是脚本的输出:
感谢您提供的任何见解!
arcobjects - 如何从 ArcGIS 地图服务创建 ArcMap 图层
我想将一个从 ArcGIS Server 地图服务创建的 ILayer 添加到一个带有 ArcObjects 的 IMap,但不知道如何去做。
我得到一个带有以下代码的 IMapServer3,其中 mapName = 地图服务:
看起来我可以从 IMapServerGroupLayer 获得 ILayer,但看起来 IMapServerGroupLayer 正在寻找与我正在使用的连接类型不同的连接类型。
如果您有从地图服务获取 ILayer 的示例,我们将不胜感激。
vb.net - VB6 到 VB.NET 的转换 - System.Collections.IEnumerator
我有一个相当长的代码块,我正在尝试将其从 VB6 转换为 VB.NET。ArcObjects GIS 代码基本上是查看一个表并将一堆 GIS 图层组合在一起,然后将它们添加到 ArcMap 目录中。在 Visual Studio 2010 中测试这条线时,我遇到了问题:
VB6 行是这样的:
添加我被告知它需要转换为:
另外,我不得不改变这一行(4x):
对此:
VB6 版本的“值”返回一个字符串,而 .NET 版本的“值”返回一个“”或 null。如何让“值”返回一个字符串?这是长代码。
谢谢
vb.net - 在 VB 到 VB.NET 类迁移期间实现接口
我正在将CenterSnap.cls从其 vb 版本迁移到 vb.NET,在将 vb6 项目导入 VS 2008 后,我对以下 2 个错误感到困惑。
错误 1
错误 1 类“CenterSnap”必须为接口“ESRI.ArcGIS.esriSystem.IPersistVariant”实现“ReadOnly Property ID As UID”。实现属性必须具有匹配的“ReadOnly”或“WriteOnly”说明符。C:\Projects\VB_ActiveX_dll\StackMap\StackMap\CenterSnap.vb 9 16 StackMap
错误 2
错误 2“IPersistVariant_ID”无法实现“ID”,因为接口“ESRI.ArcGIS.esriSystem.IPersistVariant”上没有匹配的属性。C:\Projects\VB_ActiveX_dll\StackMap\StackMap\CenterSnap.vb 16 94 StackMap
为什么Implements ESRI.ArcGIS.esriSystem.IPersistVariant
没有实施?我在项目中引用了 ESRI.esriSystem。
orm - 动态代理:包装构造函数
我正在尝试为另一种类型的数据提供者(ESRI 地理数据库,使用 ESRI .NET 库)创建一个 Active Record 实现(我知道 Castle 的倡议,这非常好),并且我得到了一些有趣的东西。
不过我有一个问题。我的 ActiveRecord 类是这样的:
我有静态 Create 方法,这些方法转到 DynamicProxy 并为我生成一个代理。但是我怎样才能强制为继承类生成的实例也被代理呢?
看看测试。前三个测试像往常一样被拦截,但第四个测试没有。我需要 A)防止用户实例化它自己的类(我认为 API 的坏方法)或找到一种方法从继承的类构造函数返回代理。
简而言之,我需要每当用户创建一个新的 Class() 时,它都会返回一个代理对象。在允许继承的同时这可能吗?
谢谢!
arcobjects - FromPoint 不与它自己的 IPolyline5 相交
我有一条折线和一个点要素类。我在 Point 图层上为 IPolyline5 的 FromPoint 和 ToPoint 创建了一个点要素,如下所示:
稍后,我通过如下方法运行起点和终点几何,从折线要素类中查找所有相交的折线要素。
至少,相交过滤器应该找到我得到 2 点的折线。奇怪的是,它适用于 FromPoint,但不适用于 ToPoint。
两个要素类都使用相同的地理坐标系和投影坐标系。
我希望我在做一些愚蠢的事情,但就是不知道是什么。