共享单车轨迹数据分析:以厦门市共享单车数据为例(五)

先来聊聊啥是共享单车电子围栏?

共享单车电子围栏是一种基于地理位置技术的虚拟边界,用于管理和规范共享单车的停放和使用。这种技术通过在地图上划定特定区域,帮助用户了解哪些地方可以停车,哪些地方不能停车,从而减少随意停放带来的城市管理问题;

共享单车电子围栏是指在地图上划定的虚拟区域,这些区域通过GPS或其他定位技术来识别和管理。当用户在这些区域内停放或取用共享单车时,系统会进行相应的管理和监控。

功能和作用

  1. 规范停车

    • 指定停车区域:在城市中划定特定的停车区域,引导用户在这些区域内停放共享单车,减少乱停乱放现象。
    • 禁止停车区域:在一些敏感区域(如学校、医院、公园等)划定禁止停车区域,防止共享单车对这些区域的正常使用造成干扰。
  2. 用户引导

    • APP提示:当用户接近电子围栏区域时,共享单车APP会提示用户当前的位置是否适合停车或取车。
    • 奖励机制:鼓励用户在指定区域内停车,通过积分、优惠券等方式给予奖励。
  3. 运营管理

    • 实时监控:运营方可以通过后台系统实时监控共享单车的分布情况,及时调度车辆,确保供需平衡。
    • 违规处罚:对于在禁止停车区域内停放的用户,可以通过扣分、罚款等方式进行处罚,提高用户的合规意识。

技术实现

  1. GPS定位

    • 共享单车内置GPS模块,实时上传车辆位置信息到服务器。
    • 用户通过APP获取当前位置信息,判断是否在电子围栏区域内。
  2. 地图服务

    • 使用地图API(如Google Maps、高德地图等)绘制电子围栏区域。
    • 通过地图服务获取用户的精确位置信息,判断用户是否在指定区域内。
  3. 数据处理

    • 服务器端接收和处理来自共享单车的实时位置数据。
    • 根据预设的电子围栏规则,判断车辆是否在允许停放的区域内。

我们的重点是如何将共享单车的电子围栏数据转换成可用的图层数据。由于坐标已经是WGS84格式,因此不需要进行坐标系转换。我们先来看一下原始数据及其标签解释

FENCE_ID:电子围栏唯一编号,FENCE_LOC:电子围栏位置坐标串(包括电子围栏所在位置四个顶点的坐标信息,WGS84坐标),数据范围厦门市思明区和湖里区(1.4071万条);

我们要做的就是把电子围栏数据的坐标点进行转化成可用的面图层,为了实现这一效果,我们通过python脚本来完成,注意把读取路径和导出路径改成自己的即可;

完整代码#运行环境Python 3.11

# -*- coding: utf-8 -*-import pandas as pd
import geopandas as gpd
from shapely.geometry import Polygon
import astdef parse_fence_loc(fence_loc):"""解析FENCE_LOC列中的字符串,将其转换为列表形式的坐标点。:param fence_loc: 包含坐标点的字符串:return: 坐标点的列表"""return ast.literal_eval(fence_loc)def calculate_rectangle_bounds(points):"""计算给定坐标点的最小矩形边界。:param points: 坐标点的列表:return: 矩形的五个顶点坐标"""# 初始化最小和最大值min_lon, max_lon = float('inf'), float('-inf')min_lat, max_lat = float('inf'), float('-inf')for lon, lat in points:min_lon = min(min_lon, lon)max_lon = max(max_lon, lon)min_lat = min(min_lat, lat)max_lat = max(max_lat, lat)# 返回矩形的五个顶点坐标return [(min_lon, min_lat), (max_lon, min_lat), (max_lon, max_lat), (min_lon, max_lat), (min_lon, min_lat)]def process_csv(input_file, output_file):"""处理CSV文件,计算每个围栏的矩形边界,并将结果保存为Shapefile。:param input_file: 输入CSV文件路径:param output_file: 输出Shapefile文件路径"""# 读取CSV文件,指定编码为UTF-8df = pd.read_csv(input_file, encoding='utf-8')# 创建GeoDataFrame# 使用apply方法将FENCE_LOC列中的字符串解析为坐标点,计算矩形边界,并创建Polygon对象gdf = gpd.GeoDataFrame(df, geometry=df['FENCE_LOC'].apply(lambda loc: Polygon(calculate_rectangle_bounds(parse_fence_loc(loc)))))# 保存为Shapefile,指定编码为UTF-8gdf.to_file(output_file, driver='ESRI Shapefile', encoding='utf-8')if __name__ == "__main__":input_file = 'D://data//共享单车.csv'  # 输入CSV文件路径output_file = '共享单车电子围栏.shp'  # 输出Shapefile文件路径process_csv(input_file, output_file)print(f"处理完成,结果已保存到 {output_file}")

为什么需要五个点?

  1. 闭合多边形

    • 在地理信息系统(GIS)中,多边形必须是闭合的,即起点和终点必须相同。这是为了确保多边形是一个封闭的区域,而不是开放的线条。
    • 如果不重复第一个点,多边形将是一个开放的四边形,而不是闭合的矩形。

矩形的五个顶点

  1. 左下角 (min_lon, min_lat)
  2. 右下角 (max_lon, min_lat)
  3. 右上角 (max_lon, max_lat)
  4. 左上角 (min_lon, max_lat)
  5. 左下角 (min_lon, min_lat) - 重复第一个点

因为电子围栏数据仅包含岛内(思明区和湖里区),我们把生成的shp图层导入arcgis/arcgispro里面看一下,可以看出来电子围栏基本上在路网周边分布;

街道周边电子围栏局部放大展示(一);

地铁站出入口周边电子围栏局部放大展示(二);

这些是我们直观看到的结果,我们再来看看一下数据背后的东西,比如共享单车在岛内的投放策略,我们使用ArcGIS/ArcGIS Pro中的【要素转点】工具,将每个电子围栏区域(面层)计算出其中心点。这些中心点代表了每个电子围栏区,同样的检索并使用【核密度分析】工具。通过核密度分析,我们可以生成一个连续的密度表面,显示共享单车在岛内不同区域的集中程度,这里用自然间断点分级法,并将其分为10个等级进行展示;

厦门市人口栅格数据分布;

厦门市2020年12月21日 上午06:00-10:00的出发地订单累计数核密度;

对于人口栅格分析和共享单车订单分析详见 :共享单车轨迹数据分析:以厦门市共享单车数据为例(二)_共享单车轨迹数据处理-CSDN博客

将共享单车电子围栏中心点的核密度图、栅格人口数据分布图和共享单车订单分布图进行横向分析,通过对比三者的分布情况,可以发现它们在空间上存在高度的一致性,表现为高密度区域重合:共享单车电子围栏中心点、人口密集区和高订单量区域在空间上高度重合,表明共享单车的投放策略与人口分布和使用需求紧密相关;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540594.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

博导团队指导、解读实验结果、SCI论文润色

表观组: DAP-seq:转录因子-DNA互作研究工具 ATAC-seq :染色质开放程度研究工具 H3K4me3 ChIP-seq:组蛋白甲基化修饰工具 BS-seq :DNA甲基化研究工具 H3K27ac ChIP-seq:组蛋白乙酰化修饰研究工具 Cut&Tag:转录因子研究工具 ChIP-seq:转录因子-DNA互作工具 互作组…

HarmonyOS学习(十三)——数据管理(二) 关系型数据库

文章目录 1、基本概念2、运行机制3、默认配置与限制4、接口说明5、实战:开发“账本”5.1、创建RdbStore5.2、创建数据库5.3、增加数据5.4、删除数据5.5、修改数据5.6、查询数据5.7、备份数据库5.8、恢复数据库5.9、删除数据库 官方文档地址: 通过关系型…

IDEA配置全局的maven环境

1、关闭掉所有打开的项目,然后点击All settings 2、配置maven home path、user setting file、local repository。 3、配置JRE的版本 4、配置字节码版本

【RabbitMQ】死信队列、延迟队列

死信队列 死信,简单理解就是因为种种原因,无法被消费的消息。 有死信,自然就有死信队列。当一个消息在一个队列中变成死信消息之后,就会被重新发送到另一个交换器中,这个交换器就是DLX(Dead Letter Excha…

对于C++继承中子类与父类对象同时定义其析构顺序的探究

思考这样一串代码的运行结果&#xff1a; #include <iostream> using namespace std; class Person { public:~Person() { cout << "~Person()" << endl; } }; class Student:public Person { public:~Student() { cout << "~Student(…

谷歌做外链的文章一定要原创吗?

在谷歌上做外链发布时&#xff0c;原创文章是必须的。虽然你可能会想到用一篇文章群发到很多网站&#xff0c;但这种做法并不会带来太大的SEO效果。谷歌非常重视内容的独特性和相关性。如果同样的文章重复发布到多个网站&#xff0c;搜索引擎很快就会识别出这种策略&#xff0c…

开发谷歌插件之GA埋点

目录 一、背景 二、踩坑 三、谷歌插件开发的GA埋点的实现方式 一、背景 开发了一个谷歌插件&#xff0c;领导需要对用户的一些行为进行分析&#xff0c;于是让我在代码里面加上GA埋点。由于我们的PC端的项目一直都有进行GA埋点&#xff0c;当时就想着&#xff0c;这不就是把…

页面关键路径渲染详解

关键路径渲染 浏览器不会等待全部资源都下载完后才进行渲染&#xff0c;而是采用渐进式的渲染方式&#xff0c;本文就介绍一下这种渐进式的渲染方式。 当浏览器获取到用于呈现网页的资源后&#xff0c;通常就会开始渲染网页。那么究竟是在什么时候就会开始渲染&#xff1f; …

LeetCode讲解篇之220. 存在重复元素 III

文章目录 题目描述题解思路题解代码 题目描述 题解思路 我们可以考虑存储数组中连续indexDiff个数字&#xff0c;这样我们只需要在这连续的indexDiff个数字中查找相差小于等于valueDiff的两个数字的问题 对于该查找问题&#xff0c;我们可以考虑使用以valueDiff大小为一个桶&a…

大厂程序员的健身之路

大厂程序员的健身之路 基本信息饮食正餐营养补剂 睡眠训练计划 基本信息 健身时间&#xff1a;2023.03 -> 2024.09体重变化&#xff1a;52kg -> 67kg 饮食 正餐 早餐&#xff1a;不吃午餐&#xff1a;两碗米饭 鱼/鸡肉 蔬菜 酸奶晚餐&#xff1a;两碗米饭 鱼/鸡肉…

简单题35-搜索插入位置(Java and Python)20240919

问题描述&#xff1a; Java&#xff1a; class Solution {public int searchInsert(int[] nums, int target) {int k 0;int i 0;while(i<nums.length){if(nums[i]target){return i;}if(nums[i]<target){k i1;}i;}return k;}}class Solution(object):def searchInsert(…

6.C_数据结构_查询_哈希表

概述 哈希表的查询是通过计算的方式获取数据的地址&#xff0c;而不是依次比较。在哈希表中&#xff0c;有一个键值key&#xff0c;通过一些函数转换为哈希表的索引值。 其中&#xff1a;这个函数被称为哈希函数、散列函数、杂凑函数&#xff0c;记为&#xff1a;H(key) 哈希…

NFT Insider #148:The Sandbox 推出 SHIBUYA Y3K 时尚系列,Azuki 进军动漫 NFT 领域

市场数据 加密艺术及收藏品新闻 Infinex 新推 NFT 系列首四日销售额破4000万美元 尽管顶级 NFT 系列表现不佳&#xff0c;Infinex 的最新 NFT 系列在首四日内销售额已超过 4000 万美元。Infinex 是一个非托管平台&#xff0c;提供轻松访问链上协议和 dApp。 Infinex Core 的…

189 轮转数组

解题思路&#xff1a; \qquad 首先要理解轮转的含义&#xff0c;轮转 将数组末尾元素移动至首位。轮转k不为负数&#xff0c;那如果k大于数组长度时会发生什么&#xff1f;定义n为数组长度&#xff0c;当k n时&#xff0c;数组元素的顺序又恢复成初始状态&#xff0c;下一次…

翻唱技巧:AU和Cubase翻唱录制对轨技巧

分享和记录一下个人翻唱的经验和技巧&#xff01;防止后续自己忘了&#xff01;同时如果有大佬看到&#xff0c;希望可以帮我指出其中的错误&#xff01;个人推荐用Cubase12录制翻唱&#xff0c;因为Cubase12可以做乐段的标记&#xff0c;翻唱时有助于学习一些歌曲的层次设计。…

opengl-redbook环境搭建(静态库)

所需库下载 gl3w(github地址)https://github.com/skaslev/gl3w 使用python3执行根目录下的gen脚本&#xff0c;会生成头文件include文件夹和src下gl3w.c文件。 glfw(github地址)https://github.com/glfw/glfw 本文项目结构 本文如红宝书一致&#xff0c;将glfw和gl3w引入…

【C高级】有关shell脚本的一些练习

目录 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 2、写一个脚本&#xff0c;包含以下内容&#xff1a; 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 1、在家目录下创建目录文件&#xff0c;dir 2、dir下创建dir1和dir2 …

【JAVA入门】Day48 - 线程池

【JAVA入门】Day48 - 线程池 文章目录 【JAVA入门】Day48 - 线程池一、线程池的主要核心原理二、自定义线程池三、线程池的大小 我们之前写的代码都是&#xff0c;用到线程的时候再创建&#xff0c;用完之后线程也就消失了&#xff0c;实际上这是不对的&#xff0c;它会浪费计算…

网络流之最大流(EK 模板)

EK的时间复杂度是O( )。 EK 算法 和 dinic 算法的区别是 &#xff1a;EK是通过 bfs 找到一条增广流&#xff0c;然后累加&#xff0c;循环此步骤直到 bfs 找不到增广流&#xff1b;而 dinic 算法 是通过 bfs 分层找到一条增广流&#xff0c;然后通过 dfs 跑完 当前分层图中所…

基于SpringBoot的中小医院管理系统

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…