You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue Leaflet自定义地图CRS.Simple下将坐标原点0,0设为左下角的方法咨询

解决方案

Leaflet默认CRS.Simple的坐标转换逻辑会将y轴取反映射到屏幕坐标系,因此原生规则下坐标(0,0)固定落在地图容器左上角。你可以通过自定义CRS修改转换规则实现原点在左下角的需求,修改方案如下:

修改步骤

  1. 基于CRS.Simple扩展自定义坐标系,调整坐标转换参数,将y轴映射规则翻转,使CRS坐标y=0对应屏幕底部位置
  2. 若你的自定义瓦片的y轴编号从左下角开始计数,给瓦片层添加tms: true属性避免瓦片上下颠倒

完整可运行代码

<template>
  <l-map
    ref="map"
    v-model="zoom"
    v-model:zoom="zoom"
    v-model:maxZoom="maxZoom"
    v-model:minZoom="minZoom"
    :center="[500, 250]"
    :crs="crs"
  >
    <!-- 若你的瓦片y轴是从上到下编号,可删除:tms="true"属性 -->
    <l-tile-layer url="https://localhost:3000/{z}/{x}/{y}.png" :tms="true" />
    <l-marker :lat-lng="[1000, 500]" />
    <l-marker :lat-lng="[0, 0]" />
  </l-map>
</template>
<script>
import {
  LMap,
  LTileLayer,
  LMarker,
} from '@vue-leaflet/vue-leaflet';
import 'leaflet/dist/leaflet.css';
import L from 'leaflet';

export default {
  components: {
    LMap,
    LTileLayer,
    LMarker,
  },
  data() {
    return {
      zoom: 2,
      minZoom: 2,
      maxZoom: 8,
      // 中心坐标调整为地图中点,你也可以根据自己的需求修改
      center: [500, 250],
      crs: L.Util.extend({}, L.CRS.Simple, {
        // 第四个参数为你自定义地图的最大Y轴坐标值,当前示例按你代码里的最大y=1000配置
        transformation: new L.Transformation(1, 0, -1, 1000)
      }),
    };
  },
}

注意事项

  • 转换规则的第四个参数需要和你自定义地图的实际最大Y坐标匹配,比如你的地图Y轴范围是0~2048,就把该值改为2048即可
  • 调整后坐标逻辑为:Y值越大,点位在地图上的位置越靠上,(0,0)固定落在地图左下角,符合常规平面坐标系的使用习惯

内容的提问来源于stack exchange,提问作者Revenant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:02