0.2.4 • Published 2 years ago

geotile_sdk v0.2.4

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

一、瓦片服务

支持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.jsSRS空间参考系的转换
|-- 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) => {});

}
0.2.1

2 years ago

0.2.3

2 years ago

0.2.2

2 years ago

0.2.4

2 years ago

0.2.0

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago