0.1.4 • Published 10 months ago
my-openlayer v0.1.4
my-openlayer
基于 OpenLayers 的地图组件库,提供了一系列便捷的地图操作功能,支持天地图底图加载、要素绘制、图层管理等功能。
功能特点
底图管理
- 支持天地图矢量图、影像图、地形图
- 支持底图动态切换
- 支持注记图层控制
- 支持地图裁剪
要素操作
- 点位标注(支持图标、文字)
- 线要素绘制(支持样式自定义)
- 面要素绘制
- DOM点位(支持Vue组件)
- 点位聚合展示
- 闪烁点位效果
地图工具
- 图层管理
- 事件监听
- 坐标转换
- 视图控制
安装
npm install my-openlayer使用方法
基础初始化
import MyOl from 'my-openlayer';
const map = new MyOl('map-container', {
// 中心点坐标
center: [119.81, 29.969],
// 缩放级别
zoom: 10,
// 最小缩放级别
minZoom: 8,
// 最大缩放级别
maxZoom: 20,
// 天地图token
token: 'your-tianditu-token',
// 是否显示注记
annotation: true,
// 地图裁剪
mapClip: false,
mapClipData: undefined,
// 图层配置
layers: {
vec_c: [], // 矢量图层
img_c: [], // 影像图层
ter_c: [] // 地形图层
}
});底图操作
// 获取底图管理实例
const baseLayers = map.getMapBaseLayers();
// 切换底图
baseLayers.switchBaseLayer('vec_c'); // 切换到矢量图
baseLayers.switchBaseLayer('img_c'); // 切换到影像图
baseLayers.switchBaseLayer('ter_c'); // 切换到地形图
// 添加注记图层
baseLayers.addAnnotationLayer({
type: 'cva_c', // 注记类型
zIndex: 11, // 图层层级
visible: true // 是否可见
});点位操作
// 获取点位操作实例
const point = map.getPoint();
// 添加普通点位
point.addPoint([
{
lgtd: 119.81,
lttd: 29.969,
name: '测试点位'
}
], 'test-point', {
nameKey: 'name', // 名称字段
img: 'marker.png', // 图标路径
hasImg: true, // 是否显示图标
textFont: '12px sans-serif', // 文字样式
textFillColor: '#FFF', // 文字颜色
textStrokeColor: '#000', // 文字描边颜色
textStrokeWidth: 3, // 文字描边宽度
textOffsetY: 20, // 文字Y轴偏移
zIndex: 4, // 图层层级
visible: true // 是否可见
});
// 添加聚合点位
point.addClusterPoint(pointData, 'cluster-point', {
nameKey: 'name',
img: 'cluster.png',
zIndex: 4
});
// 添加Vue组件点位
const domPoints = point.setDomPointVue(
[{ lgtd: 119.81, lttd: 29.969 }],
YourVueComponent,
Vue
);
// 控制组件点位显隐
domPoints.setVisible(true);
// 移除组件点位
domPoints.remove();
// 地图定位
point.locationAction(119.81, 29.969, 15, 1000);线要素操作
// 获取线要素操作实例
const line = map.getLine();
// 添加普通线要素
line.addLineCommon(lineGeoJSON, {
type: 'test-line', // 线要素类型
strokeColor: '#037AFF', // 线条颜色
strokeWidth: 3, // 线条宽度
zIndex: 3 // 图层层级
});
// 添加河流要素(支持分级显示)
line.addRiverLayersByZoom(riverGeoJSON, {
type: 'river',
strokeColor: '#0071FF',
strokeWidth: 3,
zIndex: 6,
visible: true
});地图工具
// 获取工具实例
const tools = map.getTools();
// 获取图层
const layer = tools.getLayerByLayerName('layerName');
// 移除图层
tools.removeLayer('layerName');
// 事件监听
MapTools.mapOnEvent(map, 'click', (feature, event) => {
console.log('点击要素:', feature);
});
// 支持的事件类型
// - click: 点击事件
// - moveend: 地图移动结束事件
// - hover: 鼠标悬停事件API文档
MyOl
主类,用于创建和管理地图实例。
构造函数
constructor(id: string, options: MapInitType)参数:
id: 地图容器IDoptions: 地图初始化配置center: 中心点坐标 经度, 纬度zoom: 缩放级别minZoom: 最小缩放级别maxZoom: 最大缩放级别token: 天地图tokenannotation: 是否显示注记mapClip: 是否启用地图裁剪mapClipData: 裁剪数据layers: 图层配置
方法
getPoint(): 获取点位操作实例getLine(): 获取线要素操作实例getPolygon(): 获取面要素操作实例getTools(): 获取地图工具实例getMapBaseLayers(): 获取底图图层管理实例restPosition(duration?: number): 重置地图位置locationAction(lgtd: number, lttd: number, zoom?: number, duration?: number): 地图定位mapOnEvent(eventType: string, callback: Function, clickType?: string): 地图事件监听showMapLayer(layerName: string, show: boolean): 控制图层显隐
MapBaseLayers
底图图层管理类。
方法
switchBaseLayer(type: TiandituType): 切换底图addAnnotationLayer(options: AnnotationLayerOptions): 添加注记图层initLayer(): 初始化图层
Point
点位操作类。
方法
addPoint(pointData: PointData[], type: string, options: OptionsType): 添加点位addClusterPoint(pointData: any[], type: string, options: OptionsType): 添加聚合点位setDomPointVue(pointInfoList: any[], template: any, Vue: any): 添加Vue组件点位locationAction(lgtd: number, lttd: number, zoom?: number, duration?: number): 地图定位
Line
线要素操作类。
方法
addLineCommon(data: MapJSONData, options: OptionsType): 添加普通线要素addRiverLayersByZoom(data: MapJSONData, options: OptionsType): 添加河流要素showRiverLayer(show: boolean): 控制河流图层显隐
MapTools
地图工具类。
方法
getLayerByLayerName(layerName: string): 获取图层removeLayer(layerName: string): 移除图层static mapOnEvent(map: Map, eventType: string, callback: Function, clickType?: string): 事件监听static setMapClip(baseLayer: any, data: MapJSONData): 设置地图裁剪
类型定义
interface MapInitType {
layers?: undefined;
zoom?: number;
center?: number[];
minZoom?: number;
maxZoom?: number;
extent?: undefined;
token?: string;
annotation?: boolean;
mapClip?: boolean;
mapClipData?: any;
}
type TiandituType = 'vec_c' | 'img_c' | 'ter_c';
interface AnnotationLayerOptions {
type: string;
token: string;
zIndex?: number;
visible?: boolean;
}
interface OptionsType {
type?: string;
nameKey?: string;
img?: string;
hasImg?: boolean;
textFont?: string;
textFillColor?: string;
textStrokeColor?: string;
textStrokeWidth?: number;
textOffsetY?: number;
zIndex?: number;
visible?: boolean;
strokeColor?: string;
strokeWidth?: number;
}依赖
- ol ^6.15.1
- proj4 ^2.7.5
- turf ^3.0.14
许可证
更新日志
0.1.1
- 初始版本发布
- 支持基础地图功能
- 支持点线面要素操作
- 支持天地图底图
常见问题
如何获取天地图token?
- 访问天地图开发者平台注册账号
- 申请密钥(token)
为什么地图无法加载?
- 检查token是否正确
- 检查网络连接
- 确认坐标系是否正确
如何自定义点位样式?
- 通过options参数配置样式
- 支持自定义图标和文字样式
联系方式
如有问题或建议,请提交 Issue
0.1.4
10 months ago
0.1.3
10 months ago
0.1.2
10 months ago
0.1.1
10 months ago
0.1.0
10 months ago
0.0.18
10 months ago
0.0.17
10 months ago
0.0.16
10 months ago
0.0.15
10 months ago
0.0.14
10 months ago
0.0.13
10 months ago
0.0.12
10 months ago
0.0.11
10 months ago
0.0.10
10 months ago
0.0.9
10 months ago
0.0.8
10 months ago
0.0.7
10 months ago
0.0.6
10 months ago
0.0.5
11 months ago
0.0.4
11 months ago
0.0.3
11 months ago
0.0.2
11 months ago
0.0.1
11 months ago