原生2d web地图引擎

原生2d web地图引擎

下面这段核心代码,不依赖任何2d地图引擎如leaflet,open layers,基于原生的JavaScript实现了地图瓦片的加载渲染,以及地图平移和缩放等功能

<template>
	<div id="mapWrapper">
		<div id="mapPanel">
			<canvas
				@mousedown="startDrag"
				@mousemove="dragging"
				@mouseup="endDrag"
				@wheel="zoomMap"
			></canvas>
		</div>
	</div>
</template>
<script setup>
import { onMounted } from "vue";
// 地球参考椭球半径
const EARTHRADIUS = 6378137;
// 瓦片大小
const TILESIZE = 256;
// 是否是第一次加载
let initFlag = false;
// 初始化层级
let zoom = 16;
// 初始化比例尺
let mapSize = 0;
let scale = 0;
// 计算比例尺
// 根据地图层级计算整个地图瓦片阵列的行列数以及地图比例尺
const getMapScale = () => {
	mapSize = TILESIZE * Math.pow(2, zoom);
	scale = (2 * Math.PI * EARTHRADIUS) / mapSize;
};
getMapScale();
// 地图中心点坐标
let mapCenter = {
	lon: 0,
	lat: 0,
};
let pixelBound = {
	minPixelX: 0,
	maxPixelX: 0,
	minPixelY: 0,
	maxPixelY: 0,
};
let canvas;
// 基于中心点坐标计算地图的四至像素范围
const getPixelBound = () => {
	const [x, y] = lonlatToxy(mapCenter.lon, mapCenter.lat);
	const [pixelX, pixelY] = xyTopixel(x, y);
	pixelBound.minPixelX = pixelX - canvas.width / 2;
	pixelBound.maxPixelX = pixelX + canvas.width / 2;
	pixelBound.minPixelY = pixelY - canvas.height / 2;
	pixelB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值