I'm trying to use ogrinfo to get some details on a shapefile. Now, the only way that I know is using orginfo:
ogrinfo -ro -so -al BRA_001.shp
But its display all information about the shape:
INFO: Open of `.\BRA_001.shp'
using driver `ESRI Shapefile' successful.
Layer name: BRA_001
Geometry: 3D Polygon
Feature Count: 273
Extent: (-42.645514, -22.360532) - (-42.321728, -22.198300)
Layer SRS WKT:
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9108"]],
AUTHORITY["EPSG","4326"]]
Name: String (0.0)
description: String (0.0)
timestamp: String (0.0)
begin: String (0.0)
end: String (0.0)
altitudeMode: String (0.0)
tessellate: Integer (0.0)
extrude: Integer (0.0)
visibility: Integer (0.0)
drawOrder: String (0.0)
icon: String (0.0)
It's very useful by the way, but what I need is get only metadata names with types, e.g.:
Name: String (0.0)
description: String (0.0)
timestamp: String (0.0)
begin: String (0.0)
end: String (0.0)
altitudeMode: String (0.0)
tessellate: Integer (0.0)
extrude: Integer (0.0)
visibility: Integer (0.0)
drawOrder: String (0.0)
icon: String (0.0)
Can someone help me out?
Answer
A very quick way would be to use the linux command line utility tail as follows:
ogrinfo -ro -so -al BRA_001.shp | tail -n + 20
However, this won't always be reprocible if the SRS is different. As user30184 mentioned, you would need to use the OGR API. The following example is in Python:
from osgeo import ogr
shpFile = r"./BRA_001.shp"
dataSource = ogr.Open(shpFile)
layer = dataSource.GetLayer(0)
layerDefn = layer.GetLayerDefn()
for i in range(layerDefn.GetFieldCount()):
fieldName = layerDefn.GetFieldDefn(i).GetName()
fieldTypeCode = layerDefn.GetFieldDefn(i).GetType()
fieldType = layerDefn.GetFieldDefn(i).GetFieldTypeName(fieldTypeCode)
fieldWidth = layerDefn.GetFieldDefn(i).GetPrecision()
print str(fieldName) + ": " + str(fieldType) + " (" + str(fieldWidth) + ")"
Here is an example that prints the output as a JSON Array:
import sys
try:
from osgeo import ogr, gdal
except:
sys.exit('[ ERROR ]: cannot find GDAL/OGR modules')
def printMetadata(daShapefile):
dataSource = ogr.Open(daShapefile)
daLayer = dataSource.GetLayer(0)
layerDefinition = daLayer.GetLayerDefn()
c = layerDefinition.GetFieldCount()
print "["
for i in range(c):
fieldName = layerDefinition.GetFieldDefn(i).GetName()
fieldTypeCode = layerDefinition.GetFieldDefn(i).GetType()
fieldType = layerDefinition.GetFieldDefn(i).GetFieldTypeName(fieldTypeCode)
fieldWidth = layerDefinition.GetFieldDefn(i).GetWidth()
GetPrecision = layerDefinition.GetFieldDefn(i).GetPrecision()
if((c - 1) != i):
scape = ','
else:
scape = ""
print("{\"name\":\"%s\",\"type\":\"%s\",\"length\":%s,\"precision\":%s}%s" % (fieldName,fieldType,str(fieldWidth),str(GetPrecision),scape))
print "]"
if len( sys.argv ) < 2:
sys.exit('[ ERROR ]: You must define a file ')
else:
file_path_name = sys.argv[1]
printMetadata(sys.argv[1])
No comments:
Post a Comment