python shp文件_使用python生成shapefile

在卫星遥感图像处理中,经常要使用shpfile文件(文件后缀为.shp)作为label或者辅助数据。同时,在后期分析中,也会利用shapefile,在QGIS中分析tif图像的特征和属性。所以生成符合自己需求的shapefile十分重要。这篇文章将会介绍如何利用python+gdal+QGIS生成shapefile,并且可视化。

原始数据Tif 图像 (10m/pixel)与图像坐标相对应的信息(本文中使用一个大的shapefile,里面提供了荷兰不同区域的各种统计调查数据,包括人口,房屋,车辆等)

通过tif图像可以得到该图像的坐标信息,我们的目标就是生成一个与这个图像坐标相对应的shapefile,其中包含该区域的城市名,人口密度等(这些数据可以根据需求自己设置)。

获取坐标信息

可以利用rasterio来读取tif文件,获取该图像的坐标信息。

import rasterio

img = rasterio.open('your_path_to_tiff/Nerland_60.tif')

print(img.bounds)

print(img.crs)

同时在QGIS中打开tif图像和shapefile,可以发现该区域的相关信息:区域名称:Gooise Meern

人均汽车保有量:1.2

区域总人口:17410

区域房屋总量:7675

创建shapefile

import osgeo.ogr as ogr

import osgeo.osr as osr

driver = ogr.GetDriverByName("ESRI Shapefile")

data_source = driver.CreateDataSource("Gooise.shp")

srs = osr.SpatialReference()

srs.ImportFromEPSG(32631)

layer = data_source.CreateLayer("Gooise", srs, ogr.wkbMultiPolygon)

field_name = ogr.FieldDefn("Name", ogr.OFTString)

field_name.SetWidth(24)

layer.CreateField(field_name)

field_name = ogr.FieldDefn("Car_per_house", ogr.OFTString)

field_name.SetWidth(24)

layer.CreateField(field_name)

feature = ogr.Feature(layer.GetLayerDefn())

feature.SetField("Name", 'Gooise')

feature = ogr.Feature(layer.GetLayerDefn())

feature.SetField("Car_per_house", '1.2')

wkt = 'polygon((646080 5797460,648640 5797460,648640 5794900,646080 5794900,646080 5797460))'

polygon = ogr.CreateGeometryFromWkt(wkt)

feature.SetGeometry(polygon)

layer.CreateFeature(feature)

feature = None

data_source = None

代码解释:

首先要创建一个操作shapefile的driver, 然后设置好对应的crs。shapefile的形状可以自己设置,可以是polygon, 可以是point,可以是linestring, 具体可以看维基上对应的介绍。需要格外注意的一点是,上面步骤完成以后一定不要忘了最后两行释放资源,否则不会成功生成shapefile。

结果生成的shapefile与原tif图像完全重合,右上角可以看到新添加的属性。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一种功能强大的编程语言,可以用于处理空间数据。要读取和绘制.shp文件,需要使用Python的一些GIS库。下面是一个简单的步骤: 1. 导入必要的库 在Python中,有几个流行的GIS库可用于读取和绘制shp文件,如geopandas和matplotlib。首先,需要导入这些库: ``` import geopandas as gpd import matplotlib.pyplot as plt ``` 2. 读取.shp文件 使用geopandas库的read_file函数可以读取.shp文件。该函数返回一个包含空间数据的geopandas数据帧对象。例如,要读取名为"file.shp"的.shp文件,可以使用下面的代码: ``` data = gpd.read_file("file.shp") ``` 3. 绘制.shp文件 使用matplotlib库,可以很容易地绘制.shp文件。首先,可以创建一个新的绘图对象,然后使用geopandas数据帧对象的plot()函数将.shp文件绘制在该对象上。最后,调用show()函数显示图形。例如,要绘制shp文件中的所有几何图形,可以使用以下代码: ``` fig, ax = plt.subplots() data.plot(ax=ax) plt.show() ``` 这将在一个新的图形窗口中显示.shp文件的地理数据。 请注意,以上代码只是一个简单示例。根据.shp文件的具体内容和需要,还可以进行更复杂的操作,如选择特定的几何图形进行绘制或更改绘图样式等。 通过使用geopandas和matplotlib等Python库,可以方便地读取和绘制.shp文件,使得空间数据的处理更加灵活和可视化。 ### 回答2: Python中可以使用Geopandas和Matplotlib库来读取和绘图shp文件。 要读取.shp文件,首先需要安装geopandas库。可以使用以下命令安装: pip install geopandas 然后可以使用以下代码读取.shp文件: import geopandas as gpd # 读取shapefile文件 data = gpd.read_file('file_path/file_name.shp') 这样,数据就会被存储为一个geopandas的GeoDataFrame对象,可以对其进行进一步的分析和操作。 要绘制.shp文件中的地理数据,可以使用matplotlib库。可以使用以下代码将shp文件绘制出来: import matplotlib.pyplot as plt # 绘图 data.plot() plt.show() 这样,.shp文件中的地理数据就会被绘制为地图。可以根据需要添加坐标轴、设置标题和颜色等其他元素来美化地图。 总而言之,使用geopandas和matplotlib库可以方便地读取和绘制.shp文件中的地理数据。通过这些库,可以进行地理数据的分析和可视化,为地理信息系统(GIS)提供了强大的工具。 ### 回答3: Python中有一些常用的库可以用来读取和绘制shp文件,如geopandas和matplotlib。 要读取shp文件,首先需要安装geopandas库。可以使用pip命令进行安装,如pip install geopandas。然后,在Python代码中导入geopandas库,并使用read_file函数读取shp文件。 ``` import geopandas as gpd data = gpd.read_file('path/to/shapefile.shp') ``` 读取后的数据将以geopandas的GeoDataFrame形式存储,可以使用head函数查看前几行数据,如data.head()。 要绘制shp文件,可以使用matplotlib库。可以使用pip命令进行安装,如pip install matplotlib。然后,在Python代码中导入matplotlib库,并使用plot函数绘制shp文件。 ``` import matplotlib.pyplot as plt data.plot() plt.show() ``` 这样将会在绘图窗口中显示shp文件的地图。可以对绘图进行一些自定义设置,如修改颜色、添加标题等。 除了geopandas和matplotlib,还有其他一些库也可以用来读取和绘制shp文件,如Fiona和Basemap。使用这些库也可以实现类似的功能。 需要注意的是,读取和绘制shp文件之前需要确保安装了相应的库和依赖,并且正确设置了文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值