ホーム » 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で表示された例

clip_1

この数値「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個まではラスタが表示される

clip_2
※画像がぼかしを入れてあります

ちなみにArcMap上ではレイヤプロパティで設定

clip_3

パーソナルジオデータベース上のラスタカタログを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]

How to access raster workspaces

パーソナルジオデータベースにラスタカタログを作成

ArcMap上で複数のラスタデータを同一のレイヤとして扱うためにパーソナルジオデータベースにラスタカタログを作成。
※ArcMapからはRasterliteを塚なかったため!

ArcMap10.4のカタログ上でパーソナルジオデータベース「newimg.mdb」を新規作成

clip_2

同様にカタログ上で作成したデータベースを選択してラスタカタログを新規作成

clip_5

名称以外はデフォルトの設定

clip_5

clip_6

以上でラスタカタログの作成は終了

次に作成したラスタカタログにラスタデータセットを追加

カタログ上で先ほど作成したカタログを選択してラスタデータセットの読み込みを選択

clip_7

対象の画像ファイルを選択
※もちろんワールドファイルはあるものとする

スクリーンショット 2016-10-31 14.54.30

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にすればよいらしい
img

※以下のようにコードを修正してもよいみたい
[code]
IMapDocument mapdoc = new MapDocument();
[/code]

Creating a new layer from query results

Creating a new layer from query results

IQueryDef Example

Map上のFeatureの属性を照会

get valules for all fields from selected features

ArcGISの役立つサイト

ArcObjects API Reference for .NET

ArcGIS Resource Center

axMapControl MAPをイメージにエクスポート

Build and export PDF maps using ArcObjects?

Export active view

axMapControl MAPをイメージにエクスポートする際の画質

今度見る
Create JPEG (hi-resolution) from ActiveView Snippet

Why does Exporting Document to JPEG using ArcObjects in Layout View result in bad picture quality?