地理空间分析涉及具有地理成分的数据的处理、操作和可视化。由于有大量可用的强大库,Python 是一种流行的地理空间分析语言。这些库提供广泛的功能,包括地理编码、地理空间数据操作、空间可视化和空间分析。在本文中,我们将探讨一些使用最广泛的地理空间 Python 库及其用例。从分析人口数据的空间分布到预测自然灾害的影响,地理空间分析在各个领域都有广泛的应用,Python库使其易于实现。到本文结束时,读者将更好地了解这些库的功能以及如何将它们用于您自己的地理空间分析项目。
流行的地理空间 Python 库列表和用例如下:
它建立在GDAL 库之上,为许多不同的地理空间数据格式提供支持。以下是如何使用 Fiona 读取 shapefile 的简单示例:
# Open the shapefile using Fiona
with fiona.open("AUT_rails.shp", "r") as shapefile:
# Print the name and geometry of each feature in the shapefile
for feature in shapefile:
print(feature["properties"])
print(feature["geometry"])
在此代码中,Fiona 库照常导入。然后,该fiona.open()函数用于以读取模式打开 shapefile。路径作为第一个参数传递给 shapefile,“r”作为第二个参数表示需要读取该文件。
for 循环用于迭代shapefile 中的每个要素。对于每个特征,打印特征的属性(存储在“properties”键下的字典中),以及特征的几何形状(存储在“geometry”键下)。
上面的结果显示了奥地利铁路的详细信息以及表示它们所需的各种坐标。
这只是一个如何使用 Fiona 读取 shapefile 的简单示例。Fiona 还提供了许多用于处理地理空间数据的其他函数和功能,包括将数据写入文件、查询数据等。
Geopandas:Pandas 库的扩展,提供处理地理空间数据的功能。
import geopandas as gpd
# Load shapefile as GeoDataFrame
gdf = gpd.read_file("AUT_rails.shp")
# Print the first five rows of the GeoDataFrame
print(gdf.head())
# Plot the GeoDataFrame
gdf.plot()
.shp 文件的前 5 行和 .shp 文件中存在的铁路网络
在此示例代码中,使用函数将 shapefile作为 GeoDataFrame 加载gpd.read_file()。使用该函数显示 GeoDataFrame 的前五行head(),然后使用该plot()函数绘制 GeoDataFrame。
from shapely.geometry import Point, LineString, Polygon
# Create a Point object
point1 = Point(0, 0)
# Create another Point object
point2 = Point(4, 4)
# Create a LineString object
line = LineString([(0, 0), (1, 1), (2, 2), (4, 4)])
# Check if the line intersects with the point
print(line.intersects(point1))
print(line.intersects(point2))
# Create a Polygon object
polygon = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
# Check if the point is inside the polygon
print(polygon.contains(point1))
print(polygon.contains(point2))
Output:
True
True
False
False
此代码导入Shapely 库并创建三个不同的几何对象:一个Point、一个LineString和一个Polygon。然后它使用各种Shapely 函数对这些对象执行几何操作。具体来说,它检查 LineString 是否与 Points 相交以及Polygon 是否包含 Points。这些只是可以使用 Shapely 执行的许多操作中的几个示例。
import rasterio
import matplotlib.pyplot as plt
# Open the raster file in read mode
with rasterio.open('example.tif') as src:
# Print the raster metadata
print(src.meta)
# Read the first band of the raster
band1 = src.read(1)
# Plot the raster using matplotlib
plt.imshow(band1)
plt.show()
此代码使用 rasterio 库打开名为“example.tif”的光栅文件并打印光栅的元数据。然后它读取栅格的第一个波段并使用 matplotlib 库绘制它。这有助于可视化栅格数据并了解其特征。
Pyproj:一个用于执行地理空间数据投影和转换的库。
import pyproj
# Define the input and output coordinate systems
in_proj = pyproj.Proj(init='epsg:4326') # WGS84 (standard lat/long)
out_proj = pyproj.Proj(init='epsg:26915') # UTM Zone 15N
# Define a point in the input coordinate system
x, y = -73.9857, 40.7484
# Convert the point to the output coordinate system
x_out, y_out = pyproj.transform(in_proj, out_proj, x, y)
# Print the output coordinates
print(f"Output coordinates: {x_out}, {y_out}")
Output:
Output coordinates: 2109179.3873605104, 4688651.3110369155
这段代码演示了如何使用不同坐标系之间的坐标pyproj转换。本例中定义了两个坐标系(和),用于将一个点从输入坐标系转换到输出坐标系。生成的坐标如上所示打印为Output coordinates。WGS84UTM Zone 15Npyproj.transform()
import folium
# create a map centered on a specific location
map = folium.Map(location=[37.7749, -122.4194], zoom_start=12)
# add a marker to the map
folium.Marker(location=[37.7749, -122.4194], popup='San Francisco').add_to(map)
# add a circle to the map
folium.Circle(location=[37.7749, -122.4194], radius=500, fill=True).add_to(map)
# add a polygon to the map
folium.Polygon(locations=[[(37.7749, -122.4194), (37.7749, -122.4074), (37.7669, -122.4074), (37.7669, -122.4194)]],
fill=True).add_to(map)
# display the map
map
在此示例中,创建了以某地为中心的地图,并向地图添加了标记、圆和多边形。生成的地图显示在Jupyter 笔记本或单独的浏览器窗口中,具体取决于代码的运行方式。需要注意的是,可以使用 Folium 库提供的各种选项自定义地图的外观及其元素。