private static IFeatureClass CreatStnShp(string shp)
{
//打开工作空间
IWorkspaceFactory wsfactory = new ShapefileWorkspaceFactoryClass();
string ssss = System.IO.Path.GetDirectoryName(shp);
IWorkspace workspace = wsfactory.OpenFromFile(ssss, 0);
IFeatureWorkspace pFeatWsp = workspace as IFeatureWorkspace; if (File.Exists(shp))
{
DialogResult dr = MessageBox.Show("文件已经存在,是否使用该文件?", "提示",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if ( dr== DialogResult.Yes)
{
return pFeatWsp.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shp));
}
else if(dr==DialogResult.No)
{
//删除已有
DialogResult ddr = MessageBox.Show("是否删除并替换已有文件", "提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (ddr == DialogResult.Yes)
{
string dbffile = System.IO.Path.ChangeExtension(shp, ".dbf");
string shxfile = System.IO.Path.ChangeExtension(shp, ".shx");
string prjfile = System.IO.Path.ChangeExtension(shp, ".prj");
File.Delete(shp);
if (File.Exists(dbffile))
File.Delete(dbffile);
if (File.Exists(shxfile))
File.Delete(shxfile);
if (File.Exists(prjfile))
File.Delete(prjfile);
}
else
{
MessageBox.Show("请重新选择shapfile文件的路径");
}
}
else
{
return null;
}
} IGeometryDefEdit pGeoDef = new GeometryDefClass();
pGeoDef.GeometryType_2 = esriGeometryType.esriGeometryPoint; //设置空间参考
ISpatialReferenceFactory3 spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
ISpatialReference pSr = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); //设置字段
IFieldEdit pField;
IFieldsEdit pFieldsEdit = new FieldsClass();
//设置几何字段
pField = new FieldClass();
pField.Type_2 = esriFieldType.esriFieldTypeGeometry;
pField.GeometryDef_2 = pGeoDef;
pField.Name_2 = "Shape";
pFieldsEdit.AddField(pField);
//产生唯一索引字段
pField = new FieldClass();
pField.Name_2 = "OBJECTID";
pField.Type_2 = esriFieldType.esriFieldTypeOID;
pFieldsEdit.AddField(pField);
//添加station相关字段
//string[] str = new string[]{"NCDCID","WBAN","NAME","COOPID","COUNTRY","STNTYPE"};
string[] str = new string[] { "WBAN", "NAME", "LOCATION", "LAT", "LON"};
foreach (string stt in str)
{
pField = new FieldClass();
pField.Name_2 = stt;
pField.AliasName_2 = stt;
pField.Type_2 = esriFieldType.esriFieldTypeString;
if (stt == "LOCATION")
pField.Length_2 = 60;
else
pField.Length_2 = 30;
pFieldsEdit.AddField(pField);
}
pField = new FieldClass();
pField.Name_2 = "StnHeight";
pField.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField); pField = new FieldClass();
pField.Name_2 = "GndHeight";
pField.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField); IFeatureClass pfeatcls =pFeatWsp.CreateFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shp), pFieldsEdit as IFields, null, null,
esriFeatureType.esriFTSimple, "Shape", "");
IGeoDataset pGeoDs = pfeatcls as IGeoDataset;
IGeoDatasetSchemaEdit pGeoDSe = pGeoDs as IGeoDatasetSchemaEdit;
if (pGeoDSe.CanAlterSpatialReference)
{
pGeoDSe.AlterSpatialReference(pSr);
} return pfeatcls;
}

上面是可正常运行的代码。自己写的时候凭着自己的理解做了部分修改,在字段声明的时候略有不同,如下

IFields pfs = new FieldsClass();
IFieldsEdit pFieldsEdit = pfs as IFieldsEdit;
IField pFieldd = new FieldClass();
IFieldEdit pField = pFieldd as IFieldEdit;

结果在运行的时候出现COM异常,仔细核查了CreateFeatureClass的每个参数,多次检查都没有查到结果。后来修改为文中第一段代码声明方式,再运行成功了。

为了找出错误,我又把声明换回第二段代码,令人郁闷的是,又没异常了。

本文只描述现象,不解释原因

CreateFeatureClass COM异常的更多相关文章

  1. CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access

    在创建要素时出现如下异常,百思不得其解. 后经过多次试验,发现文件名改为其他的就可以了.自出的文件名为"第3条",后将文件名改为"A3"等,则可正常创建. 后再 ...

  2. ArcEngine开发异常:无当前记录

    使用 IFeatureWorkspace.CreateFeatureClass() 方法,出现异常:无当前记录 百度/谷歌没有找到合适的解决之道. 而是用IFeatureWorkspace.Creat ...

  3. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  4. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  5. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  6. 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法

    在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常.   意思是出现了死循环,也就是Model之间有循环包含关系: ...

  7. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...

  8. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  9. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

随机推荐

  1. Linux下永久修改主机名

    红帽系列的Linux发行版主机名存放位置是/etc/sysconfig/network,Ubuntu Linux主机名存放位置是/etc/hostname,所以只要修改主机名存放文件便可以永久的修改计 ...

  2. BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome N ...

  3. Java数据类型中String、Integer、int相互间的转换

    1.Integer转换成int的方法 Integer i;  int k = i.intValue(); 即Integer.intValue(); 2.int转换成Integer int i; Int ...

  4. SQL 删除存在于A表但是不存在B表中的记录

    目的是是的A表和B表某一个列集合相等 delete from A where tagetColumn not in ( select targetColumn from B)

  5. Android Design 4.4中文版发布

    “两年前的今天,我们发布了 Android Design 中文版(旧闻链接). 随着 Android 系统的发展,界面和设计语言都不断的发生变化.韶华易逝.光阴苒冉,Android 进化到了 4.4 ...

  6. css3学习总结3--CSS3图像边框

    border-image属性 .className{ border-image:url(/course/54d1cae088dba03f2cd1fec1/img/border.png) 20 20 2 ...

  7. java中值类型和引用类型的区别

    [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...

  8. Ubuntu和windows共享文件夹

    参考文章: http://www.cnblogs.com/zhengyuxin/articles/1938414.html

  9. android 兼容性测试 CTS 测试过程(实践测试验证通过)

    source: http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明 ...

  10. C# Window Form解决播放amr格式音乐问题

    最近搞一个项目,需要获取微信端语音文件,下载之后发现是AMR格式的录音文件,这下把我搞晕了,C#中的4种播放模式不支持播放AMR,想到都觉得头痛,如何是好?最后找到的方案,其实也简单:windows ...