Skip to content

地图容器

GMap

继承 ol/Mapol/Map 的全部方法(addLayer / removeLayer / getView / getLayers / addOverlay / addInteraction / getControls / on / once / un / forEachFeatureAtPixel / getFeaturesAtPixel / hasFeatureAtPixel / getCoordinateFromPixel / getPixelFromCoordinate / render / updateSize / dispose …)均原样可用。

GeoVerse 的地图容器,相对 ol/Map 增强四点:

  • 构造时自动注册国内坐标系(GCJ-02 / BD-09 / EPSG:3395,幂等)
  • 内置高德/百度/天地图/海图底图与底图切换(含图层重投影)
  • 地图级 pointer 事件统一派发为要素级 click / mouseover / mouseout
  • 一组以经纬度为参数的便捷视图方法
ts
import { GMap } from 'geoverse';

const map = new GMap({
  target: 'map',
  base: 'gd-vec',
  center: [118.18, 24.49],
  zoom: 12,
});

构造选项 GMapOptions

继承 ol/MapMapOptionstarget / layers / controls / view / interactions / overlays 等仍可用),新增下列字段:

字段类型默认说明
baseBaseLayerReference | false'gd-vec'内置底图代号;false 不加底图。用 tiandi-* 需配 baseConfig.tiandituToken
baseConfigBaseLayerConfig底图配置:离线地址 urls、天地图 tiandituToken
centerCoordinate[118.15, 24.56]初始中心(WGS-84 经纬度)
zoomnumber12初始层级
minZoom / maxZoomnumber按投影GCJ 默认 min 3、BD 默认 max 19,其余 0/18
scaleLinebooleanfalse是否显示比例尺控件
fullScreenbooleanfalse是否显示全屏控件

视图投影由 base 推断:gd-*GCJ:02bd-*BD:09oceanEPSG:3395,其余 → EPSG:3857

视图方法(经纬度语义)

方法签名说明
panTo(options: PanToOptions) => void平滑移动到位置(视图投影坐标)
getZoom / setZoom() => number|undefined / (zoom: number) => void当前层级
getMinZoom / getMaxZoom() => number层级范围
getCenter / setCenter() => Coordinate / (lonLat: Coordinate) => void中心点(WGS-84 经纬度)
setZoomAndCenter(zoom: number, lonLat: Coordinate) => void同时设置层级与中心
getDistance(c1: Coordinate, c2: Coordinate) => number两经纬度点球面距离(米)
getBounds() => number[]当前视野范围(视图投影坐标)
isInBounds(lonLat: Coordinate) => boolean经纬度点是否在视野内
getContainer() => HTMLElement|undefined地图容器元素
setCursor(cursor: string) => void设置鼠标样式,'default' 视为恢复
setUserProjection(proj: string) => void透传 ol/proj.setUserProjection
setFullScreen(fullscreen: boolean) => void全屏切换(需开 fullScreen 控件)

PanToOptionsposition?: Coordinate(视图投影坐标)、zoom?: numberoffset?: [number, number](像素偏移)、rotateAngle?: number(度)、duration?: number(默认 1000ms)。

底图管理

方法签名说明
switchBase(reference: BaseLayerReference, config?: BaseLayerConfig) => void切换底图,必要时切视图投影并重投影既有图层/弹窗,同步鹰眼
getBaseLayers() => BaseLayer[]全部底图图层
removeBaseLayers() => void移除全部底图
getContentLayers() => BaseLayer[]全部内容图层(不含底图)
removeContentLayers() => void移除全部内容图层(保留底图)
resetOverview() => void同步鹰眼的视图投影与底图(switchBase 内部已调用)
showTraffic(visible: boolean, opts?: { origin?: 'GD'|'BD'; isDynamic?: boolean }) => void显隐实时路况,首次调用自动创建

图层 / 要素 / 弹窗检索

方法签名说明
getLayerById(id: string|number) => BaseLayer|undefinedid 属性获取内容图层
removeLayerById(id: string|number) => void按 id 移除图层
getFeatureById(id: string|number) => Feature|undefined全矢量图层中按 id 检索要素
getAllFeatures() => Feature[]全部矢量要素
removeFeature(feature: Feature) => void从所有矢量图层移除要素
removeFeatureById(id: string|number) => void按属性 id 或 featureId 移除要素
getInfoWindowById(id: string|number) => Overlay|undefined按 id 获取弹窗
getAllInfoWindows() => Overlay[]全部弹窗
removeInfoWindow / removeInfoWindowById(overlay|id) => void移除弹窗
unEventByKey(key: EventsKey | EventsKey[]) => void解绑 on/once 注册的监听
clearDrawSource() => void清空绘制与测量痕迹

海量点命中检测

方法签名说明
forEachSmFeatureAtPixel(pixel, callback, options?, event?) => unknown同时检测普通要素与海量点 graphic
hasGraphicAtPixel(pixel, options?, event?) => boolean像素是否命中海量点 graphic

导出与销毁

方法签名说明
exportPng(options?: ExportPngOptions) => void导出当前画面为 PNG 并触发下载
destroy() => void解绑容器并释放资源(替代有递归 bug 的 dispose

ExportPngOptionsfilename?: string(默认 map.png)、callback?: (dataUrl: string) => void

要素级事件

GMap 在地图层面监听 pointer 事件,向命中的要素派发 FeaturePointerEvent,业务侧通过要素订阅(见 GFeature.onPointer)。聚合点点击自动放大、双击散开。


InfoWindow

继承 ol/OverlaysetElement / getElement / setPosition / getPosition / setOffset / getId / setPositioning 等基类方法可用。

信息弹窗,位置统一使用 WGS-84 经纬度。

ts
import { InfoWindow } from 'geoverse';

const win = new InfoWindow({
  content: '<div class="popup">你好</div>',
  map,
  position: [118.18, 24.49],
});
win.open(map, [118.18, 24.49]);

构造选项 InfoWindowOptions

继承 ol/OverlayOptionsoffset / positioning / stopEvent / insertFirst / autoPan / className 等),新增:

字段类型说明
contentstring | HTMLElement内容:HTML 字符串、元素 id 或 DOM 元素
mapMap创建后立即挂载到该地图

方法

方法签名说明
open(map: Map, lonLat?: Coordinate) => void打开弹窗(可选传入新经纬度),派发 open 事件
close() => void关闭并从地图移除,派发 close 事件
getContent() => string获取内容 HTML 字符串
setContent(content: string | HTMLElement) => void设置内容
setLonLatPosition(lonLat: Coordinate) => void以经纬度设置位置(按当前视图投影换算)
getZIndex / setZIndex() => string|undefined / (z: string|number) => void弹窗容器 zIndex

常量 INFO_WINDOW_HIDDEN_CLASS'geoverse-overlay-hidden')—— 隐藏态 class,样式见包内 style.css


FeaturePointerEvent

继承 ol/events/Event

要素级交互事件对象,由 GMap 派发给命中要素。

成员类型说明
type'click' | 'mouseover' | 'mouseout'事件类型
mapEventMapBrowserEvent | undefined触发它的原始地图事件(含 coordinate / pixel