查询时出错 An expected Field was not found or could not be retrieved properly. [SHAPE.AREA] 解决方法
2014-01-03 10:27
701 查看
本来做的事情是将SDE中任意范围内的要素按查询条件导出到文件地理数据库,最初使用的是IFeatureDataConverter接口的ConvertFeatureClass方法,可是后来发现这个方法不支持注记要素类的导出,且会将其变成多边形要素。于是想到按几何查询条件将一个个要素写入到新建的要素类中,实现代码如下:
搜索时,发现竹子也遇到了这个问题,原因应该是在创建数据库时引用了sourceFeatureClass.Fields,创建之后两者共用一套Fields,查询时会有冲突。实际上因为注记要素类和其他要素类不同,他是采用FDO(Feature
Data Object)技术处理的,在FDO中有模式(Schema)这一概念,我的理解,是因为上述代码中的过程中,新旧两个要素类引用了相同的模式,至于为什么引用了相同的模式会出错,我就不得而知了。关于FDO的技术,可以参考博客GIS解决之道---深入FDO、AutoCAD Map 3D和MapGuide
知道了原因,那就容易找到解决方案了,核心是在创建新要素类时不要引用原来的Fields,方法有两种:
一种方法是用IClone克隆一个,代码如下
另一种方法是如竹子,自己新建Fields
IFeatureClass targetFeatureClass = (targetWorkspace as IFeatureWorkspace).CreateFeatureClass(fcName, sourceFeatureClass.Fields, null, null, sourceFeatureClass.FeatureType, "shape", ""); IFeatureCursor pFeatureCursor = sourceFeatureClass.Search(pSpatialFilter, false); IFeature sFeature = pFeatureCursor.NextFeature(); while (sFeature != null) { AddFeatureToFC(targetFeatureClass, sFeature); sFeature = pFeatureCursor.NextFeature(); } Marshal.ReleaseComObject(pFeatureCursor);可是每当运行到
IFeatureCursor pFeatureCursor = sourceFeatureClass.Search(pSpatialFilter, false);时就会报错 An expected Field was not found or could not be retrieved properly. [SHAPE.AREA] ,有时候会报错Failed sending the dataset deleted notification to a workspace extension. [Survey Database]。代码上的微调会导致出现不同的错误,至今还没搞明白是为什么。不过也发现,只有注记要素类才会发生这种错误,其他点线面要素类是不会发生的。
搜索时,发现竹子也遇到了这个问题,原因应该是在创建数据库时引用了sourceFeatureClass.Fields,创建之后两者共用一套Fields,查询时会有冲突。实际上因为注记要素类和其他要素类不同,他是采用FDO(Feature
Data Object)技术处理的,在FDO中有模式(Schema)这一概念,我的理解,是因为上述代码中的过程中,新旧两个要素类引用了相同的模式,至于为什么引用了相同的模式会出错,我就不得而知了。关于FDO的技术,可以参考博客GIS解决之道---深入FDO、AutoCAD Map 3D和MapGuide
知道了原因,那就容易找到解决方案了,核心是在创建新要素类时不要引用原来的Fields,方法有两种:
一种方法是用IClone克隆一个,代码如下
IClone clone = sourceFeatureClass.Fields as IClone; IFields pFields = clone.Clone() as IFields;
另一种方法是如竹子,自己新建Fields
相关文章推荐
- 解决 MySQL manager or server PID file could not be found! 的方法
- 解决 MySQL manager or server PID file could not be found! 的方法
- eclipse 安装 ADT 出错:requires 'org.eclipse.wst.sse.core 0.0.0' but it could not be found 解决方法
- 如何解决The type or namespace name 'ScriptService' could not be found (are you missing a using directive or an assembly reference?)
- Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
- 出现"cannot be resolved or is not a field"莫名错误的解决方法
- classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar问题的解决方法
- could not be found (are you missing a using directive or an assembly reference?)
- IIS出现The specified module could not be found解决方法
- The type or namespace name 'log4net' could not be found (are you missing a using directive or an assembly refere
- The type or namespace name '***' could not be found (are you missing a using directive or an asse
- MySQL is running but PID file could not be found(解决方法)
- The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an asse
- Exchange 2013 DAG报错“The fully qualified domain name for node “DAG” could notbefound”解决方法
- MySQL manager or server PID file could not be found! 的方法
- 详解PostgreSQL成功安装oracle_fdw方法,解决the specified procedure could not be found错误
- IIS出现The specified module could not be found解决方法(zhuan)
- C++ Debugging information *.exe cannot be found or does not match (C++不能调试解决方法)
- Roundcube 无法删除邮件错误解决方法>服务器错误UID COPY: The folder could not be found.