vislite
Version:
灵活、快速、简单的数据可视化交互式跨端前端库
159 lines (109 loc) • 3.25 kB
Markdown
# 坐标投影 API
VISLite 提供多种地图坐标投影算法,用于地图可视化开发。
## Mercator 墨卡托投影
墨卡托投影是航海和航空中常用的投影方式。
### 引入
```js
import { Mercator } from 'vislite';
```
### 初始化
```js
var mercator = new Mercator(scale, center);
```
### 参数说明
- **scale**: 缩放比例,默认7
- **center**: 投影中心经纬度 `[经度, 纬度]`,默认 `[107, 36]`(中国中心附近)
### 使用方法
```js
var mercator = new Mercator(7, [107, 36]);
// 将经纬度转换为平面坐标
var [x, y, z] = mercator.use(经度, 纬度);
```
### 使用示例
```js
var mercator = new Mercator(7, [116.4, 39.2]); // 北京
// 北京的经纬度
var [x, y] = mercator.use(116.4, 39.2);
console.log(x, y); // 输出平面坐标
```
---
## Eoap 等角斜方位投影
等角斜方位投影是一种适合显示以某点为中心区域的投影方式。
### 引入
```js
import { Eoap } from 'vislite';
```
### 初始化
```js
var eoap = new Eoap(scale, center);
```
### 参数说明
- **scale**: 缩放比例,默认7
- **center**: 投影中心经纬度 `[经度, 纬度]`,默认 `[107, 36]`
### 使用方法
```js
var eoap = new Eoap(7, [116.4, 39.2]);
// 将经纬度转换为平面坐标
var [x, y, z] = eoap.use(经度, 纬度);
```
### 特点
- 以投影中心为原点,周围的区域变形较小
- 适合绘制局部地图(如某个国家或城市)
- 保持了角度的正确性
---
## MapCoordinate 地图坐标系
MapCoordinate 用于处理地图坐标转换和边界计算。
### 引入
```js
import { MapCoordinate } from 'vislite';
```
### 初始化
```js
var mapCoord = new MapCoordinate(projection, option);
```
### 参数说明
- **projection**: 投影对象(Mercator 或 Eoap)
- **option**: 配置项
- `width`, `height`: 画布尺寸
- `x`, `y`: 偏移量
### 主要功能
```js
// 经纬度转屏幕坐标
mapCoord.lonlatToScreen(lon, lat);
// 屏幕坐标转经纬度
mapCoord.screenToLonlat(x, y);
// 获取地图边界
mapCoord.getBoundary();
```
### 使用示例
```js
var mercator = new Mercator(7, [107, 36]);
var mapCoord = new MapCoordinate(mercator, {
width: 800,
height: 600
});
// 绘制地图
geoJson.features.forEach(feature => {
feature.geometry.coordinates.forEach(polygon => {
painter.beginPath();
polygon[0].forEach((point, i) => {
var [x, y] = mapCoord.lonlatToScreen(point[0], point[1]);
if (i === 0) painter.moveTo(x, y);
else painter.lineTo(x, y);
});
painter.closePath().fill();
});
});
```
---
## 投影对比
| 特性 | Mercator | Eoap |
|------|----------|------|
| 适用场景 | 全球航海图 | 局部区域图 |
| 中心点 | 固定赤道 | 可自定义 |
| 变形 | 高纬度变形大 | 中心区域变形小 |
| 角度 | 保持方向 | 保持角度 |
## 选择建议
- **全球地图或航海图**: 使用 Mercator
- **某个国家/城市的局部图**: 使用 Eoap
- **复杂地图交互**: 使用 MapCoordinate 配合投影