タグ付けされた質問 「arcobjects」

ArcObjectsは、Esri Inc.のCOMベースのAPIのセットであり、ArcGIS Desktop、ArcGIS Engine、ArcGIS Serverなどの製品で使用されています。

1
左結合を使用したArcObjects
SQLの左結合に相当するArcObjectsコードが必要です。 例:以下のSQLコードがありChecklistIdます。値に基づいて両方のテーブルからレコードをフェッチするのは簡単な結合です。 SELECT T1.ChecklistId, T1.ChecklistName, T2.Latitude, T2.Longitude FROM [dbo].[TableOne] T1 INNER JOIN [dbo].[TableTwo] T2 ON T2.ChecklistId = T1.ChecklistId WHERE T1.ChecklistId = @ChecklistId 上記のSQLクエリをArcObjectsに変換しました。 IQueryDef queryDef = featureWorkspace.CreateQueryDef(); queryDef.Tables = "TableOne, TableTwo"; queryDef.SubFields = "TableOne.ChecklistId, TableOne.ChecklistName, TableTwo.Latitude, TableTwo.Longitude"; queryDef.WhereClause = "TableOne.ChecklistId = '" + checklistId + "' AND TableOne.ChecklistId = TableTwo.ChecklistId"; …

1
ESRI.ArcGIS.AddIns.targetsファイルの機能は何ですか?
私は現在10.2から10.3にアップグレードしていますが、予想どおり、アドインの再コンパイルとVisual Studioバージョンのアップグレードに常にいくつかの問題があります。 ここに記載されている回避策がある既知の問題があります。 私の質問は、ESRI.ArcGIS.AddIns.targetsファイルの機能は何ですか?それは何をし、新しいESRI.ArcGIS.AddIns.11.targetsを以前のESRI.ArcGIS.AddIns.targetsに名前変更するのはなぜですか?ArcGISアプリケーションで使用するために実際のDLLをパッケージ化するのは何ですか?

1
ArcObjects .NET-FeatureClass、Workspace、Factoryを閉じる/リリースする方法
長期にわたるプロセスがあります。リソースリークや不正なデータベース接続を防止したい。 プロセス中の間隔でこれを実行したい: ArcSDE(Oracle)ワークスペースファクトリを取得する 工場からワークスペースを開きます(この時点でデータベース接続が開かれます) ワークスペースに既存のフィーチャクラスまたはテーブルを取得し、 フィーチャクラスまたはテーブルをクエリし、カーソルをループしてビジネスを行います 次に、次のようなものをすべて解放/閉じます。 ArcSDE / Oracleの観点からのデータベース接続とテーブルロック(「sdemon -o info -I users」またはsde.table_locksテーブルのクエリなどによって明らかになる)は、クローズ/解放されます。 プロセスは、ArcSDE / Oracleの再起動に対して回復力があります(つまり、毎晩の再起動後に後で機能しない何かがハングしたままになることはありません)。 RCW、COM参照、およびメモリが解放されます。 基本的に、プロセスは長時間実行されるため、リソースリークや不正な接続が発生していないことを確認し、プロセスがArcSDE / Oracleの再起動に耐えられるようにします。 私は次のような議論を見てきました: .NETのメモリからArcObjectsを解放するためのルールは何ですか? すべてのarcobjectsプログラマがシングルトンについて知っておくべきこと COM参照を解放する方法 シングルトンオブジェクトとの対話 そしてこの、からIの引用 各ワークスペースファクトリは、アプリケーションによって参照される、現在接続されているアクティブなワークスペースのプールを維持します。上記のOpen *メソッドのいずれかが呼び出されると、ワークスペースファクトリは、一致するプロパティセットでワークスペースが以前に開かれているかどうかを確認します。その場合、既存のインスタンスへの参照が返されます。 これらすべてから、おそらくこの順序で、リリースする必要があることがわかります(たとえば、ComReleaserクラスまたは同等のMarshal.ReleaseComObject()ループ)。 カーソル フィーチャクラス/テーブル ワークスペース ワークスペース工場 次に、このような議論が行われ、人々はそれをすべて行います。おそらくSystem.GC.Collect()に振りかけても、データベース接続はまだ存続しています。 おお、教祖、これの最後のストレートドープは何ですか?

2
ArcObjectsスクリプトの実行中に生成されるレイアウトビューの謎の緑の線とは何ですか?
ArcObjectsの第一人者が私に、ページレイアウトのこれらの緑の線は何であり、何をすべきか、またはすべきでないので、それらが表示されないのか教えてもらえますか?添付の画像を参照してください。 私はPythonからArcObjectsを使用しました。私のスクリプトは、データフレームグリッドと経緯線をグラフィックスに変換しています。その結果、単一の要素(テキスト、行など)を再生するためにそれらを抽出する必要があるグループ要素を受け取ります。ただし、この操作(3つの個別のグリッドに対して実行されます)の後に、GraphicContainerの一部ではない、神秘的な緑色の線が表示されます。実際、緑の線は、変換と1経緯線(WGS)からの抽出後にのみ表示されます。 いくつかのガイダンスがあり、ここで働く、それらを取り除く(カット&ペーストまたは削除して、すべてのページ要素を元に戻す)を取得する方法について。ただし、そもそもそれらは避けたい。また、切り取りと貼り付けのいくつかの構成を行った後、3つの画像要素(右下隅)を削除して復元すると、緑色の線が消えることを確認しました。 これに責任があると思われるコード: pGCL.Reset() #reset graphics containere pElem = pGCL.Next() while pElem: pEP3 = CType(pElem, esriCarto.IElementProperties3) if pEP3.Name == '' and pEP3.Type == 'Group': pGE = CType(pElem, esriCarto.IGroupElement3) pGE_no = pGE.ElementCount for i in range(pGE_no): if pGE.ElementCount > 0: pGEe = pGE.Element[0] pGCL.MoveElementFromGroup(pGE, pGEe, 0) else: break pElem = …

2
2つのデータセットに同一のコンテンツがあるかどうかを効率的に(プログラムで)判断する方法
与えられた: ジオデータベースAという名前の100個のデータセットが含ま1 ... 100 b 1 .. b 100という名前の100個のデータセットを含むジオデータベースB プログラムで(*)各データセットのペア(a i、b i)が同じ内容であるかどうかを確認したい。100ペアを比較するので、効率的な比較方法が必要です。理想的には、全体の比較に数秒しかかからないでしょう。 (*) 注:コード例を探しているからではなく(喜んで受け入れます)、「プログラム的」という用語を使用していますが、非常に高速な比較方法を探していることを強調するために、 100のデータセットペアを手動で比較するときに可能です。 私はこの比較方法を自分で実装するつもりなので、基本的に探しているのはアルゴリズムであり、すぐに使えるツールではありません(おそらくオープンソースの場合を除きます)。 データセットの完全な内容を比較する必要があるため(おそらく、データ管理 → データ比較ツールセットのツールを使用するため)、私は不可能を尋ねている可能性が高いことを認識しています。または、少なくともデータセットのハッシュ/ダイジェストを比較しますが、ダイジェストを生成するには、最初にすべてのデータセットのデータを調べる必要があります。 したがって、これまでの私の最善のアプローチは次のとおりです。 (データセットの対た第一判断I、B iは)ことができない可能性が同一の内容を有します。 残りのデータセットのペアに対してのみ、完全なデータ比較を実行します。 私の質問: ArcGISは、クエリを実行できるある種のデータセットダイジェストを自動計算しますか?もしそうなら、どうですか? (私はそのようなことを何も知らないので、私は答えが「いいえ」であることを期待します。私を誤解してください。) 2つのデータセットに同一のコンテンツを含めることができないかどうかを判断する、非常に効率的で信頼性の高い方法は何ですか? (これまでのところ、変更タイムスタンプの比較は信頼性がわかりませんが、データセットのスキーマの比較を検討しました。ArcGISジオデータベースのタイムスタンプの信頼性は?この目的に役立つ他のデータセット特性はありますか?)

2
ArcObjectsを使用して一部のフィーチャクラスのみをxmlにエクスポートする方法は?
一部のフィーチャクラスをxmlファイル( "export xml workspace")にエクスポートする必要があるので、プロセスを自動化したいと思います。ここでは、フィーチャデータセットをxmlファイルにエクスポートする方法の例を見つけました。必要なフィーチャクラスのみをエクスポートするようにコードを変更できませんでした(たとえば、文字 'A'で始まるもののみ)。テーブルとリレーションシップクラスもエクスポートする必要があります(スキーマのみ)。 これはまったく可能ですか?インターフェイスIFeatureClassNameがあることは知っていますが、この場合の使用方法はわかりません。代わりにこれをarcpyで実行する必要がありますか? ArcGIS 10.0 SP3を使用しています。

3
関数型プログラミングはどのような種類のGIS問題に対処しますか?
F#でのArcObjectsの使用に関する@ray vernagusの投稿を読んだ後、疑問に思っていました... より伝統的な形式のプログラミングとは対照的に、関数型プログラミングではどのような種類のGIS問題がより適切に処理されますか? おそらくより具体的には、ArcObjectsでC#を使用するよりも、F#を使用した方がよい場合はいつですか?

3
ArcObjects(ArcGIS for DesktopおよびC#):ArcMap COM UIとカスタム.Net UserControlオブジェクトの間をキャストする方法は?
ArcObjects(9.3.1 SDK)とC#.Netを使用して、ArcGIS for Desktopで実行するユーティリティを作成しています。私のプロトタイプには、2つのコンボボックスとツールを備えたツールバーが含まれています。最初のコンボは目次のレイヤーを選択し、2番目のコンボは選択したレイヤーからフィールドを選択します。このツールは、地図を操作するために使用されます。 基本的に、レイヤーを選択し、有効なフィールドを選択してから、マップ内のフィーチャをクリックして、選択したフィールドの値を取得します。役立つ場合は、ツールバーの画像を次に示します。 [質問はここからほぼ完全に書き直されました] 私が抱えている問題は、ネイティブCOM UIパーツとカスタム.Netコントロールの間で状態を渡すことです。たとえば、レイヤーコンボボックスでDropDownClosedイベントをキャッチし、そのレイヤーに関連する列の有効なリストをアセンブルし、フィールド名のリストを(IFieldsを介して)フィールドコンボボックスに適用します。 RagiYaserBurhamとblah238による最初のコメントを適用し、これらをこのページの詳細とマージした後、次のDropDownClosedイベントハンドラーはコンボボックスからツールバー(ICommandBar)に戻りますが、ICommandItemからキャストする方法がわかりませんUserControlのFieldsコンボボックスの実装に: private void layerSelectCBO_DropDownClosed(object sender, EventArgs e) { _completionNotify.SetComplete(); string layerName = (sender as ComboBox).SelectedItem as string; // These two lines are a combination of initial commenter suggestions. ICommandItem toolbar = _iApp.Document.CommandBars.Find("ArcProject.UI.AngryToolbar", false, false); ICommandItem fieldsItem = (toolbar as ICommandBar).Find("ArcProject.UI.FieldSelectUC", false); } …

1
マップドキュメントの外部からArcObjectsを使用してmxdを開くレイヤーを追加すると、ArcMapがクラッシュします
ユーザーが選択できる関連ポイント、ライン、またはポリゴンを含むさまざまな土地利用情報をユーザーが入力できるAccessデータベース(MS Access 2010)があり、データベースはプロジェクトの一部としてマスタージオデータベースに読み込まれます。ユーザーがArcMapでフィーチャを表示できるようにします。Arc 9.3では、これはすべてVBAで実現され、うまく機能しました。Arc 10へのアップグレードにより、VBAはオプションではなくなり、Pythonでプログラミングし、シェル機能を使用してAccessからコマンドを呼び出す方法を学習しました。ユーザーが現在のArcMapドキュメントに機能を追加できるようにする機能を除いて、ほぼすべて完了しました。発生するはずの手順は次のとおりです。 1)ユーザーは、関心のある機能を識別するAccessプログラムのボタンをクリックします。 2)Accessは、正しいmxdが開いているかどうかを判断し、開いていない場合はそれを開きます(通常、ドキュメントは開いているため、この手順は不要です)。 3)Pythonスクリプトは、Pythonシェルコマンドを使用して開き、正しい開いているmxdを識別し、開いているArcMapドキュメントに機能を追加します。 私はarcpyとArcObjectsの両方を試しました。開いているマップ内でarcpyを実行できますが、MS AccessでVBAを介してPythonファイルを開いても、開いているmxdを操作できません。ESRIフォーラムから、ArcObjectsを使用するよう提案されました。対象のArcMapドキュメントに既にロードされているレイヤーを特定して操作するためのコードを見つけて使用しましたが、新しいレイヤーを特定して追加する方法に完全に行き詰まっています。これがこれまでのコードですが、コードの最後のセクションでレイヤーファイルを正しく識別できれば機能すると思います。少なくとも、コードの下部にあるpMap.AddLayer(FC)なしですべて実行されますが、私は生態学者であり、トレーニングを行うプログラマーではないため、他に何か不足している可能性があります。任意の助けいただければ幸いです。 更新:私は今とても近くにいます。ジオデータベースでフィーチャを識別できますが、マップにデータを追加しようとするとArcMapがクラッシュし、次のエラーが発生します:COMError:(-2147467259、 'Unspecified error'、(None、None、None、0、None)) 。ただし、私の出力は正しい機能を識別しているように見えます。ArcMapがクラッシュする理由がわかりません。助けてください、私はとても近いです。 import arcpy from arcpy import env import os import sys import comtypes.gen.esriArcMapUI as esriArcMapUI import comtypes.gen.esriCarto as esriCarto import comtypes.gen.esriGeoDatabase as esriGeoDatabase import comtypes.gen.esriFramework as esriFramework import comtypes.gen.esriSystem as esriSystem import comtypes.gen.esriDataSourcesFile as DataSourcesFile #Eventaully these …

1
ArcObjectsを使用して、選択したフィーチャの関連レコードをテーブルウィンドウに自動的に表示します
ユーザーがクリックして関連するテーブルを選択しなくても、ArcObjectsを介して、属性ウィンドウ(テーブルウィンドウ)のArcMapで選択されたフィーチャの関連テーブルを自動的に表示する方法はありますか?テーブルウィンドウを表示するボタンを追加できますが、[関連テーブル]ボタンをクリックしたときにウィンドウに表示される関連テーブルタブを自動的に表示する方法がわかりません。 関連レコードを表示するShowRelationshipTableメソッドを持つITableViewCallbackインターフェイスがあります。そのインターフェイスを実装するクラスを作成できますが、それは私が望んでいるようには見えません。公開されていないように見えるテーブルウィンドウの「ShowRelationshipTable」メソッドを呼び出したいだけです。また、テーブルウィンドウで「関連テーブル」のコマンドを実行してみました。それは、esriGeoDatabaseUI.TableContextMenuRelationshipsですが、何も実行されません。ユーザーがクリックすることなく関連データのタブを自動的に表示する方法はArcObjectsにありますか?

1
選択した複数のフィーチャから1つのジオメトリへのジオメトリ
私がやろうとしていることを説明できるかどうか見てみましょう。まず、レイヤー上の選択した1つのフィーチャ(ポリゴン)を取得し、そのフィーチャのジオメトリを取得してSQL Serverデータベースに保存できる、ArcMapのアドインを開発しました。私がしたいことは、個別のジオメトリ(つまり、フィーチャ/ジオメトリごとに1行)ではなく、選択したポリゴンを含む1つの「ジオメトリのピース」として、選択した複数のフィーチャを保存することです。これは私がこれまでに持っているコードです: IFeatureLayer featureLayer = ArcMap.Document.CurrentContentsView.SelectedItem as IFeatureLayer; if (featureLayer != null) { IFeatureSelection featSel = featureLayer as IFeatureSelection; IEnumIDs idList = featSel.SelectionSet.IDs; int index = idList.Next(); List<int> indexes = new List<int>(); while (index != -1) { indexes.Add(index); index = idList.Next(); } IFeatureClass featureClass = featureLayer.FeatureClass; IFeature feature = featureClass.GetFeature(indexes[0]); …

4
ArcObject .NET DLLの配置
一部のカスタムPythonスクリプトでいくつかのESRI .NET DLLを使用しています。たとえば、ESRI.ArcGIS.Geodatabase.dll 私の開発マシンでは、これらのDLLはC:\ Program Files(x86)\ ArcGIS \ DeveloperKit10.0 \ DotNetフォルダーにあります。 次に、スクリプトを別のマシンに展開したいと思います。ただし、ユーザーがArcObjects SDK for .NETをインストールしていない限り、これらのDLLはマシンにありません。 さらに悪いことに、ユーザーにSDKのインストールを要求することは、600 MBのダウンロード(無料のExpressバージョンの場合)であるVisual Studioもインストールする必要があることを意味します。Visual Studioがない場合、ESRIインストーラーは続行できません。 これらのDLLをスクリプトにバンドルする必要がありますか(サービスパックを追加すると互換性の問題が発生する可能性があります)、それとも簡単な展開方法がありますか? 更新: .NET DLLは、ArcGISバージョン10にデフォルトでインストールされるようになりました。それらはGAC(グローバルアセンブリキャッシュ)に配置されます。Windowsエクスプローラー(Windows 7)ではC:\Windows\assembly(実際にはフォルダーではなく、GACの内容を表示できます)で確認できます。アセンブリプロパティを見ると、DLLは次のようなフォルダーにあるはずC:\Windows\assembly\GAC_32\ESRI.ArcGIS.System\10.0.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dllですが、このファイルは存在しないようです。 Python for .NETでは、これらのDLLへの参照を追加するときに完全な名前を使用する必要があるようです。ソースコードを見ると、以前にLoadWithPartialNameを使用していたように見えるため、以下のコードを使用できます。これでFileNotFound例外が返されるようになりました。 import clr clr.AddReference("ESRI.ArcGIS.System") from ESRI.ArcGIS.System import * 今、あなたは以下を使用する必要があるようです: import clr clr.AddReference("ESRI.ArcGIS.System, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86") from ESRI.ArcGIS.System import *

2
ArcObjectsを使用してPDFマップを作成およびエクスポートしますか?
ArcObjectsを使用して生成された一連のフィーチャクラスとラスター、およびジオプロセッサの呼び出しがあります。出力へのパスがあり、ファイルジオデータベースに配置されています。ArcObjectsを使用して、これらの出力の組み合わせを使用してマップを作成し、最終的なマップをPDF(またはPDFが不可能な場合はJPEG / PNG)として保存するにはどうすればよいですか?これが可能な場合は、凡例/北向きの矢印なども追加できますか? これらのマップの目的は迅速な品質管理であり、出力はすべて同じ投影法であり、同じ領域をカバーしています。 ArcObjectsの「舞台裏」で視覚的な出力を作成するのに慣れていないので、正しい方向を示す情報があれば教えてください。

3
ArcObjectsを使用してファイルジオデータベースの高精度データセットを低精度に変換しますか?
高精度のデータセットがファイルジオデータベースからarcsde 9.3.1に読み込まれました。データロードは、ArcCatalogでのコピー/貼り付けによって実現されました。 データセットから低精度のパーソナルジオデータベースに抽出するカスタムツール(arcobjects)が、出力フィーチャクラスを作成しようとすると失敗するようになりました。 パーソナルジオデータベースをsdeから抽出する他のすべてのデータセットは低精度であるため、パーソナルジオデータベースを高精度にアップグレードすることはできません。 高精度のデータセットをダウングレードできますか?

2
これらの注釈がスタック/オーバーラップして表示されるのはなぜですか?
プログラムでアノテーションフィーチャクラスを設定しようとしたときに奇妙な問題が発生しました(ArcObjects、C#)。下の画像を見るとわかるように、各テキスト文字列の文字は、予想したとおりに水平にレイアウトされているのではなく、互いに重なり合っているように見えます。 MySQL(別のアプリケーションで作成された)からいくつかの値を取得していますが、それらはデバッガーで正常に表示されます。未知の/投影された座標系といくつかの異なるElementインターフェースの混合を使用してみました。誰かがこの問題を以前に見、解決したことがあるなら、私は正しい方向へのプッシュに感謝します。 これが私のC#の関連部分です: IFeature feature = featureClass.CreateFeature(); ITextElement textElement = new TextElementClass(); textElement.Text = textString; // value like: '183 IElement element = textElement as IElement; element.Geometry = pointGeom; // Point: x=2986785, y=629058 (feature as IAnnotationFeature2).Annotation = element; (feature as IAnnotationFeature2).AnnotationClassID = 0; (feature as IAnnotationFeature2).Status = annoStatus; // ESRI constant …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.