ArcMapで実際の曲線/円弧を識別しますか?


12

ArcMapで円を作成する唯一の良い方法は、真のアーク(複合曲線)を使用することですが、互換性の問題のため、それらを頂点に変換(高密度化)する必要があります。ジオデータベースとSDO_geometry(arcsde)の情報が必要です

はい、方法があります。私が使う:

UPDATE layer1 a SET arctype = 'compound' WHERE has_compound_curves(a.shape) <> 0;

ET Geotoolsを使用して、レイヤーごとに密度を高めます。

しかし、OracleまたはArcMapでこれを簡単に行う方法が必要であり、真のアークを持つ機能を高密度化したいだけです。直線などの不要な頂点は必要ありません。

ArcMapで真のアークを特定するにはどうすればよいですか?また、可能な限り速く簡単に高密度化するにはどうすればよいですか?

Oracle SQLについても同じです。


2006年に VBAを使用して真のアークを検索するスレッドを次に示しますが、ArcGISがVBAをサポートしなくなったため、これを行うPythonまたはUIの方法はありますか?
RyanKDalton

この「ArcGIS Idea」が、10.0で真の曲線を見つけることが不可能であることを意味しないことを願っています。
RyanKDalton

回答:


8

今日、この質問(「フィーチャクラスに曲線があるかどうかを確認するにはどうすればよいか」)を尋ねられ、いくつかの不思議なコードの提案が与えられました。

geometries = arcpy.CopyFeatures_management("inputFeatures", arcpy.Geometry())
import json
for g in geometries:
    j = json.loads(g.JSON)
    if 'curve' in j: print "You have true curves!"
    else: print "No curves here"

No curves here
No curves here
You have true curves!
You have true curves!
No curves here
You have true curves!
No curves here
No curves here
You have true curves!
You have true curves!
You have true curves!
You have true curves!
You have true curves!

4

Densifyを使用すると、最大偏向角または最大オフセット偏差パラメーターのいずれかによる高密度化により、曲線セグメントが簡素化されます。

したがって、直線セグメントはそのまま保持されます。


1
これは真の曲線を特定するのに役立ちませんが、角度パラメーターで密度を使用すると、それらを非常に迅速に高密度化するための高速かつ効果的な方法であることに同意します。また、角度パラメーターを使用すると、通常は真の曲線のみが高密度化されますが、距離オプションではすべての境界が高密度化され、(少なくとも私のテストでは、デフォルトパラメーターを使用すると)ファイルサイズが最大10倍になります。
RyanKDalton

わかりましたので、さまざまな解決策がありますが、私の問題は、sdeレイヤーでツールボックスを使用できないことです。チェックアウト/チェックインのためにレイヤーをロックしています。これらの曲線とした後、その緻密化が、それはあなたが緻密化だけ私はすべての機能をチェックアウトすることができ、真のアークに触れますが、任意の編集ツールがあることを言っていることであればより多くのET geotoolsより緻密化
jonaktiv

この回答gis.stackexchange.com/a/37082/2969 は直線を抽出しようとしますが、レイヤー全体から直線を減算することで曲線を抽出できるため、データ全体に触れることなく曲線を見つけることができます。しかし、ETジオツールがどのように機能するかはわかりません。
geogeek

@geogeekがリンクするDensifyツールであるjonaktivは、ET GeoWizardsの一部ではなく、ArcEditorまたはArcInfoライセンスで利用可能なArcGISのコアツールです。
RyanKDalton

2

それらを選択したら、それらを高密度化できると思います。以下の(テストされていない)コードは、これを行うために適合させることができます。(ベジェ曲線が円弧として適格であると仮定)。

public void SelectTrueArcFeatures()
{
    var editor = ArcMap.Application.FindExtensionByName("ESRI Object Editor") as IEditor;
    if (editor.EditState != esriEditState.esriStateEditing)
        throw new Exception("start editing first");
    var fLayer = ((IEditLayers)editor).CurrentLayer;
    if (fLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
        throw new Exception("current edit layer must have polylines or polygons");

    var fSel = fLayer as IFeatureSelection;
    fSel.Clear();
    var fCur = fLayer.FeatureClass.Search(null,false);
    IFeature feat;
    while ((feat = fCur.NextFeature()) != null)
    {
        if(HasAnArc(feat.Shape))    
            fSel.SelectionSet.Add(feat.OID);
    }
    fSel.SelectionChanged();
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(fCur);
    ArcMap.Document.ActiveView.Refresh();
}

private bool HasAnArc(IGeometry geom)
{
    var segcoll = geom as ISegmentCollection;
    if (segcoll == null)
        return false;
    for (int i = 0; i < segcoll.SegmentCount; i++)
    {
        if (segcoll.get_Segment(i) is ICircularArc 
          || segcoll.get_Segment(i) is IBezierCurve)
          return true;
    }
    return false;
}

この編集スクリプトは何ですか?このコードをアークマップにどのように配置しますか?そしてどのようにそれが(選択)beizercurvesを見つけるか、唯一私が発見したものを緻密化しない、コードの作業を行う
jonaktiv

c#です。まだc#(または.netのカスタマイズ)に慣れていない場合は、誰かに同等のpythonを書くように依頼することができます。このコードを使用するには、Visual Studioでコンパイルする必要があります。現在の編集対象レイヤー内で、非直線セグメントを持つすべてのポリライン(またはポリゴン)を選択します。
カーククイケンドール

@jonaktiv 9.3.1を使用している場合、電卓スクリプトでVBAを使用してこれを行うことができます。フラグ属性を計算してから、フラグのあるフィーチャを選択します。8.3を使用している場合、フィールド計算機を直接使用してジオメトリを実際に更新でき、フラグ属性は不要です。
カーククイケンダル

見事!私は、私はそれは不可能だった恐れていた非常に感謝しています
jonaktiv

2

@KHibmaの回答に基づいて、データアクセスカーソルにはSHAPE@JSONjsonモジュールをインポートせずに曲線をチェックするために使用できるトークンがあります。

with arcpy.da.SearchCursor ("InputFeatures", ["OID@", "SHAPE@JSON"]) as curs:
    for oid, json in curs:
        if "curve" in json:
            print "{} is curved".format (oid)

1

@geogeekの提案に基づいて、これに対する独自のソリューションも作成しました。ソースレイヤーの頂点と、ソースレイヤーの高密度化された(ANGLEオプションを使用して)コピーの頂点とを比較するモデルを作成しました。出力は、ソースと「一致しない」頂点のレイヤーです。最後の手順では、一致しないポイントと交差するすべてのソースフィーチャを選択し、真の曲線を含むフィーチャを識別します。

このモデルはアークの始点と終点でフィーチャを分割しないため、フィーチャ全体がエクスポートされます。そのため、「ライン-カーブ-ライン-カーブ-リバースカーブ-ライン」として接続されている単一のジオメトリがある場合、フィーチャだけではなく、カーブ部分だけが出力されます。ポイントを使用して、実際の曲線が存在する場所を判断します。

ArcGIS Resource Centerの「分析」ギャラリーから「True Curveの識別」というモデルをダウンロードできます。


皆さんありがとう、これはとても素晴らしいです。私たちはarcgis 9.3.1を持っていますが、私は自分のプライベートコンピュータでテストします編集:それは非常に良いツールですが、十分に高速ではありません:/私は編集環境で真のアークを持つ機能を見つけて選択できるようにすることです真の円弧で私の機能をチェックアウトして、緻密化(もっとらgeotoolsより任意の編集を高密度化するツールがありますが、私はのEt getoolsをたくないなぜあなたは、変更対象層に持っているので、我々は多分10異なる層を緻密化である。
jonaktiv

1

この曲線と線のアドインを使用すると、曲線を含む図形を選択できます。http://www.arcgis.com/home/item.html?id = b59665cb906a435da3f8c45332d7cfdf

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