python使用GDAL生成shp文件

GDAL是一個開源的地理工具包,其支持基本所有的地理操作,其有python、java、c等語言包,是地理信息C端開發不可越過的工具,鑑於python語言的簡單性,這裏使用python中GDAL包來進行shp文件的生成,這裏本質是利用ogc地理標準的座標字符串來生成shp。
第一步:安裝GDAL環境,建議下載後,本地安裝,注意與python版本號要對應,可參考網上教程。

第二部:代碼分析
引入GDAL工具包

import osgeo.ogr as ogr
import osgeo.osr as osr

註冊驅動,這裏是ESRI Shapefile類型,並設置shp文件名稱

driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.CreateDataSource("ceshi.shp")

注入投影信息,這裏使用的4326,表示經緯度座標,根據情況可以自行更改

srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)

這裏定義的是,生成的要素類型,包括點、線、面
#ogr.wkbPoint 點
#ogr.wkbLineString 線
#ogr.wkbMultiPolygon 面
這裏的圖層名稱要與上面註冊驅動的shp名稱一致

layer = data_source.CreateLayer("ceshi", srs, ogr.wkbLineString)

這裏設置要素的屬性字段,其中設置了兩個字段,分別是Name、data,其中ogr.OFTString表示字符串類型,其長度都是14字節,可自行設置寬度
在這裏插入圖片描述

field_name = ogr.FieldDefn("Name", ogr.OFTString)
field_name.SetWidth(14)
layer.CreateField(field_name)
field_name = ogr.FieldDefn("data", ogr.OFTString)
field_name.SetWidth(14)
layer.CreateField(field_name)

在生成的字段名中插入要素值,即屬性表中每行的值

feature = ogr.Feature(layer.GetLayerDefn())
feature.SetField("Name", "ceshi")
feature.SetField("data", "1.2")

核心部分,生成line數據
其中各要素格式如下:
POINT(6 10)
LINESTRING(3 4,10 50,20 25)
POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))
MULTIPOINT(3.5 5.6, 4.8 10.5)
MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))
MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3)))
GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
POINT ZM (1 1 5 60)
POINT M (1 1 80)
需要注意的是,這裏應該與上面定義的生成要素的類型保持一致,最後是清空緩存,這裏多說一句,字符串語法與postgis等開源gis一致,都遵循ogc國際標準

wkt = 'LINESTRING(3 4,10 50,20 25)'
line = ogr.CreateGeometryFromWkt(wkt)
feature.SetGeometry(line)
layer.CreateFeature(feature)

feature = None
data_source = None

結果如下:
在這裏插入圖片描述
用arcgis打開
在這裏插入圖片描述
可以使用該方法,下載在線shp數據,只需要知道所需要素的geojson格式數據中座標串即可。或者圖像識別中獲取的矢量邊界賦予經緯度。

最後,希望新型肺炎早日過去,一切恢復如舊

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章