可视化通过在地图上绘制矩形获取当前区域osmbuildings数据

951 阅读1分钟

在做可视化项目的时候, 有一个需求就是让用户选择一个范围, 自动根据选中的范围生成3d地图, 3dtiles数据是一个老大难的问题, 于是我通过node实现了一个小工具, 从OSMBuildings获取3d楼层数据......

先看效果图: 

实现逻辑大概分为七步:

  1. 通过地图绘制边框, 获取当前边框左上角和右下角的经纬度和缩放等级;

  2. 借助tile-lnglat-transform工具将经纬度转换为xyz坐标

  3. 根据左上角和右下角获取当前区域内的xy坐标

  4. 通过Axios爬取3d buildings数据

  5. 将获得的geojson数据叠加在一起 最后拼接为一个大的geojson

  6. 通过geojson2shp工具将geojson转换为shp格式数据

  7. 通过3ditiles工具将shp格式数据转换为3dtiles瓦片数据 

Node爬取数据代码 GitHub地址: github.com/CahierX/geo…

使用说明:

1. clone 代码到本地,根目录使用 yarn 命令安装项目

2. 项目根目录下执行 新建 dist 文件夹和 dist/3dtilesFiles 文件夹 (若目录已存在则不需要)

3. 传入地图数据 get 请求:

lnglatRange: 传入在地图上绘制矩形边框的矩形左上角和右下角经纬度
zoom: 地图缩放级别
http://127.0.0.1:3000/getData?lnglatRange=lng,lat,lng1,lat1&zoom=15

4. 项目根目录下执行 node index.js,爬取的 .geojson shp 3dtiles 数据将存储到 dist 目录下