在现代商业智能和数据分析领域,地理位置信息已成为不可或缺的维度。通过分析用户的地理位置数据,企业能够获得深度的市场洞察,优化业务决策。本文将探讨大数据地理位置分析的技术实现和应用场景。
一、技术篇
1.1 空间数据表示
介绍了空间数据如何表示、如何索引、常见的运算。数仓开发中实用的概念、技术。
1.1.1 大地测量系统
- 坐标表示
使用经纬度表示,比如天安门广场一点的经纬度:116.397303,39.909269 - WGS84
大地坐标系,世界大地测量系统(World Geodetic System, WGS)是一种用于地图学、大地测量学和导航(包括全球定位系统)的大地测量系统标准。
WGS包含一套地球的标准经纬坐标系、一个用于计算原始海拔数据的参考椭球体,和一套用以定义海平面高度的引力等势面数据。
GPS全球定位系统使用的就是WGS 84参考系。 - GCJ02
火星坐标系,地形图非线性保密处理算法,国测局坐标,是一种基于WGS-84制定的大地测量系统。
此坐标系所采用的混淆算法会在经纬度中加入看似随机的偏移。
GCJ02 座标串换成WGS-84的地图就可能造成100-700米不等的偏移。
GCJ-02大量使用正弦函数制造高频噪音,形成了一个超越方程,导致基本不可能获得解析解。
GCJ-02坐标系统本身保密,但是目前已有等多种语言的开源转换实现。
1.1.2 空间对象类型
空间对象,是指定义空间数据的几种基础数据对象,主要是由常见的点、线、面组成。
- 点(Point)
- 线(LineString)
- 面(Polygon)
其他: - 多点(MultiPoint)
- 多线(MultiLineString)
- 多面(MultiPolygon)
1.1.3 空间数据格式
- WKT/WKB
WKT(Well-Known Text),是一种兼容了可读性和存储性的数据格式。WKB,是它的二进制格式,更适合数据库存储。 - GeoJSON
Json,定义了geometry对象。在线检验GeoJSON的规范性: http://geojson.io/
示例:
空间对象类型 | 形状 | WKT格式 | GeoJSON格式 |
Point | ![]() |
POINT (30 10) | { "type": "Point", "coordinates": [30, 10] } |
LineString | ![]() |
LINESTRING (30 10, 10 30, 40 40) | { "type": "LineString", "coordinates": [ [30, 10], [10, 30], [40, 40] ] } |
Polygon | ![]() |
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)) | { "type": "Polygon", "coordinates": [ [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]] ] } |
Polygon | ![]() |
POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 35 35, 30 20, 20 30)) | { "type": "Polygon", "coordinates": [ [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]] ] } |
MultiPoint | ![]() | MULTIPOINT ((10 40), (40 30), (20 20), (30 10)) | { "type": "MultiPoint", "coordinates": [ [10, 40], [40, 30], [20, 20], [30, 10] ] } |
MultiPoint | MULTIPOINT (10 40, 40 30, 20 20, 30 10) | ||
MultiLineString | ![]() | MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10)) | { "type": "MultiLineString", "coordinates": [ [[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]] ] } |
MultiPolygon | ![]() |
MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5))) | { "type": "MultiPolygon", "coordinates": [ [ [[30, 20], [45, 40], [10, 40], [30, 20]] ], [ [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]] ] ] } |
MultiPolygon | ![]() |
MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20))) | { "type": "MultiPolygon", "coordinates": [ [ [[40, 40], [20, 45], [45, 30], [40, 40]] ], [ [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]] ] ] } |
1.2 空间索引
空间索引,是空间数据库用来优化空间查询的数据库索引,它是能够使得用户高效查询空间对象的一种数据结构。
传统的数据库索引(B树),并不适合处理空间查询,比如点是否落入多边形内、点之间距离等等。如果不建立索引,则任何搜索都将需要对空间数据库中的每个记录进行“顺序扫描”,从而导致处理时间更长。
1.2.1 需要索引的查询
- 窗口查询:给定一个查询窗口(通常是一个矩形),返回与查询窗口相重叠的物体。
- 点查询:给定一个点,返回包含这个点的所有几何图形
1.2.2 索引查询过程
通过索引操作对象的MBB来进行查询一共分为两步
- Filtering: 过滤掉MBB(minimum bounding box,最小限定箱)不相交的数据集,剩下的MBB被索引到的称为一个数据的超集。
- Refinement: 测试实际的几何形状会不会满足查询条件,精确化。
- 如何判断两个MBR是否相交? 只要任一矩形的最右端都大于另一矩形的最左端且任一矩形最高端大于另一矩形的最低端,则两矩形相交;反之,若其中任一条件不满足,两矩形不相交。
- 如何判断两个MBR是否相交? 只要任一矩形的最右端都大于另一矩形的最左端且任一矩形最高端大于另一矩形的最低端,则两矩形相交;反之,若其中任一条件不满足,两矩形不相交。
1.2.3 空间索引分类
- 空间驱动的结构
这些数据结构是基于将二维空间划分为单元(或网格),并根据空间关系(重叠或相交)把空间对象映射到单元。IBM DB2和Microsoft SQL Server等商业数据库使用这些方法。 - 数据驱动的结构
这些数据结构直接由空间对象集合的分区来组织。使用mbr对数据对象进行分组,以适应其在嵌入空间中的分布。商业数据库,如开源数据库 PostGIS和MySQL,都使用这些数据结构。
1.2.4 空间索引举例
空间驱动结构 GeoHash:
GeoHash 是一种将经纬度坐标( lat/lon )编码成字符串的方式。这么做的初衷只是为了让地理位置在 url 上呈现的形式更加友好,但现在 GeoHash 已经变成一种在数据库中有效索引地理坐标点和地理形状的方式。
GeoHash是一个二进制字符串,其中每个字符表示全局经纬度矩形的交替划分。从图8可以看出空间平面划分的过程。第一次划分将矩形分成两个GeoHash代码为“0”和“1”的正方形。位于垂直分区左侧的空间对象具有以“0”开头的 GeoHash,而位于右半部分的空间对象具有以“1”开头的GeoHash作为其第一个前缀。然后,每一边的数据进一步水平分割:在这一行以上的对象接收“0”,而在这一行以下的对象接收“1”作为它们的第二个前缀。模式继续分裂,直到达到所需的解决方案。每个Geohash矩形可以被分解成4个子哈希,划分5次,把整个世界分为 32 个单元的格子。单元又可以继续被分解成 32 个更小的单元,不断重复下去,以此类推。
GeoHash 使用 Base32 编码成字符串,比如下图展示了北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域。也就是说,这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串。
字符串越长,表示的范围越精确。
GeoHash 字符串长度 |
宽 | 高 |
---|---|---|
1 | 5,000km | 5,000km |
2 | 1,250km | 625km |
3 | 156km | 156km |
4 | 39.1km | 19.5km |
5 | 4.89km | 4.89km |
6 | 1.22km | 0.61km |
7 | 153m | 153m |
8 | 38.2m | 19.1m |
9 | 4.77m | 4.77m |
10 | 1.19m | 0.596m |
11 | 149mm | 149mm |
12 | 37.2mm | 18.6mm |
数据驱动的结构 R 树:
R树是B树在高维空间的扩展,是一棵平衡树。每个R树的叶子结点包含了多个指向不同数据的指针,这些数据可以是存放在硬盘中的,也可以是存在内存中。
根据R树的这种数据结构,当我们需要进行一个高维空间查询时,我们只需要遍历少数几个叶子结点所包含的指针**(即缩小到某个区域下去进行查询,还是采用缩小范围的思想)**,查看这些指针指向的数据是否满足要求即可。这种方式使我们不必遍历所有数据即可获得答案,效率显著提高。
1.3 空间数据计算
空间数据计算包含坐标转换、索引计算、关系计算。例如:
- 转换
- 坐标系转换:gps转换为火星坐标系,火星转换为gps坐标系
- WKT 格式与 GeoGSON 转换
- 度量
- 两点之间的球面距离
- 计算多边形面积
- 索引
- 点所在的 GeoHash
- 点到 GeoHash 中点的距离
- 面所在的 GeoHash
- GeoHash 合并
- 把传入的GeoHash列表(以字符串形式传入,逗号分隔)进位至指定targetLevel
- 关系
- 几何 A 经过几何 B。
- 几何 A 完全包含在(Within)几何 B 中。
- 几何 A 完全包含几何 B。
- 几何之间彼此没有相交或接触(不相交)。
- 几何完全重合。
- 几何相互叠加。
- 几何接触于一点。
关系的图形表示
- 包含(Contains)/ Within
- 不相交(Disjoint)
- 经过(Crosses)/部分重合(Overlaps)
- 接触(Touches)
1.4 空间数据处理在数仓计算中的应用举例
已有用户流量表(包含经纬度字段)和 POI 维度数据表(包含POI 经纬度字段),计算某天内以 POI 为圆心,半径 1 km 的客流。
解法:
方案 | 优点 | 缺点 | 采纳 |
---|---|---|---|
方案一:使用关系计算 | 实现简单,直观 | 性能差 | 否 |
方案二:使用索引计算 | 性能高 | 编码复杂 | 是 |
1.5 大数据地理信息系统(GIS)
1.5.1 什么是GIS
GIS(Geographic Information System),它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行输入、存储、查询、分析和显示的计算机系统。
GIS将数据连接到地图上,将位置数据(事物所在的位置)与所有类型的描述信息(事物所在的位置)整合在一起。
地理信息系统通过使用位置作为“关键指标变量”,提供了将以前不相关的信息关联起来的能力。
1.5.2 技术体系
GIS 技术发展
GIS基础软件五大技术体系,即:大数据GIS技术(Big Data GIS)、人工智能 GIS 技 术(AI- GIS)、新 一 代 三维 GIS 技 术 (New Three-D GIS)、分布式 GIS 技术(Distributed GIS)、跨平台 GIS 技术(Cross-platform GIS),合称 “BitDC”
1.5.3 技术应用
交通、国防、灾害预防、教育、能源、工程等
例如:
- 增强现实——商业用途的增强现实:如广告和餐馆评论
- 地理围栏——用地理围栏限制汽车停放,是汽车共享和租赁的基础
- 自动驾驶汽车——自动驾驶汽车配备激光雷达、GPS等
- 实时交通——共享实时交通信息和道路警报
二 、应用篇
2.1 业务场景分类
- 开城开站/选址: 业务在某个位置分析其线下客流(业务上限)、用户特征(通勤群体、白领群体等)、位置本身的特征(旅游城市、小区聚集地等),以及用户线上化渗透情况,再结合业务线自身采集的周边环境、业务供给等评估,来选定业务适合在哪些地方,什么范围开城/开站,或进行线下推广活动。
- 业务策略调整: 根据业务当前渗透情况、平台渗透情况、需求量情况等及时调整业务已有运营策略或对制定新策略,如平台流量倾斜、省内补贴资源调配、活动上线策略等
- 业务规模&潜客空间评估: 对于业务线的一些客观特性,评估在地域范围内需求上限、业务已达成情况等,从而制定业务目标、评估可增长空间、分析当前不同区域业务特征及对应策略等
2.2 技术分类
2.2.1 点、面汇总类分析
定义:分析区域内点(地图里的POI)、面(地图里的AOI) 的分布、数量、面积、种类、属性等信息,支持上卷下钻。
例如:计算xx城市餐饮外卖业务渗透率,即计算开通外卖的POI 的数量与全部餐饮POI的数量的比值。
2.2.2 多点、线性分析
OD 分析:
通过设置统计口径及空间粒度等相关参数,支持用户获取不同区域之间的居住和工作人口流动的数量、画像。辅助掌握不同区域之间联系紧密程度及诸如城镇化建设等相关政策的研究及制定。
可查询分析不同市、区之间的通勤信息和不同时间维度下的OD数量,以此判断职住平衡情况与城市间的出行、往来强度。
通过设置O点和D点范围、空间粒度等相关参数,支持用户获取不同区域之间的出发点-到达点数量、画像。辅助掌握城市出行强度及邻近城市之间的往来强度
职住分析:
通过设置统计口径、空间粒度等相关参数,支持用户获取不同市、区之间的通勤信息:通勤人口画像、通勤距离、通勤方式和通勤时间等
迁徙分析:
通过设置出发区域、到达区域、时间范围等相关参数,支持用户获取不同城市之间的迁徙数量和迁徙人群画像。方便掌握城市之间人群流动特征。百度迁徙: https://qianxi.baidu.com/
驻留分析:
随着定位技术的不断发展,嵌入在手机的GPS、北斗等位置传感器可以周期性地记录移动对象的位置,产生了海量的轨迹数据,如行人轨迹、出租车轨迹、共享单车轨迹等。来自于这些轨迹数据中的驻留点(即移动对象在一段时间内停留在某个区域范围内产生的轨迹点)蕴含了丰富的移动对象停留信息,如出租车候车、行人游玩、货车装卸货等,这些可以帮助我们获取某一地点的动态访问信息,继而挖掘地点的动态特征,全面理解地点的时空信息
三、解决方案案例:商业选址
3.1 解决哪些问题
- 已有门店布局是否合理?
- 哪些区域适合新开店?
- 某点位是否适合开店?
3.2 解决方案
(1)看概况,选片区——网点推荐
-
根据不同行业的需求和选址城市的基本属性提供科学的模型评分规则,从目标客户属性、共生及竞对商家、商业氛围、周边配套、客群净需求等多维度对全城进行大数据扫描。
-
用户在平台可选择意向选址城市,配置个性化模型参数及其权重,输出模型的综合量化结果和可视化评估结果,查看推荐网格和叠加现有网点的网格的情况,
-
导出网格的详细数据,一目了然地锁定最佳价值区位。
(2) 评点位——定点评估
打破时空信息不对称,全方位评估备选点位特征,高效推动选址决策
支持以多种方式快速锁定评估点位及其范围,包括关键词检索、上传点位坐标、自定义形状圈选、商圈选择,一键获取被评估区域的人口分析、职住分析、客流分析、品牌分析、设施分析、OD分析、交通分析和活力趋势分析的全维度可视化报告,支持保存和下载分析报告和相关数据。同时,平台打破时空信息的不对称性,支持多个点位的横向空间对比分析和单一点位的纵向时间对比分析,全方位评估备选点位情况,高效推动选址决策。