我在 Python 中使用 gdal 的 ogrinfo 命令來獲取有關 shapefile 的資訊。
我的代碼如下:
from subprocess import Popen, PIPE
args = ['ogrinfo', '-ro', '-so', '-al', 'C:/test/test_shapefile.shp']
process = Popen(args, stdout=PIPE, stderr=PIPE)
stdout = process.communicate()[0].decode('utf-8').strip()
print(stdout)
反過來,這給了我大量的資訊,例如
Layer name: test_shapefile
Metadata:
DBF_DATE_LAST_UPDATE=2022-04-13
Geometry: 3D Point
Feature Count: 28915413
Extent: (317044.250000, 681703.750000) - (322287.250000, 685053.250000)
Layer SRS WKT:
PROJCRS["OSGB 1936 / British National Grid",
BASEGEOGCRS["OSGB 1936",
DATUM["OSGB 1936",
ELLIPSOID["Airy 1830",6377563.396,299.3249646,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4277]],
CONVERSION["British National Grid",
METHOD["Transverse Mercator",
ID["EPSG",9807]],
PARAMETER["Latitude of natural origin",49,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8801]],
PARAMETER["Longitude of natural origin",-2,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["Scale factor at natural origin",0.9996012717,
SCALEUNIT["unity",1],
ID["EPSG",8805]],
PARAMETER["False easting",400000,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",-100000,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
CS[Cartesian,2],
AXIS["(E)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["(N)",north,
ORDER[2],
LENGTHUNIT["metre",1]],
USAGE[
SCOPE["Engineering survey, topographic mapping."],
AREA["United Kingdom (UK) - offshore to boundary of UKCS within 49°45'N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland). Isle of Man onshore."],
BBOX[49.75,-9,61.01,2.01]],
ID["EPSG",27700]]
Data axis to CRS axis mapping: 1,2
X: Real (24.15)
Y: Real (24.15)
Z: Real (24.15)
我想知道,有沒有辦法將某些資訊存盤為變數?
例如:
one_extent = 317044.250000, 322287.250000
second_extent = 681703.750000, 685053.250000
epsg = 4277
uj5u.com熱心網友回復:
如果您只需要范圍和 EPSG,則不需要 OGRInfo,您可以只使用 Python OGR 和 OSR 系結:
from osgeo import ogr, osr
import os
inShapefile = "C:/test/test_shapefile.shp"
inDriver = ogr.GetDriverByName("ESRI Shapefile")
inDataSource = inDriver.Open(inShapefile, 0)
inLayer = inDataSource.GetLayer()
extent = inLayer.GetExtent()
proj = osr.SpatialReference(wkt=inDataSource.GetProjection())
proj.AutoIdentifyEPSG()
epsg = proj.GetAttrValue('AUTHORITY',1)
print(f"extent: {extent} EPSG: {epsg}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/469298.html
標籤:Python python-3.x 变量 格达尔 形状文件
上一篇:為什么上傳時我的所有變數都是物件而不是數值(int,float)?
下一篇:為什么這個鏈表添加方法有效?
