geotile_sdk
v0.2.4
Published
A tile sdk for Cloud Optimised Geotiff and shapefile
Downloads
39
Readme
一、瓦片服务
支持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 "
瓦片请求事件循环(繁忙时)
即时相应瓦片请求并返回结果
后台预加载任务循环(空闲时): 通过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) => {});
}