使用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”的缩写,中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点,如商店,酒吧,加油站,医院,车站等。POI,道路网,河流等是我们日常研究中经常需…...
【设计模式】工厂方法模式 在java中的应用
文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较(如简单工厂和抽象工厂) 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码:创建不同类型的日志记录器 4. 工厂方法…...

Pytest框架学习20--conftest.py
conftest.py作用 正常情况下,如果多个py文件之间需要共享数据,如一个变量,或者调用一个方法 需要先在一个新文件中编写函数等,然后在使用的文件中导入,然后使用 pytest中定义个conftest.py来实现数据,参…...
【面试开放题】挫折、问题、擅长、应用技能
1. 项目中遇到的最大挫折是什么?你是如何应对的? 解答思路: 这个问题通常考察你的问题解决能力、抗压能力和团队协作精神。回答时,可以从以下几个角度展开: 问题背景: 描述项目中遇到的具体挑战。是技术难…...
CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)
通过网盘分享的文件:如果能重来.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中,类内的成员变量和成员函数分开存储 我们知道,C中的成员变量和成员函数均可分为两种,一种是普通的,一种是静态的,对于静态成员变量和静态成员函数,我们知道他们不属于类的对象…...
SOA、分布式、微服务之间的关系和区别?
在当今的软件开发领域,SOA(面向服务架构)、分布式系统和微服务是三个重要的概念。它们各自有着独特的特性和应用场景,同时也存在着密切的关系。以下是关于这三者之间关系和区别的详细分析: 关系 分布式架构的范畴&…...

java基础概念46-数据结构1
一、引入 List集合的三种实现类使用了不同的数据结构! 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点:先进后出,后进先出。 java内存容器: 3-2、队列 特点:先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…...
Node.js-Mongodb数据库
MongoDB MongoDB是什么? MongoDB是一个基于分布式文件存储的数据库 数据库是什么? 数据库(DataBase)是按照数据结构来组织、存储和管理数据的应用程序(软件) 数据库作用? 对数据进行增、删…...

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

技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会
11月27日,由开放原子开源基金会指导,OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。软通动力子公司鸿湖万联作为OpenHarmony项目群A类捐赠人应邀出席。大会期间,鸿湖万联不仅深度参与了OpenHarmony人才生态年…...
兔子繁衍问题
7-2 兔子繁衍问题 分数 15 全屏浏览 切换布局 作者 徐镜春 单位 浙江大学 一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔…...
汉代风云人物 1晁错
晁错曾是汉景帝的老师。汉景帝登基后,晁错提出削藩建议,这一举措遭到诸多藩国诸侯的强烈反对,由此引发了紧张局势。 袁盎此前曾担任吴国的宰相,晁错觉得袁盎与吴国等藩国关系密切,很可能知晓藩王们谋反的相关情况却没…...

学习threejs,使用specularMap设置高光贴图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…...
【UE5 C++】判断两点连线是否穿过球体
目录 前言 方法一 原理 代码 测试 结果 方法二 原理 一、检查连线与球体的相交情况 二、检查距离与球体半径的关系 三、检查连线与球体的相交 代码 前言 通过数学原理判断空间中任意两点的连线是否穿过球体,再通过射线检测检验算法的正确性。 方法一 …...

【Blender】如何创建空心管道
步骤 1:创建一个圆柱体 添加圆柱体: 在 Object Mode 下按 Shift A > Mesh > Cylinder。 步骤 2:制作空心效果 进入编辑模式: 选中圆柱体,按 Tab 进入 Edit Mode。 删除顶部和底部面: 按 3 进入面选…...
ChromeBook11 HP G7EE 刷入Ubuntu的记录
设置开发模式-> 拆电池(解锁)-> 刷入bios ->使用u盘刷入系统。 下面是详细过程,除了拆机有点紧,没有难度(我不负责~ 其实我试了好几次其他系统的,先进了pe,pe没问题(音频x),有一个win10的u盘(几个…...

16asm - 汇编介绍 和 debug使用
文章目录 前言硬件运行机制微机系统硬件组成计算机系统组成8086cpu组织架构dosbox安装配置debug debug使用R命令D命令E命令U命令T命令A命令标志寄存器 总结 前言 各位师傅大家好,我是qmx_07,今天给大家讲解 十六位汇编 和 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绘图
随着人工智能技术的飞速发展,ChatGPT等先进语言模型正深刻改变着科研工作的面貌。从科研灵感的激发、论文的高效撰写,到课题的成功申报,乃至复杂数据的深度分析与可视化呈现,AI技术均展现出前所未有的潜力。其实众多科研前沿工作者…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...