ArcEngine影像圖配準(zhǔn)
Posted on 2007-03-08 16:43 帥子 閱讀(1189) 評(píng)論(0) 編輯 收藏 所屬分類: j2se技術(shù)專區(qū)影像圖配準(zhǔn)主要包括以下幾個(gè)方面
1.打開影像圖
2.配準(zhǔn)
3.影像圖入庫/保存
1.打開影像圖的代碼以前已經(jīng)寫過了。
2.配準(zhǔn)
? 配準(zhǔn) 主要使用IGeoReference這個(gè)接口來完成工作。
? 還有使用ActiveView來進(jìn)行坐標(biāo)轉(zhuǎn)換,將MapControl中鼠標(biāo)的點(diǎn)擊位置 轉(zhuǎn)換為
? 地圖和影像圖上的坐標(biāo)。
? 下面介紹IGeoReference接口
?? 首先RasterLayer實(shí)現(xiàn)了這個(gè)接口
?? CanGeoRef 監(jiān)測(cè)該圖層是否可以做配準(zhǔn)
?? PointsTransform 將鼠標(biāo)的位置 轉(zhuǎn)換為柵格文件上的相對(duì)坐標(biāo)。
?? Rectify 將糾正的結(jié)果保存為一個(gè)新的柵格文件 相當(dāng)于另存為
?? Register 糾正的結(jié)果生成World文件 和柵格文件保存在同一個(gè)目錄下
?? Reset 取消糾正 但是Register 之前的操作不能恢復(fù)。
??
?? 最重要的是下面三個(gè)
?? Shift? 一點(diǎn)糾正 就是平移
?? TwoPointsAdjust 兩點(diǎn)配準(zhǔn) 有一定的縮放
?? Warp 三點(diǎn)或以上配準(zhǔn)
??
?? 注意事項(xiàng)
?? 1.每次Register是一個(gè)標(biāo)志階段
??? 這每次配準(zhǔn)的過程中 必須把上次Register 以來的所有配準(zhǔn)點(diǎn)數(shù)據(jù)都使用上。
??? 例如:
??? 首先Register了
??? 然后 1.使用了一點(diǎn)平移
???????? 2.接下來 又接受了一個(gè)點(diǎn) 這個(gè)時(shí)候就要使用 兩點(diǎn)配準(zhǔn)。
???????? 3.接下來 又接受了一個(gè)點(diǎn) 這個(gè)時(shí)候就要使用 三點(diǎn)配準(zhǔn)了。
?? 2.配準(zhǔn)一般還有一個(gè)附加的功能
???? 就是 讓用戶保存每次的配準(zhǔn)過程 并且 提供每次配準(zhǔn)過程的精度。這個(gè)需要自己補(bǔ)充。
3.入庫/金字塔
? 直接來代碼:
? ???IRasterProps props=(IRasterProps)this.pRasterLayer.Raster;
????m_rasEnv=props.Extent;
????IBasicRasterSdeConnection pBasic=new BasicRasterSdeLoader();
????//提供連接信息
????pBasic.ServerName ="服務(wù)期名稱" ;
????pBasic.Instance ="端口號(hào)" ;
????pBasic.UserName ="用戶名" ;
????pBasic.Password ="密碼" ;????
????//提供影像圖
????pBasic.Raster =this.pRasterLayer .Raster ;??
????//名稱
????pBasic.SdeRasterName=rasterNameInDB;
????
????IRasterSdeServerOperation pRo=(IRasterSdeServerOperation)pBasic;
????//導(dǎo)入數(shù)據(jù)
????try
????{?????
?????pRo.Create();
?????pRo.ComputeStatistics();
????}
????catch(Exception ex)
????{
?????System.Windows .Forms .MessageBox .Show ("影像數(shù)據(jù)入庫失敗!"+ex.Message );
?????return;
????}
????//建立金字塔
????IRasterSdeStorage2? pRs=(IRasterSdeStorage2)pRo;
????pRs.PyramidOption=esriRasterSdePyramidOptEnum.esriRasterSdePyramidBuildSkipFirstLevel;
????pRs.PyramidResampleType=rstResamplingTypes.RSP_BilinearInterpolation;
????pRo.BuildPyramids();
????這個(gè)影像圖 就這樣到數(shù)據(jù)庫中去了
????
????注意
????一般自己還要建立一個(gè)關(guān)于影像圖的原數(shù)據(jù)表 。用來記錄那些影像圖是屬于自己的。還有名稱的轉(zhuǎn)換問題
????因?yàn)橹形拿Q是不可以的。??