1) স্বতন্ত্র শেফফাইল: মতামত হিসাবে একটি শেফফিলের একটি মাত্র স্তর থাকে। আপনি যদি কেবল ক্ষেত্রের নাম চান
from osgeo import ogr
source = ogr.Open("a_shapefile.shp")
layer = source.GetLayer()
schema = []
ldefn = layer.GetLayerDefn()
for n in range(ldefn.GetFieldCount()):
fdefn = ldefn.GetFieldDefn(n)
schema.append(fdefn.name)
print schema
['dip_dir', 'dip', 'cosa', 'sina']
আপনি পাইথন জেনারেটরের সাথে জিওজেএসএন ফর্ম্যাটটি ব্যবহার করতে পারেন ( ogr_geointerface.py )
def records(layer):
# generator
for i in range(layer.GetFeatureCount()):
feature = layer.GetFeature(i)
yield json.loads(feature.ExportToJson())
features = record(layer)
first_feat = features.next()
print first_feat
{u'geometry': {u'type': u'Point', u'coordinates': [272070.600041, 155389.38792]}, u'type': u'Feature', u'properties': {u'dip_dir': 130, u'dip': 30, u'cosa': -0.6428, u'sina': -0.6428}, u'id': 0}
print first_feat['properties'].keys()
[u'dip', u'dip_dir', u'cosa', u'sina']
এটি ফিওনা (ওজিআরের আর একটি পাইথন মোড়ক, পাইথন ২.7.x এবং ৩.x) উপস্থাপন করে। সমস্ত ফলাফল পাইথন অভিধান (জিওজেএসএন ফর্ম্যাট)।
import fiona
shapes = fiona.open("a_shapefile.shp")
shapes.schema
{'geometry': 'Point', 'properties': OrderedDict([(u'dip_dir', 'int:3'), (u'dip', 'int:2'), (u'cosa', 'float:11.4'), (u'sina', 'float:11.4')])}
shapes.schema['properties'].keys()
[u'dip', u'dip_dir', u'cosa', u'sina']
# first feature
shapes.next()
{'geometry': {'type': 'Point', 'coordinates': (272070.600041, 155389.38792)}, 'type': 'Feature', 'id': '0', 'properties': OrderedDict([(u'dip_dir', 130), (u'dip', 30), (u'cosa', -0.6428), (u'sina', -0.6428)])}
আর GeoPandas (Fiona, + + পান্ডাস , পাইথন 2.7.x এবং 3.x)। ফলাফলটি একটি পান্ডাস ডেটা ফ্রেম (= জিওডাটাফ্রেম)।
import geopandas as gpd
shapes = gpd.read_file("a_shapefile.shp")
list(shapes.columns.values)
[u'dip', u'dip_dir', u'cosa', u'sina', 'geometry']
# first features
shapes.head(3)
2) একাধিক শেফফিলস: আপনি যদি কোনও ফোল্ডারে একাধিক শেফফিলের মাধ্যমে পুনরাবৃত্তি করতে চান
সঙ্গে osgeo.ogr
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.endswith(".shp"):
source = ogr.Open(os.path.join(rootdir, file))
layer = source.GetLayer()
ldefn = layer.GetLayerDefn()
schema = [ldefn.GetFieldDefn(n).name for n in range(ldefn.GetFieldCount())]
print schema
বা একটি জেনারেটর সহ
def records(shapefile):
# generator
reader = ogr.Open(shapefile)
layer = reader.GetLayer(0)
for i in range(layer.GetFeatureCount()):
feature = layer.GetFeature(i)
yield json.loads(feature.ExportToJson())
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.endswith(".shp"):
layer = records(os.path.join(rootdir, file))
print layer.next()['properties'].keys()
ফিয়োনার সাথে
import fiona
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.endswith(".shp"):
layer = fiona.open(os.path.join(rootdir, file))
print layer.schema['properties'].keys()