如何在对象中获得不相交的功能

5229
10
跳到解决方案
2015-05-01 06:03
akshayloya
通过
临时贡献者II

你好,

我有两个特色课程。我让它们都相交。我必须返回不与另一个相交的特征。

让我们举个例子。

我有两个特色班:乡村和大学。我让它们都相交。

我的问题是“选择人口大于500但没有大学的村庄。”

所以人口更多的村庄运行得很好然后它在这些村庄里搜索大学。

我所需要的就是选择没有大学的村庄。

任何帮助都是值得感激的。提前感谢

问候

标签(2)
0荣誉
1解决方案

接受的解决方案
JavierArtero
通过
新贡献者III

你好,Akshay,

当你在ISpatialCacheManager中调用FillCache方法时,你必须指定缓存的范围作为参数。

你可以通过任何你想通过的程度。

它可以是可见程度,可以通过IActiveView。范围在ArcObjects帮助。net开发人员。

或者可能是地图上感兴趣的区域(IMap。ArcObjects的兴趣区域(帮助。net开发者)

或您创建的任何IEnvelope。

希望对大家有所帮助。祝你好运。

在原帖子中查看解决方案

0荣誉
10个回答
JoshuaBixby
通过 MVP尊敬贡献者
MVP尊敬贡献者

这可以通过在ArcMap中使用Select By Attribute和Select By Location两步来完成。首先,选择所有人口超过500人的村庄。然后,“从当前选定的特征中删除”有学院的村庄。

如果编写脚本,类似于:

arcpy。SelectLayerByAttribute_management("villages","NEW_SELECTION", "population > 500")SelectLayerByLocation_management(“villages”,“INTERSECT”,“colleges”,“”,“REMOVE_FROM_SELECTION”)
0荣誉
akshayloya
通过
临时贡献者II

嗨,约书亚,

我需要解决的对象。

谢谢你的回复。

问候

OwenEarley
通过
定期撰稿人

你可以使用相同的工具在ArcObjects中使用Geoprocessor管理的程序集-例如:

使用ESRI.ArcGIS.Geoprocessor;使用ESRI.ArcGIS.DataManagementTools;…gp = new Geoprocessor();var tool = new SelectLayerByAttribute();工具。In_layer_or_view = "villages";工具。selection_type = "NEW_SELECTION";工具。where_clause = "population > 500"; gp.Execute(tool, null);
JoshuaBixby
通过 MVP尊敬贡献者
MVP尊敬贡献者

好吧,是我的错。我的一个流聚合了你的帖子,我没有足够注意到你专注于ArcObjects。作为哈维尔Artero他指出,他提供的分离面具应该能让你走上正确的道路。

0荣誉
JavierArtero
通过
新贡献者III

如果你通过ISpatialFilter接口使用SpatialFilter对象,你需要定义你自己的SpatialRelDescription,因为SpatialRel枚举没有你需要的关系。

设置SpatialRel属性为,可以查询不与查询几何相交的特征esriSpatialRelRelation

和SpatialRelDescription属性为“FF*FF****”

更多资料请浏览:ArcObjects 10 .NET SDK帮助

akshayloya
通过
临时贡献者II

谢谢哈维尔。

0荣誉
akshayloya
通过
临时贡献者II

知道如何提高空间查询的性能吗?

0荣誉
JavierArtero
通过
新贡献者III

你可以尝试使用空间缓存。这将从geodatabase中获取数据并将其放入内存中,从而具有更快的访问速度,因为查询不会往返于文件系统。

请看:ISpatialCacheManager在ArcObjects帮助。net开发人员

akshayloya
通过
临时贡献者II

嗨,哈维尔,

我对艺术品不熟悉。

可能是一个愚蠢的问题,但你能告诉我如何设置缓存范围。就像他们在你提供的链接中使用的那样。

0荣誉