FAQ
縮尺によってレンダラーを変化させる方法

ナレッジ番号:5320 | 登録日:2023/07/26 | 更新日:2024/11/21

概要

ScaleDependentRenderer(縮尺依存レンダラー)を利用すると、1 つのレイヤーが縮尺に応じて異なるレンダラーで表示されるように設定することができます。 例えば道路を表示する際に、全体表示にした時はどの道路も同じシンボルで表示され、狭い範囲にズームインした時は各道路が属性によって個別値レンダラーで表示され、特に重要な道路は太く目立たせて表示させるといった具合です。

ScaleDependentRenderer は ArcGIS のインターフェイスからは設定することができず、プログラムコードによってのみ実現可能です。 このような縮尺に依存したシンボル表示は、複数のレイヤーを利用して別の方法で実現することもできます。例えばそれぞれのレイヤーに対して IFeatureLayer::MinimumScale と IFeatureLayer::MaximumScale を利用して、それぞれのレイヤーが表示されるための有効な縮尺範囲を設定することで、縮尺に応じた制御(縮尺によって表示されるレイヤが切り替わる)を行うことができます。この方法は、ScaleDependentRenderer とは異なり、ArcGIS の標準機能で簡単に実現することができます。

サンプル コード

以下のサンプル コードでは ScaleDependentRenderer を、コンテンツ ウィドウの一番上にあるレイヤーに対して設定します。 この例では 3 種類のレンダラを用意しますが、 縮尺が 27,000,000 までは個別値分類のレンダラー(UniqueValuerenderer)、縮尺が 100,000,000 までと 400,000,000 までで異なるレンダラー(SimpleRenderer)を割り当てています。 この例では 400,000,000 を超える縮尺ではシンボルは表示されなくなります。 

ScaleDependentRenderer で使用する 3 つのレンダラーを作成する、あるいは取得する部分は今回のサンプルでは省略しています。各レンダラーの詳細方法については、下記「関連情報」のFAQでご確認ください。
IMxDocument pmxdoc = (IMxDocument)ArcMap.Document;
IScaleDependentRenderer pScaleRend =  new ScaleDependentRenderer();

pScaleRend.RendererCount = 3;
pScaleRend.set_Break(0, 27000000);
pScaleRend.set_Break(1,100000000);
pScaleRend.set_Break(2,400000000);
 
//各レンダラーの詳細設定を行います。
//IUniqueValueRenderer pUniqueValuerenderer = 省略; // 個別値
//ISimpleRenderer pSimpleRend1 = 省略; // 単一シンボル
//ISimpleRenderer pSimpleRend2 = 省略; // 単一シンボル

pScaleRend.set_Renderer(0, pUniqueValuerenderer);    
pScaleRend.set_Renderer(1,pSimpleRend1);
pScaleRend.set_Renderer(2,pSimpleRend2);

IGeoFeatureLayer pGFLayer = (IGeoFeatureLayer)ArcMap.Document.FocusMap.get_Layer(0);
pGFLayer.Renderer = (IFeatureRenderer)pScaleRend;
ArcMap.Document.UpdateContents();
ArcMap.Document.ActiveView.Refresh();
Dim pmxdoc As IMxDocument = CType(My.ArcMap.Document, IMxDocument)
Dim pScaleRend As IScaleDependentRenderer = New ScaleDependentRenderer

pScaleRend.RendererCount = 3
pScaleRend.Break(0) = 27000000
pScaleRend.Break(1) = 100000000
pScaleRend.Break(2) = 400000000

'各レンダラーの詳細設定を行います。
'Dim pUniqueValuerenderer As IUniqueValueRenderer = 省略' 個別値
'Dim pSimpleRend1 As ISimpleRenderer = 省略' 単一シンボル
'Dim pSimpleRend2 As ISimpleRenderer = 省略' 単一シンボル

pScaleRend.Renderer(0) = pUniqueValuerenderer
pScaleRend.Renderer(1) = pSimpleRend1
pScaleRend.Renderer(2) = pSimpleRend2

Dim pGFLayer As IGeoFeatureLayer = CType(My.ArcMap.Document.FocusMap.Layer(0), IGeoFeatureLayer)
pGFLayer.Renderer = CType(pScaleRend, IFeatureRenderer)
My.ArcMap.Document.UpdateContents()
My.ArcMap.Document.ActiveView.Refresh()

補足情報

メタデータ

機能

種類

製品