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

使用R语言优雅的获取任意区域的POI,道路,河流等数据

POI是“Polnt of Information”的缩写,中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点,如商店,酒吧,加油站,医院,车站等。POI,道路网,河流等是我们日常研究中经常需要使用的数据。

目前这些数据的获取都有一定的难度,有的下载需要付费,使用代码爬取又需要编写复杂的代码。有时很难成功获得我们想要的数据。

OSM地图数据是指来自OpenStreetMap(开放街道地图)项目的地理信息数据。OpenStreetMap是一个由全球志愿者共同维护的开源地图项目,OSM地图数据的特点包括开放性和可编辑性,这意味着任何人都可以贡献和改进地图数据。这些数据涵盖了道路、建筑、水系、地形等多种地理要素,具有丰富的地理信息和细节。先看看效果:

图片

今天使用R语言调用的就是OSM的各类数据,R语言中的osmdata 包提供有关全球各种空间属性和对象的空间数据。available_features() 函数可用于获取 OSM 中已识别特征的列表。可用功能的列表可以在 OSM wiki 中找到。


##   [1] "4wd_only"                    "abandoned"                  
##   [3] "abutters"                    "access"                     
##   [5] "addr"                        "addr:city"                  
##   [7] "addr:conscriptionnumber"     "addr:country"               
##   [9] "addr:county"                 "addr:district"              
##  [11] "addr:flats"                  "addr:full"                  
##  [13] "addr:hamlet"                 "addr:housename"             
##  [15] "addr:housenumber"            "addr:inclusion"             
##  [17] "addr:interpolation"          "addr:place"                 
##  [19] "addr:postbox"                "addr:postcode"              
##  [21] "addr:province"               "addr:state"                 
##  [23] "addr:street"                 "addr:subdistrict"           
##  [25] "addr:suburb"                 "addr:unit"                  
##  [27] "admin_level"                 "aeroway"                    
##  [29] "agricultural"                "alt_name"                   
##  [31] "amenity"                     "area"                       
##  [33] "atv"                         "backward"                   
##  [35] "barrier"                     "basin"                      
##  [37] "bdouble"                     "bicycle"                    
##  [39] "bicycle_road"                "biergarten"                 
##  [41] "boat"                        "border_type"                
##  [43] "boundary"                    "brand"                      
##  [45] "bridge"                      "building"                   
##  [47] "building:colour"             "building:fireproof"         
##  [49] "building:flats"              "building:levels"            
##  [51] "building:material"           "building:min_level"         
##  [53] "building:part"               "building:soft_storey"       
##  [55] "bus_bay"                     "busway"                     
##  [57] "capacity"                    "castle_type"                
##  [59] "change"                      "charge"                     
##  [61] "clothes"                     "construction"               
##  [63] "construction#Railways"       "covered"                    
##  [65] "craft"                       "crossing"                   
##  [67] "crossing:island"             "cuisine"                    
##  [69] "cutting"                     "cycleway"                   
##  [71] "denomination"                "destination"                
##  [73] "diet"                        "direction"                  
##  [75] "dispensing"                  "disused"                    
##  [77] "drinking_water"              "drive_in"                   
##  [79] "drive_through"               "ele"                        
##  [81] "electric_bicycle"            "electrified"                
##  [83] "embankment"                  "embedded_rails"             
##  [85] "emergency"                   "end_date"                   
##  [87] "entrance"                    "est_width"                  
##  [89] "fee"                         "female"                     
##  [91] "fire_object:type"            "fire_operator"              
##  [93] "fire_rank"                   "foot"                       
##  [95] "footway"                     "ford"                       
##  [97] "forestry"                    "forward"                    
##  [99] "frequency"                   "fuel"                       
## [101] "gauge"                       "golf_cart"                  
## [103] "goods"                       "hazard"                     
## [105] "hazmat"                      "healthcare"                 
## [107] "healthcare:counselling"      "healthcare:speciality"      
## [109] "height"                      "hgv"                        
## [111] "highway"                     "historic"                   
## [113] "horse"                       "hot_water"                  
## [115] "ice_road"                    "incline"                    
## [117] "industrial"                  "inline_skates"              
## [119] "inscription"                 "int_name"                   
## [121] "internet_access"             "junction"                   
## [123] "kerb"                        "landuse"                    
## [125] "lanes"                       "lanes:bus"                  
## [127] "lanes:psv"                   "layer"                      
## [129] "leaf_cycle"                  "leaf_type"                  
## [131] "leisure"                     "lhv"                        
## [133] "lit"                         "loc_name"                   
## [135] "location"                    "male"                       
## [137] "man_made"                    "max_age"                    
## [139] "max_level"                   "maxaxleload"                
## [141] "maxheight"                   "maxlength"                  
## [143] "maxspeed"                    "maxstay"                    
## [145] "maxweight"                   "maxwidth"                   
## [147] "military"                    "min_age"                    
## [149] "min_level"                   "minspeed"                   
## [151] "mofa"                        "moped"                      
## [153] "motor_vehicle"               "motorboat"                  
## [155] "motorcar"                    "motorcycle"                 
## [157] "motorroad"                   "mountain_pass"              
## [159] "mtb:description"             "mtb:scale"                  
## [161] "name"                        "name:left"                  
## [163] "name:right"                  "name_1"                     
## [165] "name_2"                      "narrow"                     
## [167] "nat_name"                    "natural"                    
## [169] "noexit"                      "non_existent_levels"        
## [171] "nudism"                      "office"                     
## [173] "official_name"               "old_name"                   
## [175] "oneway"                      "opening_hours"              
## [177] "opening_hours:drive_through" "operator"                   
## [179] "orientation"                 "oven"                       
## [181] "overtaking"                  "parking"                    
## [183] "parking:condition"           "parking:lane"               
## [185] "passing_places"              "place"                      
## [187] "power"                       "power_supply"               
## [189] "priority"                    "priority_road"              
## [191] "produce"                     "proposed"                   
## [193] "protected_area"              "psv"                        
## [195] "public_transport"            "railway"                    
## [197] "railway:preserved"           "railway:track_ref"          
## [199] "recycling_type"              "ref"                        
## [201] "reg_name"                    "religion"                   
## [203] "rental"                      "residential"                
## [205] "roadtrain"                   "route"                      
## [207] "sac_scale"                   "sauna"                      
## [209] "service"                     "service_times"              
## [211] "shelter_type"                "shop"                       
## [213] "short_name"                  "shower"                     
## [215] "sidewalk"                    "site"                       
## [217] "ski"                         "smoothness"                 
## [219] "social_facility"             "sorting_name"               
## [221] "speed_pedelec"               "start_date"                 
## [223] "step_count"                  "substation"                 
## [225] "surface"                     "tactile_paving"             
## [227] "tank"                        "tidal"                      
## [229] "toilets"                     "toilets:wheelchair"         
## [231] "toll"                        "topless"                    
## [233] "tourism"                     "tracks"                     
## [235] "tracktype"                   "traffic_calming"            
## [237] "traffic_sign"                "trail_visibility"           
## [239] "trailblazed"                 "trailblazed:visibility"     
## [241] "tunnel"                      "turn"                       
## [243] "type"                        "unisex"                     
## [245] "usage"                       "vehicle"                    
## [247] "vending"                     "voltage"                    
## [249] "water"                       "wheelchair"                 
## [251] "wholesale"                   "width"                      
## [253] "winter_road"                 "wood"
这些就是你可以调用的OSM数据种类

我们今天想使用的是某地区的医院,道路,河流等数据,它们分别属于"amenity","highway","waterway"。

下面我们开始具体代码:


#导入OSMdata和处理矢量数据的包
library(osmdata)
library(sf)

下一步就是创建 osmdata 查询,第一步是定义我们想要包含在查询中的地理区域,这通常是一个城市,osmdata提供了查询函数,十分方便。


nc_bb <- getbb("nanchang")
nc_bb
#这会返回南昌市的边界范围
##        min      max
## x 115.43870 116.56548
## y 28.15784 29.1223

确认没问题,我们就可以直接查询南昌市境内的所有医院:


nc_hospitals <- nc_bb %>%opq() %>%add_osm_feature(key = "amenity", value = "hospital") %>%osmdata_sf()

然后我们就获得了南昌市医院的数据:nc_hospitals,当然上面的代码由于一些不能科学上网或者服务限制的原因,不出问题的话肯定会出问题。所以下面贴出改进后的代码:

原理一样只是写法变化了,我们直接使用我们本地的南昌市数据


library(osmdata)
library(sf)
zh = st_read("E:/Arcgis 地图资源/市县/市县/南昌市.shp")
bb = st_bbox(zh)
bbnanc_hosiptal <- opq (bbox = c (115.43870,28.15784,116.56548,29.12239 )) %>% # add_osm_feature(key = "amenity", value = "hospital") %>%osmdata_sf ()

我们可以开心的可视化了:osm 数据支持“点”,“线”,“”面多种的数据类型,像医院我们就可以有面数据和点数据。我这里的demo将只展示面的,如果你想要南昌市医院的点数据,可以把“nanc_hosiptal$osm_polygons”改成“nanc_hosiptal$osm_point”


# install.packages("leaflet")
library(leaflet)leaflet() %>%addTiles() %>%addPolygons(data = nanc_hosiptal$osm_polygons,label = nanc_hosiptal$osm_polygons$name)

我们就可以得到:

图片

最后,如果你想要在arcgis,或者QGIS中使用,可以将数据转化成shp格式或者GeoPackage,ESRI Shapefile只支持255列,列名限制为10个字符,文件大小限制为10G,所以这里转成shp保存下来必须要根据这些要求进行处理。因此这里最推荐使用GeoPackage,它是一个轻量级的空间数据库容器,没有奇奇怪怪的限制。它只需要一句话:


nch = nanc_hosiptal$osm_polygons
st_write(nch, "G:/R/nanc_hospital.gpkg")

我们可以打开QGIS看看,如下图,没有任何问题。通过这个方法实际上我们可以获取很多有意思的数据,上面提到的数据我们都可以通过这个方法下载。在这里不得不感叹OSM的强大。

今天就到这里结束了,小编也是摸索了很久才给大家带来这篇推文的,如果大家觉得有用希望点赞转发支持一下,我是加拿大一枝黄花,我们下期再见。

相关文章:

使用R语言优雅的获取任意区域的POI,道路,河流等数据

POI是“Polnt of Information”的缩写&#xff0c;中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点&#xff0c;如商店&#xff0c;酒吧&#xff0c;加油站&#xff0c;医院&#xff0c;车站等。POI&#xff0c;道路网&#xff0c;河流等是我们日常研究中经常需…...

【设计模式】工厂方法模式 在java中的应用

文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较&#xff08;如简单工厂和抽象工厂&#xff09; 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码&#xff1a;创建不同类型的日志记录器 4. 工厂方法…...

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下&#xff0c;如果多个py文件之间需要共享数据&#xff0c;如一个变量&#xff0c;或者调用一个方法 需要先在一个新文件中编写函数等&#xff0c;然后在使用的文件中导入&#xff0c;然后使用 pytest中定义个conftest.py来实现数据&#xff0c;参…...

【面试开放题】挫折、问题、擅长、应用技能

1. 项目中遇到的最大挫折是什么&#xff1f;你是如何应对的&#xff1f; 解答思路&#xff1a; 这个问题通常考察你的问题解决能力、抗压能力和团队协作精神。回答时&#xff0c;可以从以下几个角度展开&#xff1a; 问题背景&#xff1a; 描述项目中遇到的具体挑战。是技术难…...

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)

通过网盘分享的文件&#xff1a;如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…...

SOA、分布式、微服务之间的关系和区别?

在当今的软件开发领域&#xff0c;SOA&#xff08;面向服务架构&#xff09;、分布式系统和微服务是三个重要的概念。它们各自有着独特的特性和应用场景&#xff0c;同时也存在着密切的关系。以下是关于这三者之间关系和区别的详细分析&#xff1a; 关系 分布式架构的范畴&…...

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…...

Node.js-Mongodb数据库

MongoDB MongoDB是什么&#xff1f; MongoDB是一个基于分布式文件存储的数据库 数据库是什么&#xff1f; 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序&#xff08;软件&#xff09; 数据库作用&#xff1f; 对数据进行增、删…...

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式&#xff1a;连续转换模式&#xff1a; 多通道采样的情况禁止扫描模式&#xff08;单次转换模式或连续转换模式&#xff09;单次…...

技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会

11月27日&#xff0c;由开放原子开源基金会指导&#xff0c;OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。软通动力子公司鸿湖万联作为OpenHarmony项目群A类捐赠人应邀出席。大会期间&#xff0c;鸿湖万联不仅深度参与了OpenHarmony人才生态年…...

兔子繁衍问题

7-2 兔子繁衍问题 分数 15 全屏浏览 切换布局 作者 徐镜春 单位 浙江大学 一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死&#xff0c;请问第1个月出生的一对兔子&#xff0c;至少需要繁衍到第几个月时兔…...

汉代风云人物 1晁错

晁错曾是汉景帝的老师。汉景帝登基后&#xff0c;晁错提出削藩建议&#xff0c;这一举措遭到诸多藩国诸侯的强烈反对&#xff0c;由此引发了紧张局势。 袁盎此前曾担任吴国的宰相&#xff0c;晁错觉得袁盎与吴国等藩国关系密切&#xff0c;很可能知晓藩王们谋反的相关情况却没…...

学习threejs,使用specularMap设置高光贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…...

【UE5 C++】判断两点连线是否穿过球体

目录 前言 方法一 原理 代码 测试 结果 方法二 原理 一、检查连线与球体的相交情况 二、检查距离与球体半径的关系 三、检查连线与球体的相交 代码 前言 通过数学原理判断空间中任意两点的连线是否穿过球体&#xff0c;再通过射线检测检验算法的正确性。 方法一 …...

【Blender】如何创建空心管道

步骤 1&#xff1a;创建一个圆柱体 添加圆柱体&#xff1a; 在 Object Mode 下按 Shift A > Mesh > Cylinder。 步骤 2&#xff1a;制作空心效果 进入编辑模式&#xff1a; 选中圆柱体&#xff0c;按 Tab 进入 Edit Mode。 删除顶部和底部面&#xff1a; 按 3 进入面选…...

ChromeBook11 HP G7EE 刷入Ubuntu的记录

设置开发模式-> 拆电池(解锁)-> 刷入bios ->使用u盘刷入系统。 下面是详细过程&#xff0c;除了拆机有点紧&#xff0c;没有难度(我不负责&#xff5e; 其实我试了好几次其他系统的&#xff0c;先进了pe&#xff0c;pe没问题(音频x)&#xff0c;有一个win10的u盘(几个…...

16asm - 汇编介绍 和 debug使用

文章目录 前言硬件运行机制微机系统硬件组成计算机系统组成8086cpu组织架构dosbox安装配置debug debug使用R命令D命令E命令U命令T命令A命令标志寄存器 总结 前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解 十六位汇编 和 debug调试器的使用 硬件运行…...

初识QT第一天

思维导图 利用Qt尝试做出原神登陆界面 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit# 封装原神窗口类 class Genshin(QWidget):# 构造函数def __init__(self):# 初始化父类…...

ChatGPT科研应用、论文写作、课题申报、数据分析与AI绘图

随着人工智能技术的飞速发展&#xff0c;ChatGPT等先进语言模型正深刻改变着科研工作的面貌。从科研灵感的激发、论文的高效撰写&#xff0c;到课题的成功申报&#xff0c;乃至复杂数据的深度分析与可视化呈现&#xff0c;AI技术均展现出前所未有的潜力。其实众多科研前沿工作者…...

嵌入式核心板选型实战:从AI加速到工业控制的设计权衡与趋势

1. 展会现场与行业风向初探上周&#xff0c;我作为飞凌嵌入式的一名老员工&#xff0c;亲身参与了2024上海国际嵌入式展。这不仅仅是一次公司产品的展示&#xff0c;更像是一场行业技术趋势的集中检阅。从人头攒动的展台到同行间热烈的技术交流&#xff0c;你能清晰地感受到&am…...

keil5下载配置Samsung固件包

我们要找的是非常经典的 S3C2440、S3C6410 或 S3C44B0X&#xff0c;这些属于早期的 ARM7 / ARM9 / ARM11 架构&#xff0c;它们使用的是旧版的数据库管理方式。直接访问这个网址&#xff1a;www.keil.com/mdk5/legacy网页往下拉&#xff0c;找到 ARM7, ARM9 & Cortex-R 这一…...

Keil C251中HEX文件生成异常的解决方案

1. 问题现象与背景解析最近在调试基于Intel USB Hub参考设计的嵌入式系统时&#xff0c;遇到一个颇为蹊跷的问题。当我从Intel官网下载了完整的USB Hub设备示例代码&#xff08;约40多页的C251汇编混合代码&#xff09;&#xff0c;通过Keil Vision环境编译后&#xff0c;生成的…...

兄弟反目成仇?《易经》深挖人性:猜疑才是最大祸根

你有没有过这样的经历&#xff1f;关系最好的朋友或同事&#xff0c;因为一个误会&#xff0c;突然就成了“最熟悉的陌生人”。你解释&#xff0c;他觉得你掩饰&#xff1b;你沉默&#xff0c;他觉得你默认。最后&#xff0c;好好的关系&#xff0c;硬生生被“猜疑”这把刀&…...

Agentic o3调度器与Gemma/Nemotron-H推理范式演进

1. 项目概述&#xff1a;一场悄然发生的模型推理范式迁移最近在几个核心AI工程团队的内部技术简报里&#xff0c;反复看到一个代号“TAI#149”的专项分析报告被高频引用——它不是某家公司的新品发布会通稿&#xff0c;而是一份由一线模型部署工程师自发整理、持续迭代的实战观…...

别再只会用PWM调速度了!STM32驱动直流有刷电机,H桥的三种模式(单极/双极/受限)到底怎么选?

STM32驱动直流有刷电机的三种H桥模式深度解析与实战选型指南 在嵌入式电机控制领域&#xff0c;PWM调速早已成为基础技能&#xff0c;但真正决定系统性能的往往是H桥工作模式的选择。当你的电机出现异常发热、刹车响应迟缓或低速抖动时&#xff0c;问题很可能就出在模式选择不当…...

2026-2032期间,全球半导体设备零部件PVD和ALD熔射服务市场年复合增长率(CAGR)为9.2%

QYResearch调研显示&#xff0c;2025年全球半导体设备零部件PVD和ALD熔射服务市场规模大约为0.58亿美元&#xff0c;预计2032年将达到1.07亿美元&#xff0c;2026-2032期间年复合增长率&#xff08;CAGR&#xff09;为9.2%。行业竞争格局与细分市场市场分析全球半导体设备零部件…...

Perplexity案例法检索深度解析(工业级RAG系统落地避坑手册)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity案例法检索深度解析&#xff08;工业级RAG系统落地避坑手册&#xff09; Perplexity作为衡量语言模型预测不确定性的核心指标&#xff0c;在RAG系统中并非仅用于后处理重排序&#xff0c;而是…...

2026年,写给所有还在迷茫的技术人:你的坚持终将闪耀

站在2026年的节点回望&#xff0c;整个互联网行业的寒潮似乎还没完全退去&#xff0c;AI大模型重构业务逻辑的浪潮又拍在了每个技术人的岸边。尤其是对千万软件测试从业者来说&#xff0c;这种迷茫感来得更加具体&#xff1a;手工测试岗位不断被自动化脚本挤压&#xff0c;纯功…...

边缘AI加速:CGRA架构与近似计算技术解析

1. 项目概述在边缘计算和人工智能快速发展的今天&#xff0c;如何设计高能效的硬件架构来支持复杂的神经网络推理任务&#xff0c;成为了一个关键挑战。传统的ASIC方案虽然性能优异&#xff0c;但缺乏灵活性&#xff1b;而通用处理器又难以满足能效要求。粗粒度可重构架构(CGRA…...