https://github.com/pana/node-pal
PAL Node.js binding
https://github.com/pana/node-pal
Last synced: 7 months ago
JSON representation
PAL Node.js binding
- Host: GitHub
- URL: https://github.com/pana/node-pal
- Owner: Pana
- License: mit
- Created: 2013-11-29T07:44:06.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2013-12-02T14:24:40.000Z (almost 12 years ago)
- Last Synced: 2025-01-28T21:47:19.354Z (8 months ago)
- Language: C++
- Size: 211 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
node-pal
========
[PAL](http://pal.heig-vd.ch/) Node.js binding## PAL -- Automated Label Placement
PAL是一个成熟C++的标注库. 提供高效的meta-heuristic算法用于寻找点,线,多边形的标注摆放位置.
通过JPAL JNI wrapper同样可以在Java平台使用, 基于LGPL, GNU许可证协议 
### PAL特点
* 点, 线, 多边形标注计算
* 高效, 避免重叠
* 支持多种地图单位
* 支持多种摆放规则### Polygon
![]()
![]()
![]()
![]()
### Line
![]()
### Point
关于PAL的更多内容(下载, 文档, 效果, 使用实例)参看官方网站
## Example
```
var opts = {
dpi: 72,
pointP: 1, // 点候选位置数量
lineP: 1, // 线候选位置数量
polyP: 1, // 多边形候选位置数量
bbox: [0, 0, 100, 100] // label范围
}
var data = [
{
name: 'layer1',
features: [
{
wkt: 'POLYGON((1 1,50 1,50 50,1 50,1 1))', // feature wkt表示
label: 'first label', // label内容
width: 30, // 宽度
height: 10 // 高度
}
]
}
]var pal = require('node-pal')
var labels = pal.labeller(data, opts) // 进行label计算// 结果
[
{
origX: 25.5, //原始点x坐标
origY: 25.5, //原始点y坐标
x1: 25.5, //左上角x
y1: 25.5, //左上角y
x2: 55.5, //右上角x
y2: 25.5, //右上角y
x3: 55.5, //右下角x
y3: 35.5, //右下角y
x4: 25.5, //左下角x
y4: 35.5, //左下角y
rotation: 0, //旋转角度
featureId: 'f0' //
}
]
```## Document
label position 计算接口pa.labeller(data, opt)
data为layer(name, features数组必选)数组, layer地理数据为features数组(feature包含: wkt, width, height, name) :
```
[
{
name: 'layer_name',
obstacle: false, // 是否为障碍物
unit: 'PIXEL', // 计算单位
priority: 0.5, // 优先级
arrange: 'P_LINE', // 摆放模式
features: [{wkt: "LINESTRING(x1 y1, x2 y2, x3 y3)", width: 40, height: 10, name: '东直门内大街 '}]
}
]
```配置选项opt(可选):
* `DPI` 默认72
* `pointP` 点label候选位置数量, 默认为1
* `lineP` 线候选位置数量, 默认为1
* `polyP` 多边形候选位置数量, 默认为1
* `mapUnit` 地图单位, 默认为`PIXEL`, 可选值: `'PIXEL', 'METER', 'FOOT', 'DEGREE'`
* `searchMethod` 搜索方法, 默认`POPMUSIC_TABU`, 可选值: `'CHAIN', 'POPMUSIC_TABU_CHAIN', 'POPMUSIC_TABU', 'POPMUSIC_CHAIN'`
* `bbox` 计算区域, 格式为[minx, miny, maxx, maxy], 默认[0,0,1000,1000]## PAL缺点
* label宽高需要实现提供
* 计算区域为矩形,不能随线段曲折, 无法计算单文字角度# TODO
* src代码文件组织结构优化, 将pal外部头文件和源代码分开
* 代码编译warning: Feat 重定义
* 支持更多pal配置项: add_layer, labeller方法
* addon 代码写的不够优雅, 数据类型转换方法太原始
* getUnit等方法采用更好方式实现: switch, 数组索引等等
* 开发js辅助代码, 简化使用步骤, 支持geojson, wkt等多种格式数据
* 计算结果关联label