使用esri的gis-tools-for-hadoop工具包,在hive中实现空间计算
作者:互联网
以基站工参表实现空间关系判断(点在多边形内)为例,使用ESRI的gis-tools-for-hadoop工具包,在hive中实现数据空间计算的几个主要步骤:
- 上传空间地理实体数据到hadoop集群;
- hive中创建地理实体表;
- 与基站工参表做空间判断(点在多边形内)。
一、Hive
Hive是基于Hadoop的数据仓库,采用MPP架构(大规模并行处理),存储结构化数据,提供sql查询功能,sql语句转换为MapReduce任务运行。非常适合数据仓库的统计分析。
二、gis-tools-for-hadoop
gis-tools-for-hadoop是ESRI推出的开源工具包,与hive结合,使用分布式运算实现海量空间数据的存取、计算、关系判断等功能。包括两个jar包:
- esri-geometry-api.jar
- spatial-sdk-hadoop.jar
三、实现空间关系判断和绑定到地理区块
0. 数据准备
将地理实体面数据导出geojson文件,放到同一个目录下(geojson8.31目录)
1. 将地理实体数据和esri的两个jar上传到hadoop集群
hadoop fs -copyFromLocal bch/user/meimei/geojson8.31/* /user/meihong/geojson
hadoop fs -copyFromLocal bch/user/meimei/esri-geometry-api.jar /user/meihong/esri-geometry-api.jar
hadoop fs -copyFromLocal tmp/meimei/spatial-sdk-hadoop.jar /user/meihong/spatial-sdk-hadoop.jar
2. hive中创建地理实体表
use syxzDB;
drop table if exists geo_block;
CREATE TABLE if not exists geo_block (id string, name string, boundaryshape binary, cid string) ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde' STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/user/meihong/geojson';
select id,cid from geo_block; --测试数据是否导入
3. sql语句实现点在多边形内的空间关系判断,并生成新表
add jar hdfs://bch/user/meimei/esri-geometry-api.jar;
add jar hdfs://bch/user/mei/spatial-sdk-hadoop.jar;
create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point';
create temporary function ST_Contains as 'com.esri.hadoop.hive.ST_Contains';
insert overwrite table t_cell_match
select cell.city,cell.county,cell.cell_name,cell.net_type,cell.lc,cell.lon,cell.lat,cell.coverage,
geo_block.id,geo_block.name,geo_block.cid from cell left outer join geo_block
where ST_Contains(geo_block.boundaryshape,ST_Point(cell.lon,cell.lat));
扫码加入我的知识星球:“时空大数据”,可获取更多更高品质的地图、地理信息、GIS、大数据、时空分析、实景三维、地图可视化等方面的知识和文件,前20名可享5折优惠券。
标签:gis,jar,hadoop,hive,cell,geo,esri 来源: https://blog.csdn.net/camelroyu/article/details/121238354