Questions tagged «arcobjects»

ArcObjects是ESRI Inc.的一组基于COM的API,在其若干产品(包括ArcGIS Desktop,ArcGIS Engine和ArcGIS Server)中使用。

2
使用.NET泛型来存储ArcObjects?
在.NET中使用通用类型存储ArcObjects(例如ILayer,IField等)有什么含义? 使用这些类型的值时,编译器会向我发出警告 public class Foo { private List<ILayer> fooLayers; public List<ILayer> FooLayers { get { ... } set { ... } } } 这是警告: 警告15类型库导出程序警告处理'ArcMemorialCore.Topography.IMemorialDocument.set_ProfessionalsEnvolved(value),ArcMemorialCore'。警告:类型库导出程序在签名中遇到了通用类型实例。通用代码可能不会导出到COM。ArcMemorialCore 我关心的不仅是警告的存在,还包括良好的设计规范,性能等。
11 arcobjects  .net 

2
在10.2上运行ArcGIS 10.1应用程序
我支持已在装有ArcGIS 10.1的PC上编译的.NET应用程序。该应用程序包括一个用户界面和一个ArcGIS桌面扩展,以及一个Windows Installer调用的安装程序程序集,用于在安装过程中注册该桌面扩展。 我的问题是该应用程序无法在装有ArcGIS 10.2的PC上运行,因为未找到10.1 ESRI程序集,因此它崩溃了。从v9.3 ESRI开始,似乎不再提供发布者策略文件,从而在运行时将程序重定向到最新版本。 通过将运行时程序集绑定添加到应用程序的.exe.config中,我设法重定向了程序以加载10.2程序集。但是,这不会重定向桌面扩展,也不会解决安装程序在安装应用程序时寻找10.1库的问题。 ESRI的解决方案似乎是每次发布新版本的ArcGIS时都重新编译应用程序。但是,这意味着我将需要拥有最终用户使用的每个ArcGIS版本的副本。每次需要更改应用程序代码以重新编译时,我都必须卸载并重新安装不同的版本。 有没有人有什么建议?是否可以在运行时动态加载库以避免寻找特定版本?还有其他解决方案吗?



1
在ArcMap定义查询中引用NaN或±∞(特殊浮点值)?
我偶然发现了ArcMap如何向用户显示特殊的浮点值。 +∞(正无穷大)显示为 1.#INF –∞(负无穷大)应该显示为-1.#INF—我尚未验证这一点。 NaN(不是数字)显示为右对齐<Null>-请勿与left-aligned混淆<Null>,后者表示NULL(缺少值): (顺便说一下,在字段计算器中获取唯一值根本不会列出NaN。) 但是我还没有发现如何编写图层定义查询以基于这些特殊值选择行: ColumnName IS NULL 只会选择常规的NULL值,而不会选择NaN。 ColumnName = 1.#INF 因语法无效而被拒绝。 有谁知道如何做到这一点? 用于将1.#INF值存储到表字段的C#ArcObjects代码片段(基本概念): 按照要求。由于我不再工作了,因此以下代码不是我使用的真实代码,现在无法测试,但是它会产生如上屏幕截图所示的效果: ITable table = …; int doubleFieldIndex = table.FindField(…); IRow row = table.CreateRow(); row.Value[doubleFieldIndex] = double.PositiveInfinity; row.Store();

1
以编程方式确定ArcGIS Layer(*。lyr)文件版本
我已经尝试过通过IStorage,Microsoft复合文件规范,ArcObjects反序列化等方法来尝试检测.lyr文件版本。 使用ArcObjects,我可以获取Layer属性,数据源,范围等信息,但是LayerFileClass的documentVersion属性始终在9.3 Layer文件上报告“ esriArcGISVersion10”。 ILayerFile l = new LayerFileClass(); l.Open(fileName); LayerFileClass t = (LayerFileClass)l; string version = t.DocumentVersion.ToString(); 任何帮助表示赞赏。 请注意这篇来自2007年的古板论坛帖子。

1
Python中的Arcobjects:将接口分配给具有特征(形状)几何的对象
我正在尝试在Python中使用ArcObject。我确实在使用几何数据为我的对象分配接口(即IZ.InterpolateZsBetween)时遇到问题,代码为: from Comtypes.client import CreateObject, GetModule import arcgisscripting gp = arcgisscripting.create(9.3) gp.setproduct("ArcInfo") esriSystem = GetModule("C:/Program Files (x86)/ArcGIS/com/esriSystem.olb") esriGeometry = GetModule("C:/Program Files (x86)/ArcGIS/com/esriGeometry.olb") esriDataSourcesGDB = GetModule("C:/Program Files (x86)/ArcGIS/com/esriDataSourcesGDB.olb") esriGeoDatabase = GetModule("C:/Program Files (x86)/ArcGIS/com/esriGeoDatabase.olb") sPath ="c:/temp/test.gdb" pWSF = CreateObject(esriDataSourcesGDB.FileGDBWorkspaceFactory,\ interface=esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.OpenFromFile(sPath, 0) pFWS = pWS.QueryInterface(esriGeoDatabase.IFeatureWorkspace) pFClass = pFWS.OpenFeatureClass("test_z") pFCursor = …


4
SHAPE_Length是否考虑了海拔值?
该Shape_Length属性是否考虑了海拔?举例来说,如果我有3点:A,B,和C A.X = 10 A.Y = 10 A.Z = 10 B.X = 10 B.Y = 10 B.Z = 50 C.X = 0 C.Y = 0 C.Z = 10 然后创建两行:L1和L2。 L1.fromPoint = A L1.toPoint = C L2.fromPoint = B L2.toPoint = C 我所观察的结果是,SHAPE_Length属性上是相同的L1和L2。我已经确认所有点和所有折线都是ZAware。 因此,假设SHAPE_Length属性将形状的Z考虑在内是我的错误吗? 我可以毫无问题地存储Z值或对其进行操作。我正在使用IPolyline。 据我所知,SHAPE_Length仅是2D且不可编辑。

2
ArcGIS 10加载项:顶级异常处理
我正在使用的ArcGIS 10插件非常简单-只是一个工具控件和一个可停靠窗口。我正在处理预计会在源头发生的特定异常,并抛出其他所有异常,但是在外接程序框架中处理那些意外异常的最佳实践是什么? 我目前只是在做一个catch (System.Exception ex),并在没有可用我可以处理的更高级方法的每个方法中将其显示在MessageBox中,但这似乎不是最佳实践(当然,FxCop在抱怨关于它)。 ArcGIS 10附加框架中是否有任何功能可用于关联顶级异常处理程序,例如Application.ThreadException或AppDomain.UnhandledException事件? 看到加载项只是类库,而不是无法访问基础应用程序的启动代码的应用程序(从我的收集中,这些事件必须在启动过程的早期就进行挂钩),我的猜测不是,但我认为我想问一下是否有任何专家对外接程序中应如何处理“意外”异常有任何建议。

1
ArcMap插件-以编程方式添加互操作性连接
我目前正在使用.Net框架为ArcMap-ArcView构建外接程序。 ArcMap和外接程序的用户应访问从WFS服务发布的数据。 我知道可以通过“ 互操作连接”界面手动添加WFS服务。 但是,是否可以通过编程方式添加这些WFS服务?(可能是-我的用户会发现很难手动添加这些内容) 如果是的话,怎么办呢? 我似乎找不到有关此主题的任何信息。

3
在ArcMap中创建按钮以运行Python程序?
单击工具栏中的按钮时,我有一个要在ArcMap中运行的脚本,到目前为止,我只能将该脚本制作为脚本工具。我需要它作为命令而不是地理处理工具运行。 与从命令行窗口执行相同的代码相比,将其作为地理处理工具运行需要更长的时间。我刚刚开始研究ArcObjects,但是如果我需要使用它,我想开始使用它。 如果任何人都有任何示例代码或用于创建按钮的资源,那就太好了。

2
ArcMap扩展9.3与10
我已经更新了ArcMap扩展以与ArcMap 10配合使用-主要是将引用从ESRI.ArcGIS.ADF更改为ESRI.ArcGIS.ADF.Local,并将“ Specific Version”属性的值设置为false,并使用新的ESRIRegAsm.exe进行注册。因此,我现在想知道是否可以构建一个可以同时适用于9.3.1和10.0的扩展程序,或者每个产品是否需要单独的二进制文件?

2
如何使用模拟对ArcObjects进行单元测试?
我非常喜欢单元测试,但是在使用ArcObjects框架时,仍然使用FGDB来获取用于运行单元测试的功能。 是否有人成功对IFeature,IGeometry,IWorkspace等思想进行了嘲弄。我并不真正在乎您使用什么模拟框架,只是看到您的工作方式将不胜感激。 我看到的问题是,您必须在同一个对象上的多个接口之间进行切片和切块,因此创建代表性的模拟对象的开销非常大。

3
ArcGIS如何计算非等距投影的两点之间的距离?
这是我上一个问题的后续问题,您能提出一些有关坐标系统投影的写得很好的入门文章吗? 假设我正在使用CH1903地图投影,就我所知,这是共形的,但不是等距的。意思是,保留了角度(形状),但没有保留面积,距离或比例。(至少这些未完全保留)。到目前为止,一切都很好。 我想知道现在要计算两点之间的距离时,ArcGIS会执行哪种计算。在ArcObjects中,我可以使用如下IProximityOperator界面: IPoint a = ..., b = ...; double distance = ((IProximityOperator)a).ReturnDistance(b); 问题:当我使用的基准系统无法准确保留距离时,当我查询两点之间的距离时,ArcGIS将如何处理(如上所示)? 它是否只是做一些勾股数学(a 2 + b 2 = c 2)以获取距离,这意味着返回的距离将仅与投影所允许的精度一样? 还是会做一些更复杂的事情(例如某种形式的重新投影)以获得更准确的距离? (这是一个相同的问题,但更笼统地说:一旦投影了几何图形,ArcGIS是否仅在欧几里得空间中执行所有计算,还是使用的地图投影仍然会影响距离,角度,面积等的计算?)

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.