这是一款在Leaflet基础上重构后完成的超轻量级GIS API。它的主要特点在于类与接口的重组织,以更符合GIS数据组织的方式来设计类与接口。此外,也可认为其是精简并抛弃SVG渲染方式,且换用TypeScript后的Leaflet。
https://shengzheng1981.github.io/green-leaf-demo/index.html
- npm install green-leaf
<link rel="stylesheet" type="text/css" href="leaflet.css">
与Leaflet的相同与不同点如下:
- 底层逻辑就是Leaflet的TypeScript版,包括地图的漫游缩放以及Canvas渲染等;
- 删除Leaflet原有的SVG渲染方式;
- 精简原有grid以及tile相关代码实现;
- 改变原有Layer的图层概念,原为接近与PhotoShop下图层概念,现为对应多数GIS软件中的图层概念;
- 按GIS分矢量与栅格两种数据形式,分别设计FeatureLayer及RasterLayer与其对应;
- 借鉴ArcGIS中Graphic与Feature两者概念的区别来组织图形与矢量要素,Graphic对应图形,Feature对应矢量要素,Graphic = Geometry + Symbol,Feature = Geometry + Properties;
- 增加FeatureClass以及Adapter来对接矢量数据的读取及数据组织,当前暂实现GeoJSON格式的读取,后期可继承Adapter来扩展多种数据格式的读取;
- 增加Symbol/PointSymbol/LineSymbol/FillSymbol等一系列类,来实现要素用不同符号来完成渲染,当前暂实现SimplePointSymbol/SimpleLineSymbol/SimpleFillSymbol,后期可继承扩展点线面符号;
- 增加SimpleMarkerSymbol,使得Marker也能在Canvas下进行渲染,并将SimpleMarkerSymbol设计为点符号的一种,而非新的渲染要素或图层;
- 增加Label用于FeatureLayer矢量图层标记,通过继承Collision类来完成标记碰撞冲突检测,当前SimpleCollision暂实现简单碰撞冲突;
- 增加Renderer用于FeatureLayer矢量图层渲染方式设置,通过继承Renderer类来自定义渲染方式,当前实现SimpleRenderer单一渲染,CategoryRenderer分类渲染,ClassRenderer分级渲染;
- 增加Raster用于RasterLayer设置像素数据源,当前已完成IDW插值、热力图,克里金插值有待完善;
- 拆分原Point类,区分三类不同坐标,LatLng经纬度坐标,PlaneXY平面坐标,ScreenXY像素坐标(屏幕像素坐标和世界像素坐标)。
- Adapter 数据适配基类
- GeoJSONAdapter GeoJSON数据适配类
- Raster 栅格数据基类
- Heat 热力图
- IDW IDW插值图
- Kriging 克里金插值图
- BaseObject 基类
- DraggableObject 可拖拽对象基类
- EventedObject 可监听事件对象基类
- HandlerObject 可处理Map事件对象基类
- LatLng 经纬度坐标
- XY XY坐标基类
- PlaneXY 平面坐标基类
- ScreenXY 像素坐标基类
- Bounds 坐标范围基类
- LatLngBounds 经纬度坐标范围
- PlaneBounds 平面坐标范围
- ScreenBounds 像素坐标范围
- Projection 投影基类
- LonLat 无投影
- Mercator 墨卡托投影
- SphericalMercator 球体墨卡托投影
- Transformation 变换
- CRS 坐标系基类
- Earth 地球坐标系
- EPSG4326 4326坐标系
- EPSG3857 3857坐标系
- Feature 矢量要素
- FeatureClass 矢量数据类
- Field 矢量数据字段
- Geometry 图形基类
- Point 点
- Polyline 线
- Polygon 面
- MultiplePoint 多点
- MultiplePolyline 多线
- MultiplePolygon 多面
- Graphic 图形
- Grid 网格数据基类
- Tile 切片数据类
- Label 图层标注配置
- Collision 标注冲突检测
- NullCollision 标注无冲突检测
- SimpleCollision 标注简单冲突检测
- Layer 图层基类
- FeatureLayer 矢量图层
- RasterLayer 栅格图层
- GraphicLayer 图形图层
- Map 地图
- Canvas 画布
- Renderer 渲染方式基类
- SimpleRenderer 单一渲染方式
- CategoryRenderer 分类渲染方式
- ClassRenderer 分级渲染方式
- Symbol 符号基类
- PointSymbol 点符号基类
- LineSymbol 线符号基类
- FillSymbol 面符号基类
- SimplePointSymbol 简单点符号类
- SimpleLineSymbol 简单线符号类
- SimpleFillSymbol 简单面符号类
- SimpleMarkerSymbol标记点符号类
- cd demo
- 修改webpack.config.js入口文件entry
- webpack
- run index.html