Questions tagged «arcobjects»

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


10
ArcObjects入门?
如果不是开发人员并且不打算成为开发人员,那么从ArcObjects入门的最佳途径或地点是什么? 我已经使用了很长时间的专业gis,将近20年了,其中大部分时间是使用arcinfo / arcgis。我很好。我正在学习软件开发,甚至有一个在公共项目中成功使用的小型python应用程序;我不好!我不想成为一个成熟的软件开发人员,但是我一直遇到没有编程就无法做的事情(例如)。在arcgis世界中,这使我完全处于python阵营中,这对我来说很好,因为我喜欢python,但是python无法直接访问ArcObjects。(Python和ArcObjects中是可能的,但它是不支持的路线。这个问题是关于跟随因循守旧。) 我需要开始,但是在哪里?Arcgis帮助说要开始使用ESRI开发人员网络,但是每年$ 1500的预算绝对不在我的预算之内,而且听起来像是用八角锤拍打蚊子。以及哪种语言.NET,Visual Basic或Visual C ++? 更新:谢谢大家的精彩回答。鉴于它们,我意识到我以不必要的方式缩小了我的问题范围,前提是“ ArcObjects”是我需要走的方向。一个更开放的表述更像是: 我一直遇到只能用arcgis和python无法解决的问题。我还能学/用什么来解决诸如X的问题?我没有兴趣或无意成为软件开发人员。我只需要做一些Arcgis python模块没有暴露的事情。

3
是否有任何开源ArcObjects项目?
开发基于开源库的GIS应用程序的主要好处之一是,许多项目都是基于开源库的。 精心设计的开源项目非常适合查看: 应该使用哪种编码模式 遵循什么编码风格 如何构造更大的项目 包含什么单元测试 自动文档编制工具和过程 源代码控制工作流 该ArcObjects的代码库,似乎看最好的地方,但我看过大多数的例子是非常小的碎片的功能或单工具,而不是完整的应用程序。 该SharpGIS项目是一个很好的.NET榜样,但是否有任何ArcObjects的具体项目? 更新了示例: http://eagl.codeplex.com/ Easy ArcGIS库是一组C#.net类,这些类包装了ArcObjects的常用功能,可帮助ArcGIS开发人员以更少的时间和直接的方式完成许多常用功能。 来自同一位开发人员: http://arcgisslcontrols.codeplex.com/ ArcGISSLControls是在ArcGIS Silverlight SDK之上构建的一组ArcGIS Silverlight控件,它是使用C#编程语言开发的。

3
找出折线拐点的算法
我试图找出拐点,即直线上的曲线的起点和终点。如果查看图像,绿线可能是道路或溪流,黑点是曲线的起点和终点。 自动生成这些点的高级步骤是什么?我有ArcGIS Desktop,并且对ArcObjects非常方便。

2
创建加权的蒂森多边形?
我有一个点shapefile,并使用以下脚本语法以编程方式创建了Thiessen(Voronoi)多边形: CreateThiessenPolygons_analysis (in_features, out_feature_class, fields_to_copy) 但是,每个点都与一个区域相关(即每个多边形的首选大小),我希望基于该字段对Thiessen多边形进行加权。 那有可能吗? VBA中有任何相关代码吗?


6
使用ArcObjects在Esri Geometry和WKT之间转换?
在ArcGIS ArcObjects API中,似乎无法将ArcObjects几何图形转换为知名文本表示(反之亦然)。我唯一能找到的就是转换为WKB(IWkb接口)。 有没有办法在几何对象和WKT之间执行转换,还是我必须自己实现?我的主要目标是实现.NET且无太多外部依赖。

3
解决ArcObjects的IFeatureClass.Search(仅在具有直接连接的SDE上)中的内存泄漏?
ESRI支持人员说,他们已重现了该问题,并已打开一个错误报告(NIM070156)。 我已确定,有内存泄漏(在非托管堆内存)时发生在工具我的.NET / C#ArcMap中附加执行空间查询(返回ICursor从IFeatureClass.Search与ISpatialFilter查询过滤器)。不再需要所有COM对象时,它们将被释放(使用Marshal.FinalReleaseCOMObject)。 为了确定这一点,我首先建立了一个带有ArcMap.exe的“专用字节”,“虚拟字节”和“工作集”计数器的PerfMon会话,并注意到,随着执行查询的工具的每次使用,这三者均稳步增加(每次迭代大约增加 500KB) 。至关重要的是,只有在使用直接连接(ST_Geometry存储,Oracle 11g客户端和服务器)对SDE上的要素类执行此操作时,才会发生这种情况。使用文件地理数据库以及连接到使用应用程序连接的较旧SDE实例时,计数器保持不变。 然后,我使用LeakDiag和LDGrapher(在此博客文章中提供了一些指导)并三次登录Windows Heap Allocator:第一次加载ArcMap并选择工具对其进行初始化之后,运行了数十次该工具,然后运行了它几十次。 以下是LDGrapher的默认视图(总大小)中显示的结果: 这是红线的调用堆栈: 如您所见SgsShapeFindRelation2,sg.dll中的功能似乎是导致内存泄漏的原因。 据我了解,sg.dll是ArcObjects使用的核心几何库,SgsShapeFindRelation2大概是在应用空间过滤器的地方。 在我做其他事情之前,我只是想看看是否有人遇到了这个问题(或类似的问题),以及他们是否有能力解决这个问题。另外,仅通过直接连接发生这种情况的原因可能是什么?这听起来像是ArcObjects中的错误,配置问题还是编程问题? 这是产生此行为的方法的最低工作版本: private string GetValueAtPoint(IPoint pPoint, IFeatureClass pFeatureClass, string pFieldName) { string results = ""; ISpatialFilter pSpatialFilter = null; ICursor pCursor = null; IRow pRow = null; try { pSpatialFilter = new SpatialFilterClass(); pSpatialFilter.Geometry = …

1
理解为什么ArcPy成本路径分析工具比ArcObjects更快?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 尽管我使用python创建地理处理脚本/服务,但给我的印象是,使用ArcObjects进行等效操作将具有更好的性能。 我已经发布了ArcGIS Server GP服务-RasterIO.dll崩溃了,ArcSOC.exe和ArcGIS Geoprocessing Script在桌面上运行良好,但崩溃了,成为Geoprocessing Service?在过去的两天内,有关获取使用Spatial Analyst工具用作地理处理服务的地理处理脚本的信息。我的截止日期快到了,所以我决定走SOE路线以实现所需的功能。 获得在ArcObjects的成本路径分析是相对直接使用.NET ESRI.ArcGIS.SpatialAnalyst.RasterDistanceOpClass,特别是CostDistanceFull()和CostPath()方法。 有关我的工作方式的一些代码片段: 蟒蛇 # Get Cost Path Origin and Destination Points inputPointsShp = 'D:/RasterStuff/test_points.shp' arcpy.MakeFeatureLayer_management(inputPointsShp,"origin",' "TYPE" = \'ORIGIN\' ') arcpy.MakeFeatureLayer_management(inputPointsShp,"destination",' "TYPE" = \'DESTINATION\' ') # Check out the ArcGIS Spatial Analyst extension license arcpy.CheckOutExtension("Spatial") # Execute CostDistance outCostDistance …

2
从.NET调用arcpy / python?
是否有任何可用的示例说明如何将python集成到.NET ArcGIS Addin或Extension中?我想从.NET中的表单事件(例如按钮单击)调用一系列python脚本。我还希望能够从.NET表单中在脚本中设置变量。 我应该咬紧牙关,然后在.NET中重新编写这些脚本,还是有一种简单的方法来包装python代码?

5
在ArcMap中使用Hillshade选项?
这是我使用的栅格的漂亮图片-没有应用任何效果-只是调整了色带和直方图以显示所有浮雕-尽管是以2D方式进行的! 我有一个栅格图层,要使用默认的hillshade显示。我可以在代码中执行此操作,实际上与在ArcMap中选择Hillshade选项相同(请参见下文): 但是,当您执行此操作时-看起来很令人失望: 尤其是如果放大栅格,您会看到各种网格状的人工制品-看起来一点也不好! 但是,如果我使用带有Spatial Analyst的栅格来创建正确的Hillshade图层,并以85%的透明度对其进行覆盖,则它看起来会非常好并且非常不同! 如何在ArcMap中实现此效果并覆盖Hillshade选项的默认功能(我认为这是不可能的,或者我错过了某些设置而导致栅格显示不佳)。如果可以覆盖或选择正确的设置,则可以在ArcObjects中进行。 如果无法使用选项1,我可以通过创建一个Hillshade图层(不使用Spatial Analyst)来创建效果并将其有效地融合到原始栅格中吗-即,我不希望人们在ArcMap的目录中看到两层。我只想要一层,但是具有默认的我的选择/配置的hillshade渲染。我也需要以编程方式执行此操作,即ArcObjects。 我了解到的一件事是,您必须在正确的空间参考和测量单位中使用DEM,否则生成的山影看起来太黑且过于夸张-请观看此视频以了解更多信息-这是一个很好的解释。 因此,我想我现在知道在生成一些高质量的阴影时需要做些什么,但是我认为这将需要一些底层的ArcObjects代码调整。我想我需要提出自己的图形渲染并将其插入ArcMap(我有一个dll,可以很酷的方式渲染网格的位图)。我认为显示此内容的一个好地方是重写IRasterRenderer之类的Draw()事件,并插入我自己的图像渲染。当然,使用重投影等可能会变得有些复杂。 是否有人在ArcMap中完成过这种低级图形渲染?如果可以,您可以提供任何指导或我应该注意的事情吗?

1
如何在ArcMap / C#中从Windows剪贴板获取选定的要素/几何?
我在ArcMap 10中有一个自定义工具。工作流如下: 使用“按矩形选择要素”工具在图层中选择要素 使用STRG + c将功能部件复制到剪贴板 选择自定义工具 该工具检查剪贴板。如果在剪贴板中找到复制的功能,则工作流程会更改 我在http://kiwigis.blogspot.com/2011/07/how-to-create-drop-target-for-layers-in.html上找到了一个示例,其中使用拖放实现了类似的内容。 按照并修改示例,并尝试使用STRG + c将ArcMap中的TOC中的图层复制到剪贴板对我来说是可行的: //Get the Data from the Clipboard IDataObject clipBoardDataObject = Clipboard.GetDataObject(); //The format of the object data is "ESRI Layers" (this can be checked using clipBoardDataObject.GetFormats();) MemoryStream geomStream = clipBoardDataObject.GetData("ESRI Layers") as MemoryStream; byte[] bytes = geomStream.ToArray(); IMemoryBlobStreamVariant memoryBlobStreamVariant …

6
带有app.settings的ArcMap加载项无法识别app.config的更改?
我已经开发了一个需要配置文件的ArcMap加载项。花了一段时间尝试从单个App.Config文件中读取配置值(并始终为null)之后,我相信该加载项无法从此处读取值,因为它是一个类库,并且正在寻找调用应用程序(ArcMap)我的配置文件,当我要求一个键的值(因此为null)时。 为了解决这个问题,我使用了一个App.Settings文件,该文件可以很好地读取。创建此文件还将在环境中引入一个App.Config文件,Visual Studio似乎在开发过程中使两个文件保持同步。 现在已经部署了外接程序,我需要能够更改配置值(例如,日志文件位置)。我尝试打开/解压缩.esriaddin文件并在那里更新App.Config文件,但是该加载项保留了与编译时相同的配置值。我知道新的App.Config值将保留在.esriaddin文件中,因为关闭存档后我可以再次查看它们。 有谁知道配置外接程序并允许此配置在部署后可更新的可靠方法?任何建议都非常受欢迎,因为我为此需要一个自定义配置文件似乎很荒谬。 App.Settings值在应用程序级别,并且当前App.Settings和App.Config都具有构建操作:无/不复制。


2
避免使用.NET进行ArcObjects地理处理失败?
我们可以使用ArcToolbox中的一些不错的功能,但是由于某些原因,它无法正常工作。它甚至都没有抛出错误。 我的软件在ArcMap中运行,所以不需要再次进行AoInitialize了吗? public void Execute() { InitializeProduct(); try { Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; FeatureToPoint featureToPoint = new FeatureToPoint(); string outputPathName = CurrentWorkspace.PathName + "\\teste_centroide"; featureToPoint.in_features = InputFeatureClass; featureToPoint.out_feature_class = outputPathName; featureToPoint.point_location = "INSIDE"; IGeoProcessorResult result = (IGeoProcessorResult)gp.Execute(featureToPoint, null); if (result == null) { for (int i …

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.