FeatureClass范围更改

19 篇文章 1 订阅

重新导入

“重新导入”来更改要素类范围,适用于各种数据库(SDEGDBFILEGDBPersonalGDB),下面以SDEGDB为例介绍

当前SDE中存在要素类LDL,它的坐标范围如下图所示

 

可以从新导入这个要素类,在导入的时候重新设置坐标范围,具体过程见下面介绍。

1右键菜单,选择如下图所示的“要素类(单个)C…

2、选择导入的要素类(如下图所示选择了SDE中的LDL要素类);为导入要素类输入新名称(如下图所示“LDL_NEW”);点击窗口右下角的“环境”按钮

3、在弹出的窗口中,展开“高级地理数据库”一项,如下图所示

4、找到“输出XY”值域项,下拉列表里选择“如下面指定选项”;然后在下面坐标输入框中输入新的坐标,如下图所示;最后,点击“确定”按钮返回。

5、点击下图中的“确定”按钮,导入数据;

6、查看新导入的要素类“LDL_NEW”坐标范围,发现与之前我们设置的坐标范围一致

SDE系统表更改

    本方法只适用于SDE数据库

1、打开SDE中的LAYERS表,找到TABLE_NAME字段值等于”LDL_NEW”的记录,并记下该条记录SRID的值。如下图所示,这个值为“4

2、打开SDE中的SPATIAL_REFERENCES表,在表中找到AUTH_SRID字段值等于44:该值来源于上一步记录的值)等记录;修改FALSEXFALSEY字段值(这两个字段分别对应着minxminy),系统会根据当前的其它设置自动计算maxxmaxy

3、在ArcCatalog中重新打开空间数据库连接,查看要素类LDL_NEW的坐标范围,与前面坐标范围相比较,如下图所示

PGDB系统表修改

    本方法只适用于PersonalGDB*.mdb)数据库

新建一个personalGDB数据库即个人地理数据库,并向其中导入一个要素类LDL

Personal GDB的要素类范围修改与SDE要素类的修改方法很相似,具体过程如下:GDB_GeomColumns

 

1、打开MDB数据库,再打开数据库中的GDB_GeomColumns表,找到TableName字段值等于LDL的记录,并记下该条记录SRID的值。如下图所示,这个值为“2

 

2、打开GDB_SpatialRefs表,在表中找到SRID字段值等于22:该值来源于上一步记录的值)等记录;修改FalseXFalseY字段值(这两个字段分别对应着minxminy),系统会根据当前的其它设置自动计算maxxmaxy

3、在ArcCatalog中刷新数据库节点,查看要素类LDL的坐标范围,与前面坐标范围相比较,如下图所示

    通过更改系统表的方法来修改要素类坐标范围的,在更改完范围之后要重新计算下要素类的空间索引,以保证空间查询速度效率。、

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 ArcGIS Engine 中的 C# 代码来实现这个功能。以下是一个简单的代码示例,它演示了如何打开一个要素文件并将要素保存在 FeatureClass 中,以及如何生成在要素范围之外的均匀分布的随机点: ```csharp using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.DataSourcesFile; // 打开要素文件 IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace workspace = workspaceFactory.OpenFromFile("C:\\data\\", 0); IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("myFeatureClass"); // 获取要素范围 IEnvelope envelope = featureClass.Extent; // 生成随机点 int numPoints = 10; IPoint point = new PointClass(); Random random = new Random(); for (int i = 0; i < numPoints; i++) { // 生成均匀分布的随机点 point.X = envelope.XMin + random.NextDouble() * envelope.Width; point.Y = envelope.YMin + random.NextDouble() * envelope.Height; // 如果点在要素范围内,则重新生成 if (((IGeometry)point).Within(envelope)) { i--; continue; } // 创建要素并添加到 FeatureClass 中 IFeature feature = featureClass.CreateFeature(); feature.Shape = point; feature.Store(); } ``` 注意,这只是一个简单的示例代码,您可能需要根据您的具体情况进行修改。同时,这个代码示例仅使用了 ArcGIS Engine,如果您使用的是 ArcGIS Desktop 或 ArcGIS Pro,您需要使用相应的 API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值