当前位置: 首页 > news >正文

R语言根据经纬度获得对应样本的省份

R语言根据经纬度获得对应样本的省份

    • 一.输入
    • 二.代码
    • 结果

一.输入

包含样本的经纬度

二.代码

library(sf)
library(dplyr)
library(osmextract)# 1. 准备省份中英文对照表
province_names <- data.frame(name_en = c("Beijing", "Tianjin", "Shanghai", "Chongqing", "Hebei", "Shanxi", "Inner Mongolia", "Liaoning","Jilin", "Heilongjiang", "Jiangsu", "Zhejiang","Anhui", "Fujian", "Jiangxi", "Shandong","Henan", "Hubei", "Hunan", "Guangdong","Guangxi", "Hainan", "Sichuan", "Guizhou","Yunnan", "Tibet", "Shaanxi", "Gansu","Qinghai", "Ningxia", "Xinjiang", "Taiwan"),province_cn = c("北京市", "天津市", "上海市", "重庆市","河北省", "山西省", "内蒙古自治区", "辽宁省","吉林省", "黑龙江省", "江苏省", "浙江省","安徽省", "福建省", "江西省", "山东省","河南省", "湖北省", "湖南省", "广东省","广西壮族自治区", "海南省", "四川省", "贵州省","云南省", "西藏自治区", "陕西省", "甘肃省","青海省", "宁夏回族自治区", "新疆维吾尔自治区", "台湾省")
)# 2. 读取元数据
metadata <- read.csv("lib_metadata2.csv") %>% filter(!is.na(latitude), !is.na(longitude))# 3. 获取中国行政区划数据(两种方式任选其一)
# 方式A:使用osmextract获取数据
poly_china <- openstreetmap_fr_zones %>% filter(parent == "china") %>% left_join(province_names, by = c("name" = "name_en")) %>% mutate(province_cn = ifelse(is.na(province_cn), name, province_cn))# 方式B:使用本地GeoJSON文件(推荐,更稳定)
# china_map <- st_read("D:/path/to/china.json") %>% 
#   left_join(province_names, by = c("name" = "name_en")) %>% 
#   mutate(province_cn = coalesce(province_cn, name))# 4. 转换为空间点数据
points <- st_as_sf(metadata,coords = c("longitude", "latitude"),crs = 4326,  # WGS84坐标系remove = FALSE  # 保留原始列
) %>% st_transform(st_crs(poly_china))  # 转换为与多边形相同的坐标系# 5. 执行空间连接(带中文省份名称)
result <- st_join(points, poly_china, join = st_within) %>% select(lib_id, genus, species, latitude, longitude, region_en = name, region_cn = province_cn)# 6. 处理未匹配的点(可选)
if(any(is.na(result$region_cn))) {# 方法A:标记未匹配点result <- result %>% mutate(region_cn = ifelse(is.na(region_cn), "未知地区", region_cn))# 方法B:使用最近邻匹配(更精确)# unmatched <- result %>% filter(is.na(region_cn))# nearest <- st_nearest_feature(unmatched, poly_china)# result[is.na(result$region_cn), "region_cn"] <- poly_china$province_cn[nearest]
}# 7. 检查结果
print(result %>% count(region_cn, sort = TRUE) %>% as.data.frame())# 8. 保存结果(UTF-8编码支持中文)
write.csv(result, "D:/file/BGI/蚊虫项目/Wolbachia/bam/metadata_with_regions.csv", row.names = FALSE, fileEncoding = "UTF-8")

结果

在这里插入图片描述

http://www.dtcms.com/a/362750.html

相关文章:

  • WPF依赖属性和依赖属性的包装器:
  • iOS混淆工具实战 视频流媒体类 App 的版权与播放安全保护
  • 安卓学习 之 gradle下载失败的解决方法
  • Elasticsearch面试精讲 Day 5:倒排索引原理与实现
  • 跨越产业技术障碍、创新制造模式的智慧工业开源了
  • 【开题答辩全过程】以宠物生活社区为例,包含答辩的问题和答案
  • 扩散模型驱动的智能设计与制造:下一场工业革命?
  • 最新!阿里财报电话会蒋凡与吴泳铭透露重要信息:淘宝闪购成绩斐然;零售与AI双轮驱动;阿里云推出“Agent Bay”新产品···
  • 物联网为何离不开天硕工业级SSD固态硬盘?
  • maven 常用指令
  • Corona渲染噪点终结指南:3ds Max高效去噪全攻略
  • 【3D 入门-3】常见 3D 格式对比,.glb / .obj / .stl / .ply
  • 通信中FDD和TDD的区别
  • 【SpringBootWeb开发】《一篇带你入门Web后端开发》
  • 242. 有效的字母异位词| 349. 两个数组的交集
  • 框架-SpringMVC-1
  • 手写Muduo网络库核心代码1-- noncopyable、Timestamp、InetAddress、Channel 最详细讲解
  • hive udf 执行一次调用多次问题
  • 算法 --- 模拟
  • HDFS读写机制深度解析:分布式存储的核心奥秘
  • Zookeeper分布式锁原理
  • java-设计模式-5-创建型模式-建造
  • 科普:为什么在开发板上运行 Qt 程序时需要在命令后加 -platform linuxfb
  • 少儿舞蹈小程序从0到1(5):搭建关于我们页面
  • 深入浅出 RabbitMQ - SpringBoot2.X整合RabbitMQ实战
  • 23种设计模式-抽象工厂模式
  • 蓝桥杯算法之基础知识(4)
  • Mysql杂志(七)
  • Deepin25安装mysql8.4.5
  • 在ROS中获取并发布UBS式传感器的温湿度