वे कौन से हाइट हैं जो पूर्णांकों का चयन करते हैं?


18

मेरे पास 0.2 मीटर के अंतराल के साथ एक कंट्रोस फीचरक्लास है। मैं केवल उन कंट्रोस का चयन करना चाहता हूं, जो 1 मीटर के अंतराल पर हैं?

मैंने 'सिलेक्ट बाय अट्रैक्शन' (आर्केप में) डायलॉग में निम्नलिखित सिंटैक्स का उपयोग करने की कोशिश की है, लेकिन यह सभी कंट्रोल्स का चयन करता है:

Mod("ELEVATION", 1)=0

मुझे कौन सी क्वेरी चलानी चाहिए?


मेरे लिए बहुत समय बचाया, सचमुच धन्यवाद! "क्वेरी", "एलेवेशन" और "मॉड" जैसे इस क्वेरी कोड को कभी नहीं देखा।

जवाबों:


23

केवल पूर्णांक मानों का चयन करने के लिए सरल चाल, निम्नलिखित सिंटैक्स का उपयोग करना है:

Mod(Round("ELEVATION", 0)*10, 10)=0

10 से यह गुणन सभी मूल्यों को पूर्णांक बनाता है, और फिर हम केवल उन्हीं का चयन करते हैं जो 10 के गुणक हैं।

यदि आप किसी अन्य संख्या के गुणक का चयन करना चाहते हैं, तो अंतराल से केवल 10 गुणा करें।

  • 5 मीटर के अंतराल पर कॉन्ट्रोवर्सी पाने के लिए:

    Mod(Round("ELEVATION",0) * 10, 50)=0

  • 100 मीटर के अंतराल पर कंट्रोल्स प्राप्त करने के लिए:

    Mod(Round("ELEVATION", 0) * 10, 1000)=0

अद्यतन
नीचे टिप्पणी में दिए गए व्हीबर की सलाह के अनुसार, मैंने क्वेरी अभिव्यक्ति में गोलाई फ़ंक्शन को जोड़ा है।


6
मुझे नहीं लगता कि मैं इन समाधानों पर भरोसा करूंगा। समस्या यह है कि 0.2 के गैर-अभिन्न अंतराल के साथ, डेटाबेस उन्हें फ़्लोट के रूप में संग्रहीत करने की संभावना है। नतीजतन, MODफ़्लोटिंग-पॉइंट राउंडऑफ़ त्रुटि के अधीन होगा - और यहां यह महत्वपूर्ण है: यदि आप बहुत कम महत्वपूर्ण अंक से कम हैं, MODतो गलत मान वापस कर सकते हैं (यह कैसे लागू किया जाता है इसके आधार पर)। मैं इन सूक्ष्म (और कपटी) त्रुटियों को रोकने के तरीके के रूप में लागू करने से पहले मूल्यों को गोल करने का सुझाव देना चाहूंगा MOD
whuber

आपको 10 से गुणा करने के बाद राउंड करने की आवश्यकता है, लेकिन मॉड खोजने से पहले।
smithkm

1
यदि मैं 5 मीटर के अंतराल पर समरूपता का चयन करना चाहता हूं, तो जैसा कि ऊपर लिखा गया है, लागू किया गया सूत्र गैर-पूर्णांक का चयन करता है जो उस संख्या के लिए गोल है जो समान रूप से 5 से विभाजित है। उदाहरण के लिए , 14.5m और 19.5m का चयन किया गया था लेकिन यह वांछित नहीं है। यदि मैंने फ़ंक्शन का 'राउंड' भाग गिराया तो ये चयनित नहीं थे।
डेलॉन्गटाइम

1
@delongtime यदि आपके पास गैर-अभिन्न स्तर के लिए माना जाता है कि आकृति है, ROUNDतो गोलाई में अधिक सटीकता प्राप्त करने के लिए दूसरे तर्क को संशोधित करें ।
whuber

9

यहाँ एक और क्वेरी विकल्प है। यह काफी हद तक ऊपर सूचीबद्ध उत्तरों के समान है लेकिन (मेरे विचार में) विभिन्न परिदृश्यों के लिए अनुकूलित करने के लिए थोड़ा आसान है।

किसी भी समोच्च को 10 से विभाज्य प्रदर्शित करना

Floor(Elevation/10)=Elevation/10

किसी भी समोच्च को 50 से विभाज्य प्रदर्शित करने के लिए

Floor(Elevation/50)=Elevation/50

आधा मीटर कंट्रो को प्रदर्शित करने के लिए

Floor(Elevation/0.5)=Elevation/0.5

एक मध्यस्थ ऑफसेट (जैसे 10.2, 20.2, 30.2) के साथ 10 मीटर आकृति प्रदर्शित करने के लिए

Floor((Elevation-0.2)/10)=(Elevation-0.2)/10

दिन के अंत में, यह विचार करने के लिए सिर्फ एक और विकल्प है।


2

यह उपरोक्त उत्तर पर टिप्पणी करने के लिए था - क्षमा करें

सिंटैक्स डीबी के प्रकार के आधार पर अलग-अलग होता है, जिसमें आपके कंट्रोस संग्रहीत होते हैं, लेकिन दिए गए समाधान उनके मानों को गोल करने के बाद कॉन्ट्रोस उठाते हैं। इसलिए मेरे परीक्षण में उदाहरण के लिए इसने एक चयनित सेट हासिल किया जिसमें .3 मीटर और साथ ही .4 मीटर शामिल थे। वास्तव में, इसने मूल्यों में से किसी को भी बाहर नहीं रखा।

यह समीकरण

Mod(Round("ELEVATION" * 10, 0), 2)=0

मुझे वे परिणाम मिले जो लग रहा था कि प्रश्नकर्ता क्या पूछ रहा था।


1

सूचकांक आकृति प्राप्त करने के लिए मैं इसका उपयोग फील्ड कैलकुलेटर पर करता हूं:

ARCMAP में

dim dIndexInterval
dim dCont
dim i
dim j
dim k
dim c

dIndexInterval = 200 ' set to interval of index contours
dCont = [level] ' Set to contour height field

i = ROUND(dCont, 0) * 10
j = dIndexInterval * 10
k = i MOD j

if k = 0 then
 c = 1 ' is an index contour
else
 c = 0 ' is not an index contour
end if

संवाद बॉक्स के निचले भाग में टेक्स्ट इनपुट फ़ील्ड में "सी" (बिना उद्धरण के) टाइप करें और ओके पर क्लिक करें।

QGIS में

if(((round("level", 0) * 10) % (200 * 10)) = 0, 1, 0)

"" स्तर "" ऊंचाई क्षेत्र को समोच्च करने के लिए सेट करें "200" सूचकांक आकृति के अंतराल पर सेट करें

तब: "1" एक सूचकांक समोच्च है और "0" एक सूचकांक समोच्च नहीं है


0

यदि शेष है तो निर्धारित करने के लिए समोच्च को 10 से गुणा करें और फिर मापांक 10 से गुणा करें। यदि यह पूर्णांक की तुलना में कोई शेष नहीं है, तो यह फ्लोट है।

def contour_class(contour):
    if ((contour * 10) % 10) == 0:
        return "Integer"
    else:
        return "Float"

__esri_field_calculator_splitter__
contour_class(!Contour!)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.