UNPKG

geotile_sdk

Version:

A tile sdk for Cloud Optimised Geotiff and shapefile

194 lines (147 loc) 6.05 kB
<!-- * @Description: * @Author: luojun1 * @Date: 2021-10-28 14:16:18 * @LastEditTime: 2021-12-15 16:18:30 --> # 一、瓦片服务 支持tif、geojson、shapefile、postgis数据源,支持生成png、mvt格式的瓦片 先创建地图样式配置文件xml,通过制定xml文件的id进行地图渲染,并返回指定瓦片 创建地图样式: 支持多图层、多样式配置文件的生成 获取瓦片: 支持多图层一起渲染,返回一个瓦片, 支持png、mvt两种瓦片格式, 支持本地磁盘瓦片缓存 ## API 创建地图样式POST接口: http://localhost:5000/style 获取瓦片GET: http://localhost:5000/tiles/{id}/{x}/{y}/{z}.{format} 示例: ``` http://localhost:5000/tiles/styletemplate_postgis/107879/51369/17.png http://localhost:5000/tiles/styletemplate_postgis/107879/51369/17.mvt http://localhost:5000/tiles/styletemplate_postgis/107879/51369/17.mvt?Cache=/luojun http://localhost:5000/tiles/styletemplate_postgis/107879/51369/17.png?Cache=/luojun ``` 详细接口说明: http://10.53.5.163:9000/project/124/interface/api/3258 ## 服务启动 node test/index.js # 二、geotile-sdk A tile sdk for Cloud Optimised Geotiff and shapefile " <center class = "half"> <img src = "./flow1.png" height = "700px" width = "350px" > "瓦片请求事件循环 与 后台预加载任务循环" <img src = "./flow2.png" height = "700px" width = "350px" > </center> - 瓦片请求事件循环(繁忙时) 即时相应瓦片请求并返回结果 - 后台预加载任务循环(空闲时): 通过setTimeout实现非阻塞循环,不会影响事件循环处理瓦片请求 繁忙时关闭(有瓦片请求时),空闲时唤醒。 唤醒方式:设置请求完成时的回调函数, 判断是否有正在处理的请求,若无,则唤醒闲时任务循环 a、检测是否是闲时,如是忙碌状态,则结束循环,如是空闲状态,执行b b、空闲状态下, 执行一次闲时任务 c、闲时任务执行结束,重新执行a ## 代码结构 | 代码文件 | 功能 | | ---- | ---- | |index.js | 外部接口:获取瓦片 | |orderList.js | 将当前瓦片请求以及横向相关区域加入orderList(快队列), 立即处理orderList中的瓦片请求, 调用map.js获取瓦片 | |regionCache.js | 将当前瓦片请求的纵向相关区域加入slowList(慢队列), 空闲时(无瓦片请求时)加入orderList, 获取瓦片 | |map.js | 地图渲染和瓦片提取, png编码 | |SRS.js | SRS空间参考系的转换 | ``` |-- src | |-- index.js | |-- orderList.js | |-- regionCache.js | |-- map.js | |-- SRS.js |-- test |-- index.js |-- utils.js |-- data | |-- clip2.rs | |-- clip2.tif |-- routes |-- index.js |-- style.js |-- tile.js |-- style | |-- styletemplate_json.xml | |-- styletemplate_shp.xml | |-- test.xml | |-- test2.xml | |-- test3.xml | |-- test4.xml | |-- test5.xml ``` ## 主要功能: * generateXML: 生成地图xml配置文件(包括地图样式和图层),返回xml文件的uuid * setMapnikDir: 设置路径,包括xml的存放路径和mapnikDir的路径 * fetchTile: 根据xml文件和xyz提取指定瓦片 * fetchTilefetchTileOptimized: 优化后的瓦片提取接口 ## Example ```` var geotile_sdk = require("geotile_sdk"); //设置样式文件路径和mapnik的input plugin var styleDir=".../style" var mapnikDir=".../node_modules/mapnik/lib/binding/" geotile_sdk.setMapnikDir(styleDir,mapnikDir) //根据json生成栅格的地图样式xml文件 var styleJson_raster = { "style":{ "Type": "Raster" }, "layer":{ "path":"/luojun/github/geotiff-server/test/data/clip2.rs", "SRS":"3857" } } const style_str_raster= JSON.stringify(styleJson_raster) geotile_sdk.generateXML(style_str, (err,uuid)=>{ if(!!err)var xmlUUID=uuid }) //根据json生成面要素的地图样式xml文件 var styleJson_polygon = { "style":{ "Type": "Polygon", "Color": "black", "LineWidth": 1, "FillColor": "#bee826" }, "layer":{ "path":"/luojun/github/geotiff-server/test/data/clip2.rs", "SRS":"3857" } } const style_str_polygon= JSON.stringify(styleJson_polygon) geotile_sdk.generateXML(style_str_polygon, (err,uuid)=>{ if(!!err)var xml_uuid_polygon=uuid }) //根据json生成线要素的地图样式xml文件 var styleJson_line={ "style":{ "Type":"Line", "Color":"#bee826", "LineWidth":1 }, "layer":{ "path":"/luojun/github/geotiff-server/test/data/clip2.rs", "SRS":"3857" } } const style_str_line= JSON.stringify(styleJson_line) geotile_sdk.generateXML(style_str_line, (err,uuid)=>{ if(!!err)var xml_uuid_line=uuid }) //根据json生成点要素的地图样式xml文件 var styleJson_point={ "style":{ "Type":"Point", }, "layer":{ "path":"/luojun/github/geotiff-server/test/data/clip2.rs", "SRS":"3857" } } const style_str_point= JSON.stringify(styleJson_point) geotile_sdk.generateXML(style_str_point, (err,uuid)=>{ if(!!err)var xml_uuid_point=uuid }) //获取瓦片: 传入参数(瓦片的xyz,数据源路径,数据的空间参考系,结果处理回调函数,地图样式文件的uuid) geotile_sdk.fetchTile(109195, 51561, 17, xml_uuid_raster, (err,tile_png) => {}); geotile_sdk.fetchTile(109195, 51561, 17, xml_uuid_polygon, (err,tile_png) => {}); geotile_sdk.fetchTile(109195, 51561, 17, xml_uuid_line, (err,tile_png) => {}); //优化后的获取瓦片接口 (基于事件驱动的瓦片缓存) //获取瓦片: 传入参数(瓦片的xyz,数据源路径,数据的空间参考系,结果处理回调函数,地图样式文件的uuid) geotile_sdk.fetchTilefetchTileOptimized(109195, 51561, 17, xml_uuid_raster, (err,tile_png) => {}); geotile_sdk.fetchTilefetchTileOptimized(109195, 51561, 17, xml_uuid_polygon, (err,tile_png) => {}); geotile_sdk.fetchTilefetchTileOptimized(109195, 51561, 17, xml_uuid_line, (err,tile_png) => {}); } ````