基于python和c++混合开发,业务逻辑层采用python语言,google earth数据解析和下载模块采用c++语言。客户端通过websocket请求调用启动下载 python部分开发环境vscode,c++部分 visual c++ 2013
1.1安装 python 3.8.x 版本, 并配置python环境变量 https://www.runoob.com/python/python-install.html
1.2 运行库安装
先安装gdal和rasterio开发库,离线安装whl文件在install目录也可以从这里下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#rasterio 碰到缺什么,直接pip install 就可以了(国内网络建议使用清华或豆瓣pypi地址)
pip install ****
服务端启动
python .\src\server.py
,默认监听6789端口
客户端使用websocket client 打开地址 ws://localhost:6789/user
连接成功后可以send请求到服务端
action说明如下
查询某一层级google earth可供下载的历史影像列表
参数:
-
geometry : geojson格式多边形,代表下载区域范围
-
zoom : 0~22 数值,代表不同比例尺等级
example:
{"action":"get_google_history","params":{"geometry":{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
106.4753723144531250,
29.5243835449218750
],
[
106.4753723144531250,
29.5243835449218750
],
[
106.5769958496093750,
29.6150207519531250
],
[
106.5769958496093750,
29.5243835449218750
],
[
106.4753723144531250,
29.5243835449218750
]
]
]
}
},"zoom":9}}
给定下载范围和下载层级获取每个层级包含的瓦片数量,目前百度地图只支持矩形查询;根据瓦片数量可以大致估算出需要下载的字节大小,每个缩放等级对应的比例尺信息请参考水经注软件
-
type : 类型:“imagery”,"vector"
-
min_zoom : 最小缩放层级 0~22
-
max_zoom : 最大缩放层级 0~22
-
geometry :geojson格式范围
-
map_type :"google_map_sat","amap_sat","tianditu_sat","bing_sat","tencent_sat"","baidu_sat","google_earth_sat","google_earth_dem"
example:
{
"action":"get_data_count",
"params":{"geometry":{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
106.4753723144531250,
29.5243835449218750
],
[
106.4753723144531250,
29.5243835449218750
],
[
106.5769958496093750,
29.6150207519531250
],
[
106.5769958496093750,
29.5243835449218750
],
[
106.4753723144531250,
29.5243835449218750
]
]
]
}
},"min_zoom":3,"max_zoom":16,"type":"imagery","map_type":"google_map_sat"}}
获取矢量数据大小example:
{
"action":"get_data_count",
"params":
{
"type":"vector",
"name":"Angola",
"format":"pbf"
}
}
矢量数据大小按照字节数返回:
{"vector_size": 54197391}
下载完成后记得调用cancle_task杀掉下载进程
- type: "imagery"
- min_zoom: 最小缩放层级 0~22
- max_zoom: 最大缩放层级 0~22
- geometry: geojson格式下载范围
- map_type: 地图类型 google_map_vector google_map_sat amap_sat tianditu_sat bing_sat tencent_sat baidu_sat google_earth_sat google_earth_dem
- output_dir: 输出文件夹目录
- process_count: 并发数
瓦片下载example
{
"action":"start_task",
"params":{
"type":"imagery",
"geometry":{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
106.4753723144531250,
29.5243835449218750
],
[
106.4753723144531250,
29.5243835449218750
],
[
106.5769958496093750,
29.6150207519531250
],
[
106.5769958496093750,
29.5243835449218750
],
[
106.4753723144531250,
29.5243835449218750
]
]
]
}
},"min_zoom":3,"max_zoom":16,"map_type":"google_map_sat",
"process_count":3,
"output_dir":"/Users/zuojingwei/Dev/tile_thief/tiles/"
}
}
- type "vector"
- name: 下载区域,例如"Angola","Japan"等
- format: 下载格式,pbf 、shp、osm
- output_dir: 输出路径
example:
{
"action":"start_task",
"params":
{
"type":"vector",
"name":"Angola",
"format":"pbf",
"output_dir":"/Users/zuojingwei/Dev/tile_thief/tiles/"
}
}
中止下载,下次再启动时下载程序会检查文件是否完整,已经下载过的区域不会重复下载
example
{
"action":"cancle_task","pid":12744
}
客户端定期调用接口,根据pid获取任务进度。
瓦片下载任务返回瓦片下载个数,google earth下载任务返回已完成区块个数,矢量数据返回已完成字节数。 请求示例: action: 字符串 "get_progress"
{
"action":"get_progress",
"pid": [123,456]
}
返回 example: 如果"progress_value"为负值代表异常
{
123:90,456:100
}
客户端定期调用接口,根据pid获取错误日志。
可选择传入数量字段,用于倒序获取错误日志列表。 请求示例: action: 字符串 "get_error_logs"
{
"action":"get_error_logs",
"pid": [123,456]
}
返回 example:
{
123:[],456:[]
}
src 代码目录
---data
-------vector_list.json OSM下载源地址列表
-------vector_map.json OSM下载源映射表
---template websocket测试js客户端. **debprecated**
---utils 下载库文件
--------dem google earth数据下载库,gehelper_py.pyd为python接口
-----------libge vs2013工程版本google earth 单线程下载源码,c++实现
--------bounds2tiles.py 根据矩形范围,计算包含的墨卡托投影瓦片
--------custom_request.py request封装函数,方便捕获异常
--------download_tiles.py 瓦片下载函数
--------downloader.py 分块下载逻辑对象
--------geojson2tiles.py 根据多边形范围返回包含的墨卡托瓦片
--------map_baidu.py 百度地图下载逻辑
--------map_bing.py 必应地图下载逻辑
--------map_tencent.py 腾讯地图下载逻辑
--------metadata.json mbtiles属性信息模板
--------tile_util.py 瓦片行列号计算函数
--------tiles2mbtiles.py xyz格式瓦片文件夹转换为sqlite格式mbtiles
--------translate.py gdal转换样例代码
--------util.py mbtiles操作函数库
---command.py **deprecated**
---download.py 下载函数API入口
---server.py websocket服务入口
命令行进入到tile_thief目录
python .\src\server.py
打开chrome webstore 搜索websockets,如下图 安装 webSocketTestClient
打开 ws://localhost:6789/user 输入 Request命令即可执行测试任务
进度记录表:字段id progress progress字段取值说明:1_0_0_0_0 总数_成功个数_获取Qtree失败个数_查询版本不存在个数_下载图像失败_已处理个数
瓦片详细信息表: 字段id、zxy、bbox、download_status zxy : 瓦片编号 bbox: 瓦片坐标范围 download_status : 瓦片下载状态,取值包括 ok、get_qtree_failed、get_version_failed、already_downloaded