今天在進行開啟工作空間操作的時候突然報錯「異常來自 hresult:0x80040351」。
分析後發現是iworkspacefactory實現類的對應關係不對。本來想運算元據庫中的.gdb檔案,但是宣告的時候卻寫成了iworkspacefactory workspacefactory = new shapefileworkspacefactory();後來改成iworkspacefactory workspacefactory = new filegdbworkspacefactoryclass();問題就迎刃而解了。慚愧...
轉乙份「arcengine中開啟各種資料來源(workspace)的連線」,資料來源型別包括sde、personal/file、shapefile、cad資料、影像圖、影像資料集。
1.企業資料庫(sde)企業資料庫需要使用sde來管理,所以需要使用sde的workspace來表示連線。在ae介面中,workspace是由factory開啟的。**如下:
//準備連線引數
esri.arcgis.esrisystem.ipropertyset ppropset=new propertysetclass();
ppropset.setproperty("server","伺服器機器名" );
ppropset.setproperty("instance","sde執行的埠號");
ppropset.setproperty("user","使用者名稱");
ppropset.setproperty("password","口令" );
ppropset.setproperty("version","版本");
sdeworkspacefactory sdewkspfact=new sdeworkspacefactoryclass();
ifeatureworkspace pfeawksp=(ifeatureworkspace)sdewkspfact.open(ppropset,0);
其中唯一需要解釋的可能就是版本(version).對於沒有使用版本或者第一次連線(沒有建立空間資料庫,當然沒有版本了). 該處使用sde.default這個版本。這是預設的版本。
ipropertyset:: setproperty
public void setproperty(string name,object value)
2.個人資料庫(personalgeodatabase、filegeodatabase)
arcengine中個人資料庫為access。
string filepath="e:\\tt.mdb";
accessworkspacefactory fac=new accessworkspacefactoryclass();
ifeatureworkspace space=(ifeatureworkspace)fac.openfromfile(filepath,0); 這是用的最多的一種方式.
如果是filegeodatabasse,則將
filegdbworkspacefactory pwsf = new filegdbworkspacefactory;
ifeatureworkspace pws1= pwsf.openfromfile(spath, 0);
如果用ipropertyset。如下:
//personal geodatabase e.g., database = "c:\\mydata\\mypgdb.mdb"
public iworkspace open_pgdb_workspace(string database)
3.shapefile檔案
shapefile和access的開啟方式有一點相同。也有差異。
//這是shape所在的目錄(注意:是目錄)
string spacepath="e:\\shapefile";
ishapefileworkspacefactory fac=new shapefileworkspacefactoryclass(); ifeatureworkspace space=(ifeatureworkspace)fac.openfromfile(spacepath,0);
ifeatureclass fc=space.openfeatureclass(「china」);
4.autocad dwg檔案
autocad檔案和一般的esri格式不同。所以**會有一點點奇怪。假設有乙個dwg檔案為e:\\cad\\107.dwg 下面是開啟的**:
cadworkspacefactoryclass fac=new cadworkspacefactoryclass ();
string filepath="e:\\cad";
ifeatureworkspace space=fac.openfromfile(filepath,0) as ifeatureworkspace ;
下面是開啟featureclass的**:
//線ifeatureclass polyline =space.openfeatureclass("107.dwg:polyline");
ifeaturelayer layer=new cadfeaturelayerclass ();
layer.featureclass =polyline;
//點ifeatureclass point=space.openfeatureclass ("107.dwg:point");
layer=new cadfeaturelayerclass ();
layer.featureclass =point;
//面ifeatureclass polygon=space.openfeatureclass ("107.dwg:polygon");
layer=new cadfeaturelayerclass();
layer.featureclass =polygon;
//註記
ifeatureclass anno=space.openfeatureclass ("107.dwg:annotation"); layer=new cadannotationlayerclass();
layer.featureclass =anno;
5.影像**件
//檔案路徑
string filepath="e:\\image\\117.tif";
irasterlayer rasterlayer=new rasterlayerclass();
rasterlayer.createfromfilepath(filepath );
6.資料庫中的影像資料集。
//資料庫連線
iworkspace space=openspace();
//開啟資料庫的方式
irasterworkspaceex rasterspace=(irasterworkspaceex)space;
irasterdataset rasterdataset=rasterspace.openrasterdataset (setname.name );
irasterlayer raslayer=new rasterlayerclass();
raslayer.createfromdataset(rasterdataset);
irasterworkspaceex:提供建立和開啟柵格目錄或柵格資料集的方法。
但是irasterworkspaceex,irasterworkspace, irasterworkspace2都有openrasterdataset。irasterworkspace經常也可用於開啟柵格資料,如:
pworkspacefactory = new rasterworkspacefactoryclass();
prasterworkspace = (irasterworkspace)pworkspacefactory.openfromfile(filepath, 0);
irasterdataset prasterdataset = (irasterdataset)prasterworkspace.openrasterdataset(filename);
irasterlayer prasterlayer = new rasterlayerclass();
prasterlayer.createfromdataset(prasterdataset);
異常來自 HRESULT 0x80040E14
突然聽客戶說系統只要涉及到編輯和新增功能就會出現 異常來自 hresult 0x80040e14 這個異常也見過,他是出現在訪問站點的時候,只要輸入siteurl 就會出現 異常來自 hresult 0x80040e14 以前的出現異常的主要原因是c盤的空間不足,導致異常。刪除 c program ...
使用C 異常來取代exit 函式
使用c 異常來取代exit 函式 從c語言開始接觸c 的人,恐怕都知道exit 這個函式,似乎現在很多的程式設計師都有這樣一種習慣,在程式一遇到錯誤 或任務剛完成時,把呼叫exit 函式當成是一種最好的結束程式的方法。在以前遺留的許多老式c c 中,這種現象非常普遍,但當手頭的軟體專案逐步進展並越來...
用異常來通知執行緒安全結束
突然領悟到異常其實是中斷。於是想到用異常來通知執行緒安全結束,就是不知道這樣做的效率怎麼樣,據說catch exception很費時間。include stdafx.h include windows.h include process.h struct param void close signa...