問題タブ [arcobjects]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python、ArcObjects、および .AppRef: IAppROT から IMxDocument に取得する方法は?
現在の ArcGIS 10.0 ArcMap セッションへの参照を (ArcObjects COM 経由で) 取得する必要がある外部 Python/comtypes スクリプト (PythonWin) を作成しています。スクリプトはアプリケーション境界の外にあるため、AppROT (実行中のオブジェクト テーブル) を介してアプリケーション参照を取得しています。以下の最初のコード スニペットは、メインの Python ドライバー モジュールです。これは、AppROT からアプリケーション参照を取得する関数 GetApp() です。このコードは問題なく動作し、シングルトンの AppRef オブジェクトで IApplication を返します。理にかなっており、それが ArcObjects リファレンスが示しているようです。今、私の主な目標は、IMxDocument に到達することです。メイン ループでは、IDocument に正常に到達し、タイトルを印刷できます。ただし、次のクエリ インターフェース行はエラーをスローします - NameError: name 'esriArcMapUI' is not defined. エラーは、PythonWin を閉じて再度開いた後でも一貫して発生します (問題があると結論付ける前に、常に試してください)。[ところで、2 番目のコード スニペットは QI の CType() 関数であり、SignHelpers.py モジュールで定義され、そこからインポートされます。] それで、ここに私の質問があります。
(1) IDocument が存在する COM オブジェクトは?
(2) IDocument から目的の IMxDocument に移動するにはどうすればよいですか? 最初に新しい MxDocument オブジェクトを作成する必要がありますか? [ごめん。2 つの質問があります。]
(3) 新しいオブジェクトを作成する必要がない場合、QI はどのように行うのですか?
私は数年前に VB6 で多くの ArcObjects の作業を行ったので、現時点では明示的な QI と名前空間が問題になっています。IMxDocument にたどり着いたら、家から解放されます。誰でもこれで私に与えることができる助けをいただければ幸いです。
また、以下のコードのフォーマットについてお詫び申し上げます。Python コードを正しくフォーマットする方法がわかりませんでした。インデントが機能せず、Python コードの一部が書式設定文字として解釈されます。
arcgis - ArcObjects: 色にマップされた double 値を使用して IRaster を保存する
いくつかの色にマップされたセルに double 値を使用して IRaster を保存するにはどうすればよいですか? たとえば、(-inf; -50] は青にマップされ、[+50; +inf) は黄色にマップされ、その他は徐々に計算されます。
arcobjects - 縮尺記号または方位記号をマップ コントロールに直接追加するにはどうすればよいですか?
私はすでに SurroundFrames と MapSurrounds を調べましたが、これはこれらの要素を印刷ページに追加したい場合のようです。一方、私はライブ アプリケーション内で MapControl を使用しています。Google マップで表示されるのと同じように、これらの要素をマップ上に直接表示したいと考えています。
カスタム シンボルとキャプチャ イベントを使用してこれらのものを最初から追加する必要がありますか、それとも ArcObjects は何らかの方法でこれを自動化しますか?
gis - ArcObjectsを使用してアクセスしたdbfファイルのスキーマロックをどのように削除しますか?
ArcGIS Desktop/Server用のカスタムジオプロセシングツールを作成しています。ツールの実行中に、dbfファイルを作成し、カーソルを使用してその内容にアクセスします。このファイルのロックは、ツールの実行が終了した後も残り、ArcMap/ArcCatalogを再起動することによってのみ削除できます。スキーマロックを削除するプログラム的な方法はありますか?
以下のコードに1行ずつステップインしました。ITable ArcObjectを作成すると、「。sr.lock」で終わるロックファイルが作成され、ICursorオブジェクトを作成すると、dbfファイルと同じディレクトリに「.rd.lock」で終わるロックファイルが作成されます。下部にあるReleaseComObjectメソッドを使用しなくても、両方のファイルが保持されます。カーソルから2番目のロックファイルを削除できますが、テーブルに関連付けられているファイルは取得できません。dbfファイルを削除しても、ロックファイルは保持され、ArcMap/ArcCatalogを閉じるまで親ディレクトリを削除できません。
ここに解決策を示唆するコードがありますが、そのコードの要素が欠落しています。
アップデート:
dbfがロックされていないことがわかりましたが、dbfに関連付けられた漂遊ロックファイルがありました。ArcCatalogの実行中に、テーブルを削除することはできましたが、dbfを含むフォルダーを削除することはできませんでした。ArcCatalogGUIまたはWindowsExplorerを使用しているときに、親ディレクトリの削除に失敗しました。Delete_managementジオプロセシングツールを使用してフォルダーを削除できました。
ArcObjects以外のメソッドを使用してdbfにアクセスすることを検討していましたが、後でフィーチャクラスとジオデータベースでこの問題が発生する可能性があることに気付いたため、ArcObjectsを引き続き使用するのが最善でした。
この問題をより適切に管理するために、スクラッチワークスペース(指定されていない場合はシステム温度)にテーブルを作成し、アクセスが終了したらファイルを正しい宛先に移動する予定です。
python - Python、comtypes、ArcObjects:AppROTオブジェクトの作成中にエラーが発生しました
comtypes
Python2.6.5およびArcGIS10SP1でArcObjectsを試しています。この回答で説明されているArcObjectsOLBをラップするために純粋なPythonメソッドを使用していますが、comtypes.CoCreateInstance
メソッドでエラーが発生します。
これが私が実行しているコードです:
そして、これがスクリプトからの出力です。
あなたが持っているかもしれない洞察に感謝します!
arcobjects - ArcGISMapServiceからArcMapレイヤーを作成する方法
ArcGIS Server Mapサービスから作成されたILayerをArcObjectsを使用してIMapに追加したいのですが、その方法がわかりません。
次のコードでIMapServer3を取得しています。ここで、mapName=マップサービスです。
IMapServerGroupLayerからILayerを取得できるようですが、IMapServerGroupLayerが使用しているものとは異なる接続タイプを探しているようです。
マップサービスからILayerを取得する例がある場合は、ご協力いただければ幸いです。
vb.net - VB6からVB.NETへの変換-System.Collections.IEnumerator
VB6からVB.NETに変換しようとしているかなり長いコードブロックがあります。ArcObjects GISコードは、基本的にテーブルを調べ、一連のGISレイヤーをグループ化して、ArcMapの目次に追加します。Visual Studio 2010でテストするときに、この行に問題があります。
VB6ラインはこれでした:
追加私はそれをこれに変換する必要があると言われました:
また、私はこの行を変更する必要がありました(4x):
これに:
VB6バージョンの「value」は文字列を返していましたが、.NETバージョンの「value」は「」またはnullを返しています。文字列を返すために「値」を取得するにはどうすればよいですか?これが長いコードです。
ありがとう
vb.net - VB から VB.NET クラスへの移行中にインターフェイスを実装する
CenterSnap.clsを vb バージョンから vb.NET に移行しています。vb6 プロジェクトを VS 2008 にインポートした後、次の 2 つのエラーについて混乱しています。
エラー 1
エラー 1 クラス 'CenterSnap' は、インターフェース 'ESRI.ArcGIS.esriSystem.IPersistVariant' の 'ReadOnly Property ID As UID' を実装する必要があります。実装するプロパティには、一致する 'ReadOnly' または 'WriteOnly' 指定子が必要です。C:\Projects\VB_ActiveX_dll\StackMap\StackMap\CenterSnap.vb 9 16 StackMap
エラー 2
エラー 2 インターフェイス「ESRI.ArcGIS.esriSystem.IPersistVariant」に一致するプロパティがないため、「IPersistVariant_ID」は「ID」を実装できません。C:\Projects\VB_ActiveX_dll\StackMap\StackMap\CenterSnap.vb 16 94 StackMap
なぜImplements ESRI.ArcGIS.esriSystem.IPersistVariant
実装されていないのですか?プロジェクトで参照されている ESRI.esriSystem があります。
orm - Dynamic Proxy : コンストラクターのラッピング
別のタイプのデータ プロバイダー (ESRI の .NET ライブラリを使用する ESRI のジオデータベース) 用の Active Record の実装 (Castle のイニシアチブについては知っていますが、非常に優れています) の作成に挑戦しており、興味深いことに到達しています。
それでも質問があります。次のような ActiveRecord クラスがあります。
DynamicProxy に移動してプロキシを生成する静的な Create メソッドがあります。しかし、継承クラス用に生成されたインスタンスもプロキシされるように強制するにはどうすればよいでしょうか?
テストを見てみましょう。最初の 3 つのテストは通常どおりインターセプトされますが、4 番目のテストはインターセプトされません。A)ユーザーが独自のクラスをインスタンス化するのを防ぐ(私の意見ではAPIの悪いアプローチ)か、継承されたクラスコンストラクターからプロキシを返す方法を見つける必要があります。
つまり、ユーザーが新しい Class() を作成するたびに、プロキシされたオブジェクトを返す必要があります。継承を許可しながらそれは可能ですか?
ありがとう!
arcobjects - FromPoint はそれ自身の IPolyline5 と交差しません
Polyline と Point FeatureClass があります。以下のように、IPolyline5 の FromPoint と ToPoint の両方のポイント レイヤーにポイント フィーチャを作成します。
その後、次のような方法で始点ジオメトリと終点ジオメトリの両方を実行して、ポリライン フィーチャクラスから交差するすべてのポリライン フィーチャを見つけます。
少なくとも、インターセクト フィルタは、2 つのポイントを取得したポリラインを検出する必要があります。奇妙なことに、FromPoint では機能しますが、ToPoint では機能しません。
どちらのフィーチャクラスも、同じ地理座標系と投影座標系を使用しています。
私は愚かなことをしているといいのですが、何がわからないのですか。