CSV转为GIS轨迹数据
时间: 2024-12-26 13:26:43 浏览: 10
### 如何将CSV文件转换为GIS轨迹数据
#### 使用Python和GeoPandas库实现转换
为了将CSV文件中的出租车轨迹数据转换成GIS兼容的格式,可以采用Python编程语言及其地理空间分析库——GeoPandas。该过程涉及读取原始CSV文件、创建几何对象并保存到新的Shapefile或其他矢量格式中。
```python
import pandas as pd
from shapely.geometry import Point, LineString
import geopandas as gpd
# 加载CSV数据
data = pd.read_csv('taxi_trajectories.csv')
# 清洗数据,移除任何不符合预期模式的数据条目[^1]
cleaned_data = data.dropna().drop_duplicates()
# 转换经纬度单位由度至弧度以便后续计算距离等操作时更精确[^2]
def deg_to_rad(degrees):
pi_on_180 = 0.017453292519943295
return degrees * pi_on_180
cleaned_data['start_lon'] = cleaned_data['start_longitude'].apply(deg_to_rad)
cleaned_data['start_lat'] = cleaned_data['start_latitude'].apply(deg_to_rad)
# 创建Shapely Points表示每段行程起始位置
geometry_starts = [Point(xy) for xy in zip(cleaned_data.start_lon, cleaned_data.start_lat)]
# 如果有目的地坐标也做相同处理...
if 'end_longitude' in cleaned_data.columns and 'end_latitude' in cleaned_data.columns:
cleaned_data['end_lon'] = cleaned_data['end_longitude'].apply(deg_to_rad)
cleaned_data['end_lat'] = cleaned_data['end_latitude'].apply(deg_to_rad)
geometry_ends = [Point(xy) for xy in zip(cleaned_data.end_lon, cleaned_data.end_lat)]
else:
# 或者仅基于起点构建LineStrings如果只有单点信息则跳过此步
pass
# 构建Linestring代表完整的路径(如果有终点的话)
lines = []
for i in range(len(geometry_starts)):
try:
line = LineString([geometry_starts[i], geometry_ends[i]])
lines.append(line)
except NameError:
break
gdf_lines = gpd.GeoDataFrame(data=cleaned_data[['timestamp']], geometry=lines)
# 设置CRS (这里假设WGS84 EPSG:4326)
gdf_lines.crs = "EPSG:4326"
# 导出为shapefile或者其他支持的空间数据库格式
output_path = './processed_taxi_tracks.shp'
gdf_lines.to_file(output_path)
```
通过上述方法,可以从简单的表格型CSV文件出发,经过一系列变换最终得到可用于地图展示或进一步空间分析的标准GIS数据集。
阅读全文