পাইথন ব্যবহার করে শেফিলিতে কাস্টম বৈশিষ্ট্যযুক্ত বৈশিষ্ট্য কীভাবে যুক্ত করবেন?


16

আমি একটি বিদ্যমান শ্যাফিলটি নেওয়ার জন্য একটি উপায় চাই যা 200 টি দেশের বৈশিষ্ট্যযুক্ত সেট রয়েছে। প্রতিটি দেশ বৈশিষ্ট্যে "NAME" এর একটি বৈশিষ্ট্য রয়েছে। আমার উদ্দেশ্যটি হল পাইথন স্ক্রিপ্ট তৈরি করা যা একটি স্বেচ্ছাসেবী (বর্তমানে জন্য) অতিরিক্ত বৈশিষ্ট্য যুক্ত করে বলে, "জনগণ"।

অবশ্যই আমি ওএসজিও এবং জিওড্যাঞ্জো মডিউল ইনস্টল করেছি। আমি যতদূর:

 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 )

ধন্যবাদ, এটি কি এমন কিছু যা আপনি আগেই পরিচিত ছিলেন বা অনুসন্ধানের পরে খুঁজে পেয়েছেন?
ম্যাটডেবোর্ড

1
এনপি, আমি নমুনাগুলি সম্পর্কে জানতাম তবে এই সুনির্দিষ্ট টুকরোটি সন্ধান করতে কয়েকজনের সন্ধান করলাম।
ডেরেক সুইংলে

আহ ঠিক আছে, দুর্দান্ত। আমি বাড়িতে না হওয়া পর্যন্ত আমি অপেক্ষা করতে যাচ্ছি এবং উত্তরটি চিহ্নিত করার আগে এটি প্রয়োগ করার চেষ্টা করতে পারি, তবে এটি ভাল দেখাচ্ছে।
18:51

উপরের উদাহরণটি একটি নতুন শেফফিল তৈরি করে। তারপরে আপনাকে অবশ্যই অন্য সমস্ত ক্ষেত্র এবং জ্যামিতিটি বিদ্যমান থেকে নতুন ফাইলে স্থানান্তর করতে হবে। আপনার কি এমন উদাহরণের দরকার আছে যা বিদ্যমান ফিল্ডফাইলে একটি ক্ষেত্র যুক্ত করে?
ক্লিভিস

@ ক্লিভিস- আপনি মূল প্রশ্নটির প্রশ্ন হিসাবে এটি জিজ্ঞাসা করতে চাইতে পারেন। আপনার প্রতিক্রিয়া সম্পর্কে আমাকে অবহিত করা হয়েছিল তবে আমি মনে করি না যে ওপি হবে।
ডেরেক সুইংলে

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 ('নাম', 'myname') স্তর.সেটফিউচার (কৃতিত্ব) ডেটা উত্স = কিছুই নেই
ডেভ এক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.