地理数据
地理数据是存储在地理信息系统 (GIS) 中的位置信息。通过查看具有地理成分的数据,我们可以通过不同的视角来看待它。
用地理数据解决位置问题需要空间思维。让我们深入了解地理数据的类型、主题和来源。
类型
地理数据有不同类型,每种类型在使用方式上都有其独特的价值。
无论数据来自政府、私人来源还是开放数据,了解数据的类型、数据的来源、数据的收集方式以及数据的用途都很重要。
- 矢量文件:矢量数据由顶点和路径组成。矢量数据的三种基本类型是点、线和多边形(面)。每个点、线和多边形都有一个空间参考系,例如纬度和经度。首先,向量点只是 XY 坐标。其次,矢量线以特定顺序将每个点或顶点与路径连接起来。最后,多边形连接一组顶点。但它包围了第一个和最后一个顶点,创建了一个多边形区域。
- 光栅文件:栅格数据由像素或网格单元组成。通常,它们是方形的并且间隔规则。但光栅也可以是矩形的。栅格将值与每个像素相关联。连续栅格具有逐渐变化的值,例如海拔或温度。但离散栅格将每个像素设置为特定类别。例如,我们将土地覆盖类别表示为一组值。
- 地理数据库:地理数据库的目的是存储矢量和栅格。数据库将地理数据存储为一组结构化的数据/信息。例如,Esri 地理数据库、地理包和 SpatiaLite 是最常见的地理数据库类型。我们使用地理数据库,因为这是一种将所有数据放入单个容器中的方法。在这个容器中,我们可以构建网络、创建马赛克、进行版本控制并管理复杂的空间关系,从而实现地理数据的全面分析和表示。
- 网页文件:例如,GeoJSON、GeoRSS 和 Web 地图服务 (WMS) 专门用于通过互联网提供和显示地理特征。此外,Esri 的 ArcGIS Online 等在线平台允许组织在云中构建数据仓库。
- 多时相:多时态数据将时间成分附加到信息上。但多时相地理数据不仅具有时间成分,还具有地理成分。例如,天气和气候数据跟踪温度和气象信息在地理背景下如何随时间变化。多时相地理数据的其他示例包括人口趋势、土地利用模式和雷击。
Python处理地理数据
读取形状文件
首先,我们将导入 geopandas 库,然后使用变量"world_data"读取我们的 shapefile。 Geopandas 可以使用以下命令读取几乎任何基于矢量的空间数据格式,包括 ESRI shapefile、GeoJSON 文件等:
python
import geopandas as gpd
# Reading the world shapefile
world_data = gpd.read_file(r'world.shp')
world_data
绘图
如果您想检查正在使用的数据类型,请转到控制台并输入"type(world_data)",它会告诉您这不是 pandas 数据,而是 geopandas 地理数据。接下来,我们将使用plot()方法绘制这些GeoDataFrame。
python
import geopandas as gpd
# Reading the world shapefile
world_data = gpd.read_file(r'world.shp')
world_data.plot()
选择列
如果我们看到"world_data"GeoDataFrame 显示了许多列(Geoseries),您可以通过以下方式选择特定的 Geoseries:
python
import geopandas as gpd
# Reading the world shapefile
world_data = gpd.read_file(r'world.shp')
world_data = world_data[['NAME', 'geometry']]
计算面积
我们可以通过创建新列"area"并使用area属性,使用geopandas计算每个国家的面积。
python
import geopandas as gpd
# Reading the world shapefile
world_data = gpd.read_file(r'world.shp')
world_data = world_data[['NAME', 'geometry']]
# Calculating the area of each country
world_data['area'] = world_data.area
移除大陆
我们可以从 Geoseries 中删除特定元素。在这里,我们将从"名称"地质系列中删除名为"南极洲"的大陆。
python
import geopandas as gpd
# Reading the world shapefile
world_data = gpd.read_file(r'world.shp')
world_data = world_data[['NAME', 'geometry']]
# Calculating the area of each country
world_data['area'] = world_data.area
# Removing Antarctica from GeoPandas GeoDataframe
world_data = world_data[world_data['NAME'] != 'Antarctica']
world_data.plot()