أكثر

إنشاء سجلات في ملف شكل الإخراج باستخدام بايثون


لدي قائمة (ناتج من حلقة سابقة) تحتوي على سمات من ملف شكل إدخال. ما أنا عالق به هو إدخال تلك السمات إلى ملف أشكال جديد.

لقد رسمت بيانات النقطة باستخدامنقطة (س ، ص)وكذلك إنشاء الحقول ذات الصلةw.field ()من حقول شكل الإدخال.

ما أكون عالقًا هو نسخة السجلات ، مما يعطيني خطأً متعلقًا بعلامة الحذف.

AttributeError: الكائن "tuple" ليس له سمة "startswith"

أنا ألصق قسمًا من الكود مع استفساراتي.

من استيراد التاريخ والوقت ، استيراد osgeo.ogr ، osgeo.ogr من osgeo استيراد ogr من osgeo استيراد gdal استيراد شكل استيراد os sf = shapefile.Reader ("- موقع ملف الإدخال -") # قراءة حقول Shapefile = sf.fields # قراءة سجلات حقول السمات = sf.records () # قراءة سجلات الميزات shapRecs = sf.shapeRecords () # قراءة الهندسة والسجلات في وقت واحد w = shapefile.Writer (shapefile.POINT) w.autoBalance = 1 result1 = [] النتيجة 2 = [] # ؟؟؟ هل الخطأ لأننا لا نستطيع الاستعلام عن قائمة في قائمة ؟؟؟ print '** Call function pt (p) حيث p هي فهرس العقدة… **' # مطالبة المستخدم # استدعاء الوظيفة مع # العدد المطلوب من العقد def pt (p): لـ i في النطاق (len (shapRecs) ): u = shapRecs [i] .shape.points [p-1] # يعطي إحداثيات XY لـ # النقاط التي تم الاستعلام عنها v = shapRecs [i] .record [0:] # إنشاء نتيجة السمات. . append (v) w.point (u [0]، u [1]) # إنشاء نقاط من الإحداثيات في كل مرة تعمل فيها الحلقة w.autoBalance = 1 # - إضافة الحقول w.field (الحقول [0]) # إضافة الحقل الأول ، باستخدام علامة الحذف (؟؟؟) لـ i في النطاق (1 ، len (الحقول)): # Loop تبدأ من الحقل الثاني (؟؟؟) w.field (الحقول [i]) w.autoBalance = 1 # يعرض الكود الخطأ المذكور أعلاه من عبارة w.record () # - إضافة سجلات i في النطاق (len (result2)): w.record (* result2 [i]) w.autoBalance = 1 w .save ('- موقع ملف الإخراج -')

أنا لا أفهم السيناريو الخاص بك. لماذا تستخدم PyShp (ملف شكل) ، إذا كنت تستخدم osgeo.ogr؟ يمكنك فعل الشيء نفسه مع ogr فقط (طريقة أفضل لتكرار طبقة باستخدام ogr في python؟).

إذا كنت تريد استيراد ogr و gdal من osgeo ، فإن الصيغة

استيراد osgeo.ogr ، osgeo.ogr من osgeo استيراد ogr من osgeo import gdal

هو فائض (تقوم باستيراد ogr و gdal مرتين)

الشيء نفسه بالنسبة لsf.records ()وsf.shapeRecords ():

sf = shapefile.Reader ("strati") records = sf.records () # قراءة سجلات ميزات التسجيل في السجلات: print rec [30، 130، 'incl'] [55، 145، 'incl'] [ 40 ، 155 ، "بما في ذلك"]

و

shapRecs = sf.shapeRecords () للتسجيل في shapRecs: print rec.record [30، 130، 'incl'] [55، 145، 'incl'] [40، 155، 'incl']

إذا كنت تريد الهندسة فقط:

للتسجيل في sf.iterShapes (): x، y = rec.points [0] print x، y 272070.600041، 155389.3879200000 271066.03214800003، 154475.63137700001 273481.498868، 153923.49298800001

و

للتسجيل في shapRecs: x، y = rec.shape.points [0]

إذا كنت تريد فقط نسخ ملف الشكل:

w = shapefile.Writer (shapefile.POINT) sf = shapefile.Reader ("strati") w.fields = list (sf.fields) للتسجيل في sf.records (): w.records.append (rec) w._shapes .extend (sf.shapes ()) w.save ("مكرر")

إذا كنت تريد إضافة حقل ، انظر إلى إضافة حقل إلى ملف أشكال موجود

إذا كنت تريد القوائم ، فإن أسهل طريقة هي:

sf = shapefile.Reader ("yourfile.shp") شكل = sf.shapes () # -> قائمة بجميع الحقول الهندسية = sf.fields [1:] # -> تعريف الحقول في قائمة (بدون علامة الحذف) field_names = = [field [0] للحقل في الحقول] # -> قائمة سمات أسماء الحقول = sf.records () # -> قائمة بجميع السمات