ArcMap में असली घटता / चाप की पहचान?


13

ArcMap में सर्कल बनाने का एकमात्र अच्छा तरीका है सच्चे आर्क, (कंपाउंड कर्व्स) का उपयोग करना। मुझे जियोडेटाबेस और SDO_geometry (arcsde) के लिए जानकारी चाहिए

और हाँ एक रास्ता है। मैं उपयोग करता हूं:

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

और फिर ET Geotools का उपयोग करके परत को परत से घनीभूत करना।

लेकिन Oracle या ArcMap में इसे सीधा करने का आसान तरीका होना चाहिए, और मैं केवल उन विशेषताओं को घनीभूत करना चाहता हूं जिनमें सच्चे आर्क हैं। मैं सीधी रेखाओं और इतने पर किसी भी अनावश्यक कोने नहीं चाहता।

मैं आर्कपैक में सच्चे आर्क्स की पहचान कैसे कर सकता हूं, और मैं उन्हें यथासंभव तेज और आसान कैसे बना सकता हूं?

Oracle SQL के लिए भी।


यहाँ 2006 से एक धागा है जो VBA का उपयोग करता है ताकि सच्चे आर्क्स मिल सकें, लेकिन चूंकि आर्कगिस अब VBA का समर्थन नहीं करता है, क्या ऐसा करने के लिए पायथन या UI तरीका है?
रयानकैल्टन

मैं उम्मीद कर रहा हूं कि यह "आर्किस आइडिया" का मतलब यह नहीं है कि 10.0 में सच्चे घटता को ढूंढना असंभव है।
रयानकाल्टन

जवाबों:


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 गुना वृद्धि तक (कम से कम मेरे परीक्षणों में, डिफ़ॉल्ट मापदंडों का उपयोग करके) हो जाएगा।
रयानKalton

ठीक है, इसलिए अलग-अलग समाधान हैं, लेकिन मेरी समस्या यह है कि मैं अपनी sde लेयर पर किसी भी टूलबॉक्स का उपयोग करने में सक्षम नहीं हूं, हम चेकआउट / चेकइन के लिए लेयर्स को लॉक कर रहे हैं, मैं जो करना चाहता हूं वह एक टूल / स्क्रिप्ट को चलाना है जो पाता है ये घटता है और उसके बाद Densify करता है, लेकिन अगर आप यही कह रहे हैं कि Densify ही सही आर्क्स को टच करता है, तो मैं सभी फीचर्स की जांच कर सकता हूं, लेकिन क्या कोई एडिट टूल है, जो ET जियोटॉल्स से ज्यादा डेंसिफाई करता है
jonakitivs

यह उत्तर gis.stackexchange.com/a/37082/2969 सीधी रेखाएँ निकालने की कोशिश करता है, लेकिन आप पूरी परत से सीधी रेखाएँ हटाकर घटता निकाल सकते हैं, इसलिए आप पूरे डेटा को छुए बिना घटता का पता लगा सकते हैं। लेकिन मुझे नहीं पता कि ईटी जियोटॉल्स कैसे काम करता है।
जियोगेक्ट

jonaktiv, Densify टूल, जो @geogeek लिंक एक मुख्य ArcGIS टूल है, जो ArcEditor या ArcInfo लाइसेंस के साथ उपलब्ध है, ET GeoWizards का हिस्सा नहीं है।
रयानKalton

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;
}

क्या यह संपादन स्क्रिप्ट है? मैं इस कोड को arcmap में कैसे डालूंगा? और कोड कैसे काम करता है, क्या यह beizercurves का पता लगाता है या केवल उसी चीज़ को बताता है जिसे मैंने पाया है (चयनित)
jonaktiv

यह c # है। यदि आप पहले से ही c # (या .net अनुकूलन) से परिचित नहीं हैं, तो आप किसी से अजगर के साथ लिखने के लिए कह सकते हैं। इस कोड का उपयोग करने के लिए आपको इसे Visual Studio के साथ संकलित करना होगा। यह वर्तमान संपादित लक्ष्य परत में सभी पॉलीलाइन (या बहुभुज) का चयन करता है जिसमें कोई भी गैर-रेखीय खंड होता है।
कर्क कुक्केंडाल

@jonaktiv यदि आप 9.3.1 का उपयोग कर रहे हैं, तो आप कैलकुलेटर स्क्रिप्ट में VBA के साथ ऐसा कर सकते हैं। एक ध्वज विशेषता की गणना करें, फिर उन विशेषताओं का चयन करें जिनके पास ध्वज है। यदि आप 8.3 का उपयोग कर रहे हैं, तो आप वास्तव में सीधे क्षेत्र कैलकुलेटर का उपयोग करके ज्यामिति को अपडेट कर सकते हैं और इसे ध्वज विशेषता की आवश्यकता नहीं होगी।
कर्क कुक्केंडाल

उत्तम! मैं बहुत आभारी हूं, मुझे डर था कि यह संभव नहीं था
jonaktiv


2

@ KHibma के उत्तर पर बिल्डिंग, डेटा एक्सेस कर्सर में एक टोकन है, SHAPE@JSONजिसका उपयोग jsonमॉड्यूल आयात किए बिना घटता की जांच करने के लिए किया जा सकता है ।

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 के सुझाव पर आधारित था। मैंने एक मॉडल बनाया है जो स्रोत परतों की तुलना डेन्सिफाइड (एएनजीएलई विकल्प का उपयोग करके) से एक परत के साथ स्रोत परतों की तुलना करता है। आउटपुट वर्टेक्स की एक परत है जो स्रोत से "मेल नहीं खाता" है। अंतिम चरण उन सभी स्रोत विशेषताओं का चयन करता है जो बेजोड़ बिंदुओं को काटती हैं, जिससे उन विशेषताओं की पहचान होती है जिनमें सच्चे वक्र होते हैं।

क्योंकि यह मॉडल आर्क के प्रारंभ और अंत बिंदुओं पर सुविधाओं को विभाजित नहीं करता है, इसलिए संपूर्ण सुविधा निर्यात की जाएगी। इसलिए, यदि आपके पास एक एकल ज्यामिति है जो "लाइन-कर्व-लाइन-कर्व-रिवर्सेकुरवे-लाइन" के रूप में जुड़ा हुआ है, तो पूरी सुविधा आउटपुट होगी, न कि केवल वक्र अंश। वास्तविक वक्र (जहां) मौजूद हैं, यह निर्धारित करने के लिए बिंदुओं का उपयोग करें।

आप आर्कगिस रिसोर्स सेंटर "एनालिसिस" गैलरी से " ट्रू आइडेंट ट्रू कर्व्स " नामक मॉडल डाउनलोड कर सकते हैं ।


आप सभी को धन्यवाद, यह बहुत अच्छा है। हमारे पास आर्कगिस 9.3.1 है, लेकिन मैं अपने निजी कंप्यूटर EDIT पर परीक्षण करूंगा: यह एक बहुत अच्छा उपकरण है, लेकिन इतना तेज नहीं है कि: / जो मैं चाहता हूं वह संपादन करने के वातावरण में सक्षम होने के लिए / सच्चे आर्क्स के साथ सुविधाओं का चयन करें और फिर मेरी विशेषताओं को सच्चे आर्क्स के साथ चेकआउट करें और फिर डेंसिफ़ाइ करें (क्या एट जियोटॉल्स से अधिक कोई एडिटिंग डेंसिफ़ाइ टूल है, क्यों न मुझे एट गोल्स चाहिए क्योंकि आपको टारगेट लेयर को बदलना होगा, हम शायद 10 अलग-अलग लेयर्स को
सघन कर सकते हैं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.