पाइथन का उपयोग करके आकृति फ़ीचर में कस्टम फ़ीचर विशेषताएँ कैसे जोड़ें?


16

मैं एक मौजूदा शेपफाइल लेने का तरीका ढूंढ रहा हूं जिसमें 200 देशों का फीचर सेट हो। प्रत्येक देश फ़ीचर में "NAME" की विशेषता है। मेरा उद्देश्य एक पायथन स्क्रिप्ट बनाना है जो एक मनमाना (अभी के लिए) अतिरिक्त विशेषता जोड़ता है, कहते हैं, "POPULATION"।

बेशक मेरे पास OSGeo और GeoDjango मॉड्यूल स्थापित हैं। मैं जहाँ तक हूँ:

 from osgeo import ogr

    infile = ogr.Open('sample.shp', 1) #'sample.shp' is a pre-existing ESRI shapefile described above
    inlyr = ogr.GetLayerByIndex(0)

क्या मुझे एक ओजीआर फ़ंक्शन याद आ रहा है जो मुझे मौजूदा शेपफाइल में फ़ीचर विशेषता फ़ील्ड सम्मिलित करने की अनुमति देगा?

जवाबों:


13

मेरा मानना ​​है कि असेंबल टाइगर पॉलीगन्स सैंपल में वही है जो आप देख रहे हैं:

# Open the datasource to operate on.

ds = ogr.Open( infile, update = 0 )

poly_layer = ds.GetLayerByName( 'Polygon' )

#############################################################################
#   Create output file for the composed polygons.

nad83 = osr.SpatialReference()
nad83.SetFromUserInput('NAD83')

shp_driver = ogr.GetDriverByName( 'ESRI Shapefile' )
shp_driver.DeleteDataSource( outfile )

shp_ds = shp_driver.CreateDataSource( outfile )

shp_layer = shp_ds.CreateLayer( 'out', geom_type = ogr.wkbPolygon,
                                srs = nad83 )

src_defn = poly_layer.GetLayerDefn()
poly_field_count = src_defn.GetFieldCount()

for fld_index in range(poly_field_count):
    src_fd = src_defn.GetFieldDefn( fld_index )

    fd = ogr.FieldDefn( src_fd.GetName(), src_fd.GetType() )
    fd.SetWidth( src_fd.GetWidth() )
    fd.SetPrecision( src_fd.GetPrecision() )
    shp_layer.CreateField( fd )

धन्यवाद, क्या यह कुछ ऐसा है जिससे आप पहले से परिचित थे या आपने इसे खोजा था?
20

1
एनपी, मैं नमूनों के बारे में जानता था लेकिन इस विशिष्ट टुकड़े को खोजने के लिए कुछ के माध्यम से देखा।
डेरेक स्विंगले

आह ठीक है, महान। मैं इंतजार कर रहा हूं जब तक मैं घर पर हूं और जवाब देने से पहले इसे लागू करने की कोशिश कर सकता हूं, लेकिन यह अच्छा लग रहा है।
20

ऊपर दिया गया उदाहरण एक नई आकृति बनाता है। फिर आपको मौजूदा से अन्य सभी फ़ील्ड और ज्यामिति को नई फ़ाइल में स्थानांतरित करना होगा। क्या आपको एक ऐसे उदाहरण की आवश्यकता है जो किसी मौजूदा आकृति के क्षेत्र को जोड़ता है?
क्लेविस

@ क्लेविस- आप इसे मूल प्रश्न के रूप में पूछना चाह सकते हैं। मुझे आपकी प्रतिक्रिया के बारे में सूचित किया गया था लेकिन मुझे नहीं लगता कि ओपी होगा।
डेरेक स्विंगले

10

क्या पायथन ओजीआर का उपयोग करके किसी मौजूदा शेपफाइल में फ़ील्ड जोड़ना संभव है।

from osgeo import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
dataSource = driver.Open(“c:/test/Test2.shp”, 1) #1 is read/write

#define floating point field named DistFld and 16-character string field named Name:
fldDef = ogr.FieldDefn('DistFld', ogr.OFTReal)
fldDef2 = ogr.FieldDefn('Name', ogr.OFTString)
fldDef2.SetWidth(16) #16 char string width

#get layer and add the 2 fields:
layer = dataSource.GetLayer()
layer.CreateField(fldDef)
layer.CreateField(fldDef2)

3
धन्यवाद। डेटा को पॉप्युलेट और लिखने के लिए, मैंने इन्हें जोड़ा: लेयर में करतब के लिए: feat.SetField ('Name', 'myname') layer.SetFeature (करतब) dataSource = कोई नहीं
डेव X
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.