2016-07-07 8 views
0

私はC#でArcObjectsを使用してWPFを作成しています。プログラムでアクティブなグラフィックスレイヤーをマップに追加する方法はありますか?

フォームにESRI.ArcGIS.Controls.AxMapControlがあり、その上にいくつかのグラフィック要素を描画しようとしています。

私が開発している地図は、ジョージア州の顧客提供mdfです。

私はここで見つけた例を試しています:How to interact with map elements

public void AddTextElement(IMap map, double x, double y) 
{ 
    IGraphicsContainer graphicsContainer = map as IGraphicsContainer; 
    IElement element = new TextElementClass(); 
    ITextElement textElement = element as ITextElement; 

    //Create a point as the shape of the element. 
    IPoint point = new PointClass(); 
    point.X = x; 
    point.Y = y; 
    element.Geometry = point; 
    textElement.Text = "Hello World"; 
    graphicsContainer.AddElement(element, 0); 

    //Flag the new text to invalidate. 
    IActiveView activeView = map as IActiveView; 
    activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); 
} 

これは、マップの座標系に緯度/長いアトランタのを投影する方法を見つけ出すためにしばらく時間がかかったが、私は右のそれを持っていることを確信しています。 AddTextElement()に渡しているx/y値は、マップ上で識別ツールを使用するときに表示される場所データに従って、アトランタエリア内にはっきりと表示されます。

しかし、私はテキストが表示されていません。すべてが正しく動作しているようですが、私はそのテキストを見ていません。

Iは、可能性の数を見ることができます:

  • 私はのTextElementを追加している層が表示されていない、または存在していないが。
  • TextElementのジオメトリとして設定しているポイントに空間参照システムを適用する必要があります
  • テキストは細かい描画ですが、フォントに問題があります - 目に見えないほど小さく、透明な色などです

手がかりがありません。

明らかに私が欠けていたものがあることを期待していました。

私は私の元の投稿以来、私は問題はスケーリングがあることを発見した、これでプレイし続けてきたよう===

- テキストがどこにあるべき、唯一unreadably小さなまで見せています。

これはRich Wawrzonekが提案したものです。

指定したサイズのTextSymbolクラスを設定した場合、サイズが適用され、テキストが大きくなったり小さくなったりします。残念ながら、マップのズームインとズームアウトに合わせてテキストのサイズが変更され、ScaleText = falseを設定しようとしても修正されません。

私の最新の試み:

public void AddTextElement(IMap map, double x, double y, string text) 
{ 
    var textElement = new TextElementClass 
    { 
     Geometry = new PointClass() { X = x, Y = y }, 
     Text = text, 
     ScaleText = false, 
     Symbol = new TextSymbolClass {Size = 25000} 
    }; 

    (map as IGraphicsContainer)?.AddElement(textElement, 0); 

    (map as IActiveView)?.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); 
} 

私は上記のが非常に異なる、通常はESRIサンプルコードで行われている方法よりも組織化されていることを認識しています。私はESRIが読むのが難しくなるようにする方法を見つけますが、1つから別のものに切り替えるのはかなり機械的です。

これは従来のやり方で編成された同じ機能です。その振る舞いは同じでなければならず、まったく同じ動作が見られます。テキストは指定されたサイズに描画されますが、マップがズームするにつれて縮尺が変わります。

public void AddTextElement(IMap map, double x, double y, string text) 
{ 
    IPoint point = new PointClass(); 
    point.X = x; 
    point.Y = y; 

    ITextSymbol textSymbol = new TextSymbolClass(); 
    textSymbol.Size = 25000; 

    var textElement = new TextElementClass(); 
    textElement.Geometry = point; 
    textElement.Text = text; 
    textElement.ScaleText = false; 
    textElement.Symbol = textSymbol; 

    var iGraphicsContainer = map as IGraphicsContainer; 
    Debug.Assert(iGraphicsContainer != null, "iGraphicsContainer != null"); 
    iGraphicsContainer.AddElement(textElement, 0); 

    var iActiveView = (map as IActiveView); 
    Debug.Assert(iActiveView != null, "iActiveView != null"); 
    iActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); 
} 

なぜScaleTextが無視されるのかに関するアイデアはありますか?

+0

クロス投稿http://gis.stackexchange.com/q/201319/115 – PolyGeo

答えて

1

テキスト要素のジオメトリとテキストのみを設定しています。また、SymbolプロパティとScaleTextプロパティを設定する必要があります。 ScaleTextプロパティのbooleanは、マップでスケーリングするかどうかを決定します。 Symbolプロパティは、ITextSymbolインターフェイス経由で作成および設定する必要があります。

Esriの例としてhereを参照してください。

関連する問題