You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含经纬度的犯罪数据框与圣保罗区shapefile合并并统计分区犯罪数

解决空间点数据与区域面数据的匹配及汇总问题

看起来你卡在空间数据匹配和犯罪数量汇总这一步了,别担心,这是空间分析里非常常见的操作,核心问题大概率是坐标系不匹配——你的犯罪点数据用的是经纬度(WGS84坐标系),而圣保罗区域的shapefile显示的是UTM投影坐标(比如352436.9这种平面坐标),不统一坐标系的话空间匹配肯定会失败。

下面我给你两种解决方案:一种基于你已经在用的sp包,另一种是更现代易用的sf包(强烈推荐,现在是R空间数据处理的标准工具)。


方法一:基于sp包的实现步骤

1. 读取并检查shapefile的坐标系

首先你需要读取圣保罗的区域shapefile,并确认它的投影信息:

library(sp)
library(rgdal)

# 替换成你的shapefile路径和图层名
districts_sp <- readOGR(dsn = "你的shapefile所在文件夹路径", layer = "shapefile的图层名")

# 查看shapefile的投影参数
print(proj4string(districts_sp))

2. 统一点数据与面数据的坐标系

你的df.sp是经纬度格式(WGS84),需要转换为和shapefile完全一致的投影:

# 转换点数据的投影
df.sp_proj <- spTransform(df.sp, CRSobj = proj4string(districts_sp))

3. 空间匹配:将点关联到对应区域

用over()函数完成点与面的空间匹配,得到每个犯罪点所属的区域:

# 匹配每个点对应的区域信息
point_district_mapping <- over(df.sp_proj, districts_sp)

# 将匹配结果合并回原始数据
df_with_district <- cbind(df.sp_proj@data, point_district_mapping)

4. 按区域汇总犯罪数量

最后用aggregate()函数按区域名称(NOME_DIST)汇总n_homdol的总和:

# 按区域分组求和
crime_count_by_district <- aggregate(n_homdol ~ NOME_DIST, data = df_with_district, sum)

方法二:基于sf包的实现步骤(推荐)

sf包比sp包更直观,语法更贴近常规数据框操作,处理大数量数据(比如你的10000+条观测)效率也更高:

1. 读取shapefile并转换点数据为sf对象

library(sf)

# 读取圣保罗区域shapefile
districts_sf <- st_read("你的shapefile所在文件夹路径")

# 将原始犯罪数据框转换为sf空间对象(经纬度对应EPSG:4326,即WGS84)
df_sf <- st_as_sf(df, coords = c("longitude", "latitude"), crs = 4326)

2. 统一坐标系

将点数据转换为和shapefile一致的投影:

df_sf_proj <- st_transform(df_sf, crs = st_crs(districts_sf))

3. 空间连接与汇总

用st_join()完成点面匹配,再直接分组求和:

# 空间连接:将点匹配到所在区域(st_within确保点完全在区域内)
joined_data <- st_join(df_sf_proj, districts_sf, join = st_within)

# 按区域汇总n_homdol总和
crime_count_by_district_sf <- aggregate(n_homdol ~ NOME_DIST, data = joined_data, sum)

额外注意事项

  • 如果有部分犯罪点不在任何圣保罗区域内,匹配结果会出现NA,你可以用na.omit()过滤,或者根据需求处理这些异常点。
  • 确保shapefile的路径和图层名正确,readOGR或st_read如果找不到文件会报错,注意检查路径格式。

内容的提问来源于stack exchange,提问作者mmramame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:22:35