解决使用leaflet里L.supermap为underfind 的报错信息

报错信息为:Cannot read properties of undefined (reading 'TiledMapLayer'

由于我要加载WMTS瓦片服务 加载的api为 new L.supermap.WMTSLayer(url,options)但是加载时一直报错 Cannot read properties of undefined (reading 'TiledMapLayer'。

通过打印,发现承载于leaflet的L  里面根本就没有supermap这个属性 找了好久的文档 都找不到方法 最后终于找到原因 写下来造福人民!

由于引用了 @supermap/iclient-leaflet 和  leaflet 正常直接install都会直接下载最新版本 最新版本由于改版 L更轻量了 里面没有supermap属性 不可以直接加载wmts格式

想要加载wmts 需要把下载的最新版卸载

npm uninstall @supermap/iclient-leaflet

npm uninstall leaflet

下载后下载@supermap/iclient-leaflet v10以下版本 建议v10我用的10.1.2

leaflet 降版本为^1.7.1

npm install @supermap/iclient-leaflet@10.1.2 --save

npm install leaflet@1.7.1 --save

 然后npm run dev 重新加载 到页面里打印L就会出现啦

 

下面是我加载wmts的代码啦

<template>
  <div id="app">
    <div id="map" />
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  mounted() {
    this.leafletMap();
  },
  methods: {
    leafletMap() {
       console.log(L)
      //设置地图相关初始配置
      var map = L.map("map", {
        center: [0,0], // 设置地图中心点
        zoom: 1, //设置当前地图显示的缩放等级
        crs: L.CRS.EPSG4326, //设置坐标系4326
      });

      // //设置地图可以进行0-22的等级缩放
      var matrixIds = [];
      for (var i = 0; i < 22; ++i) {
      	matrixIds[i] = {
      		identifier: "" + i,
      		topLeftCorner: new L.LatLng(90, -180)
      	};
      }

      // //设置地图wmts瓦片地图加载配置
      var urlMap =
        "http://localhost:8090/iserver/services/map-china400/wmts100"; //瓦片地图地址

      var wmtsOptionsMap = {
        layer: "China",
        style: "default",
        tilematrixSet: "Custom_China",
        format: "image/png",
        requestEncoding: "REST",
		matrixIds:matrixIds,
      };
      L.supermap.wmtsLayer(urlMap, wmtsOptionsMap).addTo(map);
    },
  },
};
</script>
<style>
#map {
  width: 100%;
  height: 100vh;
}
</style>

加油加油加油!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 Vue 3 中使用 Leaflet 绘制圆形,你可以按照以下步骤进行操作: 1. 确保你已经安装并引入了 Vue 3 和 Leaflet 库。你可以使用 npm 或 yarn 安装这些库。 2. 在 Vue 组件中,创建一个 Leaflet 地图,并在地图上绘制圆形。 ```javascript <template> <div id="map"></div> </template> <script> import { ref, onMounted } from 'vue'; import L from 'leaflet'; import 'leaflet/dist/leaflet.css'; export default { name: 'MapComponent', setup() { const mapRef = ref(null); const circleRef = ref(null); onMounted(() => { const map = L.map('map').setView([51.505, -0.09], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); const circleOptions = { radius: 100, color: 'red' }; // 设置圆形的半径和颜色 circleRef.value = L.circle([51.5, -0.09], circleOptions).addTo(map); // 创建圆形并添加到地图 mapRef.value = map; }); return { mapRef, circleRef }; } }; </script> <style> #map { height: 400px; } </style> ``` 在上述代码中,我们创建了一个 Vue 组件,其中包含一个 `<div>` 元素作为地图容器。在 `setup` 函数中,我们使用 `onMounted` 钩子函数,在组件挂载后创建 Leaflet 地图。然后,我们使用 `L.tileLayer` 方法添加一个 OpenStreetMap 地图图层。接下来,我们使用 `L.circle` 方法创建一个圆形,并指定圆形的半径和颜色。最后,我们将圆形添加到地图中,并将地图和圆形的引用保存在响应式变量中。 请注意,上述代码中设置的示例半径和位置仅供参考,请根据你自己的需求调整。 通过以上步骤,你就可以在 Vue 3 中使用 Leaflet 绘制圆形了。你可以根据 Leaflet 的文档进一步了解并使用更多的选项和方法来定制你的圆形。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值