在微信小程序中使用leafletwx加载自制手绘地图

leafletwx是一个基于leaflet的微信小程序地图组件,用于替代原生map组件。它支持加载自制手绘地图并转换为瓦片地图,借助gdal工具进行切片。文章提供了图片坐标与地理坐标的转换方法,帮助用户实现更灵活的地图定制。
摘要由CSDN通过智能技术生成

leafletwx是基于leaflet,使用微信原生组件开发的一套开源地图组件,目的是替换小程序内的原生map组件,项目开源地址:leatletwx

加载自制手绘地图效果:

2e5c5f7ab8cc41c6b5655010d17dd56f.png

 本示例开源地址在leafletwx的mymap页面。


如何将手绘地图转换为瓦片

可以使用gdal,安装成功后,使用命令

切分瓦片(使用gdal): gdal2tiles-l.py -l -p raster -z 1-3 -w none [source_image] [target_dir]

例如:gdal2tiles-l.py -l -p raster -z 1-3 -w none 1.jpg out

即可生成瓦片地图数据

图片坐标与地理坐标如何转换

图片坐标点与地理坐标点互转方法如下(引入的库在组件内可以找到,须知道原始图片大小和图片左上角及右下角分别对应的地理坐标):

import {LagLngPoint} from './LagLng.Utils'
import {latLng2xy, xy2latLng} from './utils/util'

// 图片坐标点转地理坐标点
function rasterImage2latLng(imgPosition, imgSize, leftUpLatLng, rightDownLatLng) {
  let latLng = new LagLngPoint(0, 0);
  let _imgPos = [
    Math.max(0, Math.max(imgSize[0], imgPosition[0])),
    imgSize[1] - Math.max(0, Math.max(imgSize[1], imgPosition[1])),
  ];
  const ag = xy2latLng(_imgPos[0], _imgPos[1], 0, 0, imgSize[0], imgSize[1], leftUpLatLng.longitude, leftUpLatLng.latitude, rightDownLatLng.longitude, rightDownLatLng.latitude);
  latLng.longitude = ag.lon;
  latLng.latitude = ag.lat;
  return latLng;
}

// 地理坐标点转图片坐标点
function latLng2rasterImage(latLng, imgSize, leftUpLatLng, rightDownLatLng) {
  let imgPosition = [0, 0];
  const minLng = Math.min(leftUpLatLng.longitude, rightDownLatLng.longitude);
  const maxLng = Math.max(leftUpLatLng.longitude, rightDownLatLng.longitude);
  const minLat = Math.min(leftUpLatLng.latitude, rightDownLatLng.latitude);
  const maxLat = Math.max(leftUpLatLng.latitude, rightDownLatLng.latitude);
  let lng = Math.min(maxLng, Math.max(latLng.longitude, minLng));
  let lat = Math.min(maxLat, Math.max(latLng.latitude, minLat));
 
  let xy = latLng2xy(lng, lat, 0, 0, imgSize[0], imgSize[1], leftUpLatLng.longitude, leftUpLatLng.latitude, rightDownLatLng.longitude, rightDownLatLng.latitude)
  return [Math.round(xy.x), Math.round(xy.y)];
}

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值