問題タブ [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.
c# - ジオプロセシング ツールごとに新しいジオプロセッサ オブジェクトを作成する必要がありますか?
よくある話: C# を使用して ArcMap 拡張機能を開発しています。ほとんどの問題は、ArcToolbox のあらゆる種類のジオプロセシング ツールを使用して解決できます。一般的により望ましいものは次のとおりです。
- ツールごとに新しいジオプロセッサ オブジェクトを作成しますか?
- 1 つのジオプロセッサ オブジェクトを再利用していますか?
1) が推奨される場合、1 つのツールが実行された後に com オブジェクトを解放する必要がありますか? GC.Collect() の呼び出しについてはどうですか?
2) が推奨される場合、シングルトン パターンを使用するなど、一度インスタンス化して何度も再利用するのは良い方法ですか?
私の個人的な経験では、2 番目の方法を使用すると、コードのデバッグ中に重大なメモリ アクセス違反が発生します。
c# - ArcObjectsのReverseGeoCodingを介して複数の交差点の結果を見つけるにはどうすればよいですか?
私が取り組んでいるプロジェクトでは、ポイントの近くの交差点を見つける必要があります(通りの中心線レイヤーを検索します)。検索の90%以上で適切な結果が得られているようですが、場合によっては、ArcObjectsに関する限り、技術的には交差点である交差点が得られますが、必要なものほどではありません。
例として、S。Main Stの特定の地点に最も近い交差点を検索すると、S。MainStとFirstStの交差点を取得する必要があります。ただし、その交差点はたまたまN.MainStの交差点です。 S. Main St、W。First St、E。First St.この結果、交差点を検索するポイントで逆ジオコードを実行すると、N。MainStとS.MainStの単一の結果が得られます。
1つの交差点だけでなく、同じポイントですべての交差点を取得する方法はありますか?そうでない場合、利用可能な結果をフィルタリングする方法はありますか?
以下の私の現在のコードは、intersectionName変数のN.MainとS.Mainの値で終わるものです。
vb.net - arcobjects の文字列から変数を作成する方法は?
これは、単純な答えを伴う単純な質問であることを願っています。リスト ボックスまたは 4 年 (2006 年から 2009 年など) のようなリストがある場合、pTable2006、pTable2007 などの名前でこれらの年の変数をプログラムで作成するにはどうすればよいですか (もちろん ITable として)。
これが不可能で、宣言でこれらのテーブルを公に宣言した場合 (pTable2006 を ITable として、pTable2007 を ITable としてなど)、ユーザーの選択に基づいてこれらの変数をプログラムで割り当てるにはどうすればよいですか? 私が求めているのは、ユーザーが2006年と2007年を選択したい場合、これをどのように書くことができるかということです: pTable & ListBox.Items.Item(0) = [テーブルパス文字列] & ListBox.Items.Item(0) ( 「リストボックス」の構文は無視してください。例を考えようとしているだけです)
それが理にかなっていることを願っています。それを尋ねる最善の方法はわかりませんが、pTable & "string" のようなものを入れるたびにエラーが発生します。
ありがとう、エイドリアン
c# - 型 T の拡張メソッドを記述します。T のフィールドに型制約を追加するにはどうすればよいですか?
初期状況:
私は独自のフレームワーク ( ESRIのArcGIS Engine ) を使用しており、これをいくつかの新しい機能で拡張したいと考えています。このために、C# で拡張メソッドを使用することにしました。
この質問に関連するフレームワーク API の部分を以下に示します。
私がしたいこと:
IFeature
以下を可能にする拡張メソッドを作成したいと思います。
問題は、ポイント シェイプとポリゴン シェイプ (IPoint
および) の両方が、拡張メソッドが定義されIPolygon
ている同じタイプ ( ) にラップされていることです。からその に向かってのみ取得できますが、その逆はできないためIFeature
、拡張メソッドをオンにする必要があります。IFeature
IFeature
IGeometry
質問:
IFeature
オブジェクトの型はShape
実行時に簡単にチェックできますが (以下のコード例を参照)、コンパイル時にこの型チェックを行うにはどうすればよいでしょうか?
IFeature
(たとえばFeatureWithShape<IPoint>
、このラッパー型で拡張メソッドを定義し、何らかの方法ですべてのIFeature
オブジェクトをこのラッパー型に変換するなど、一般的なラッパー型を使用する方法はありますか?)
arcobjects - 道路シェープファイルのダングルを見つける
道路シェープファイルがあります。トポロジーを作成せずにダングルを見つけたいのですが、arcobject を使用してトポロジーなしでダングルを見つけることは可能ですか? 事前にサンクス
arcgis - 開発者になることを目的とせずに、arcobjects を使い始めますか?
開発者ではなく、開発者になることを目指していない場合、arcobjects を始めるのに最適なルートまたは場所はどこですか?
私は GIS をプロとして長い間、ほぼ 20 年間使用してきましたが、そのほとんどは arcinfo/arcgis です。元気してるよ。私はソフトウェア開発を学んでおり、公開プロジェクトで使用されている小さな Python アプリケーションもある程度成功しています。私は良くない!私は本格的なソフトウェア開発者になりたいわけではありませんが、プログラミングなしではできないこと (例) に出くわし続けています。arcgis の世界では、これは私をかなり率直に python キャンプに入れます。私は python が好きなので問題ありませんが、python は arcobjects に直接アクセスできません。
すっごく、始めなきゃいけないんだけど、どこ?Arcgis のヘルプでは、 ESRI 開発者ネットワークを開始するように言われていますが、年間 1,500 ドルは私の予算ではありません。スレッジ ハンマーを使用して蚊をたたくように思えます。また、.NET、Visual Basic、または Visual C++ のどの言語でしょうか?
ご意見ありがとうございます。
arcobjects - データベースやファイルではなく、メモリからポイントフィーチャを追加するにはどうすればよいですか?
MapControlをC++アプリケーションに埋め込んでいます。このアプリケーションは、独自の非リレーショナルデータベースに関連付けられています。したがって、マップコントロールをGISデータに直接リンクすることはできません。代わりに、自分のポイントフィーチャーをフィーチャーレイヤーにロードするだけです。フィーチャレイヤーを作成するメカニズムは理解していますが、それらはある種のデータソースに関連付けられているようです。ファイルやデータベースを指定せずに、フィーチャデータをレイヤーに直接ロードするにはどうすればよいですか?言い換えれば、私はこれらの機能をメモリ常駐のみにしたいのです。
visual-studio - COMを使用し、まだ「生きている」オブジェクトをクエリする
ESRIのAPIであるArcObjectsを使用して、ArcGISアプリケーション用にプログラミングしています。
どのCOMオブジェクトが生きているかスタック上にあるかを検査できるツールがあるかどうか知りたいです。
私はすでにそれらを解放することを知っていますが、残り物があるかどうかを確認するために各メソッドを調べます。
c++ - ESRI Map ControlでInMemoryWorkspaceFactoryを解放するにはどうすればよいですか?
ESRIマップコントロールをMFC/C++で記述されたカスタムActiveXコントロールに埋め込んでいます。カスタムActiveXコントロールはマップコントロールラッパーとして機能するため、ランタイムのみで非リレーショナルの特定の環境に埋め込むことができます。このサイトのおかげで、フィーチャーポイントをメモリ内のワークスペースにロードすることができます。ただし、ホスティング環境は閉じたときにメモリにスタックするようになりました。これは、InMemoryWorkspaceFactoryを使用している場合にのみ行われます。したがって、私の結論は、ファクトリがファイルまたはリソースをロックし、それを解放しないことによって、ホスト環境が決して閉じない原因になっているということです。
ActiveXコントロールのWM_DESTROYメッセージ中にすべての機能と機能クラスを手動で削除してワークスペースを完全に解放する方法はありますか?IWorkspaceFactoryのCreateメソッドに対応するものはないようです。私のコードはワークスペースファクトリへのすべてのインターフェイスをリリースしていますが、ArcObjectsの内部にはまだ参照が残っているようです。
.net - コードが使用可能なプロセッサ サイクルを使用していないのはなぜですか?
道路網でいくつかの検証チェックを実行する ESRI ArcEditor 用のプラグインを作成しました。ルールがすべて満たされているかどうかを確認するために、基本的に、選択したフィーチャに対していくつかのバッファリングやエンベロープなどを使用して、さまざまな交差を多数実行します。
C#で書かれています。
今気づいたのは、選択した機能に対して特定のアルゴリズムを実行するには、実際には長い時間がかかるということです。私はANTSプロファイラーをロードし、他にできることがほとんどなくなるまでボトルネックを最適化しました.
私が気付いた奇妙なことは、ANTS がタイムラインで実質的に CPU 使用率を報告していないことです。つまり、フラットラインです。次に、検証操作の実行中にタスク マネージャーを使用して、プロセッサが約 10% から 15% 未満にとどまっていることを確認しました。これは私には意味がありません。使用可能なプロセッサー・サイクルを使用していないのはなぜですか?
ArcSDE からすべてをロードするため、I/O は発生しません。また、検証プロセス中にかなりのネットワーク トラフィックがないことも確認しました。これは、おそらく ArcEditor とサーバー間の通信を待っているためだと考えています。次に、サーバー上のプロセッサをチェックして、処理が委任されていないことを確認しましたが、検証プロセス中、CPU 使用率は 1% で安定していました。
次に、ArcEditor がプラグインを実行できる優先度を抑制している、またはそのようなおかしなことをしているのではないかと考えました。そこで、検証ルーチンの代わりに、約 10 秒間 CPU を最大化する数学演算をプラグインしたところ、まさにそれが実行されました。CPU 使用率は 50% 強で安定していました。これは、数学演算が Core 2 Duo のコアの 1 つを使い果たしてしまうことを考えると理にかなっています。だから運がない。また、1GB 以上の RAM が利用可能です。
最後に、perfmon の問題を見つけようとしましたが、うまくいきませんでした。あまり経験がありませんが、何か悪いことは見つかりません。
ArcObjects COM インターフェイスが原因ですか? perfmon で .NET Interop カウンターもチェックしましたが。
私は途方に暮れています。
そのため、どんな助けやヒントも大歓迎です。