ホーム » ARCGIS
「ARCGIS」カテゴリーアーカイブ
IMapのコピー
axMapControlに表示しているMAPの内容をaxMapControlにコピー
[code]
IObjectCopy oc = new ObjectCopyClass();
axMapControl2.Map = oc.Copy(axMapControl1.Map) as IMap;
[/code]
ラスタカタログのWireFrame表示を制御
ラスタカタログをMapControl上に表示した場合、表示タイルが9を超えるとWireFrameで表示される。
WireFrameで表示された例
この数値「9」を変えるには
[code]
IWorkspaceFactory2 wsf = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass();
IRasterWorkspaceEx ws = (IRasterWorkspaceEx)wsf.OpenFromFile(@"e:\newortho.gdb", 0);
IRasterCatalog cat = ws.OpenRasterCatalog("cat");
IGdbRasterCatalogLayer rastercatalogLayer = new GdbRasterCatalogLayerClass();
IRasterCatalogDisplayProps props = (IRasterCatalogDisplayProps)rastercatalogLayer;
props.DisplayRasters = 20;
rastercatalogLayer.Setup((ITable)cat);
axMapControl1.AddLayer((ILayer)rastercatalogLayer);
[/code]
これで20個まではラスタが表示される
ちなみにArcMap上ではレイヤプロパティで設定
パーソナルジオデータベース上のラスタカタログをaxMapControlに表示
ラスタカタログ名は「cat」
間違ったコードを修正
[code]
IWorkspaceFactory2 wsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
IRasterWorkspaceEx ws = (IRasterWorkspaceEx)wsf.OpenFromFile(@"f:\img3.mdb", 0);
IRasterCatalog cat = ws.OpenRasterCatalog("cat");
IGdbRasterCatalogLayer rastercatalogLayer = new GdbRasterCatalogLayerClass();
rastercatalogLayer.Setup((ITable)cat);
axMapControl1.AddLayer((ILayer)rastercatalogLayer);
[/code]
間違ったコード
[code]
IWorkspaceFactory2 wsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
IRasterWorkspaceEx ws = (IRasterWorkspaceEx)wsf.OpenFromFile(@"f:\img3.mdb", 0);
IRasterDataset rasterDataset = ws.OpenRasterDataset("rc");
IRasterLayer rasterLayer = new RasterLayer();
rasterLayer.CreateFromDataset(rasterDataset);
axMapControl1.AddLayer(rasterLayer);
[/code]
[code]
IWorkspaceFactory2 wsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
IRasterWorkspaceEx ws = (IRasterWorkspaceEx)wsf.OpenFromFile(@"f:\img3.mdb", 0);
IRasterCatalog cat = ws.OpenRasterCatalog("cat");
IGdbRasterCatalogLayer rastercatalogLayer = new GdbRasterCatalogLayerClass();
rastercatalogLayer.Setup((ITable)cat);
axMapControl1.AddLayer((ILayer)rastercatalogLayer);
IRasterDataset rasterDataset = ws.OpenRasterDataset("rc");
IRasterLayer rasterLayer = new RasterLayer();
rasterLayer.CreateFromDataset(rasterDataset);
axMapControl1.AddLayer(rasterLayer);
[/code]
ちなみにファイルジオデータベースでは以下?未確認
[code]
IWorkspaceFactory2 workspaceFactory = new FileGDBWorkspaceFactoryClass();
IRasterWorkspaceEx ws = (IRasterWorkspaceEx)workspaceFactory.OpenFromFile(FGDBPath,0);
以下省略
[/code]
パーソナルジオデータベースにラスタカタログを作成
ArcMap上で複数のラスタデータを同一のレイヤとして扱うためにパーソナルジオデータベースにラスタカタログを作成。
※ArcMapからはRasterliteを塚なかったため!
ArcMap10.4のカタログ上でパーソナルジオデータベース「newimg.mdb」を新規作成
同様にカタログ上で作成したデータベースを選択してラスタカタログを新規作成
名称以外はデフォルトの設定
以上でラスタカタログの作成は終了
次に作成したラスタカタログにラスタデータセットを追加
カタログ上で先ほど作成したカタログを選択してラスタデータセットの読み込みを選択
対象の画像ファイルを選択
※もちろんワールドファイルはあるものとする
MapDocumentClassのコンストラクタはないと言われました
このコードをコンパイルすると
[code]
IMapDocument mapdoc = new MapDocumentClass();
[/code]
エラーが表示された
[code]
The type ‘ESRI.ArcGIS.Carto.MapDocumentClass’ has no constructors defined
[/code]
いやいやほかのプロジェクトでは全く問題ないしと思って調べると
stackoverflowさんに答えがありました
Interop type cannot be embedded
問題となったクラスのアセンブリの参照設定のプロパティ「embed Interrop Type」をfalseにすればよいらしい
※以下のようにコードを修正してもよいみたい
[code]
IMapDocument mapdoc = new MapDocument();
[/code]