Uniapp map地图组件使用 polygons 画出省市轮廓

polygons 画出轮廓

使用 polygons 导入广东省经纬度点位数据, 描出广东地图轮廓

DataV.GeoAtlas 坐标信息

注意: 广东省地图为 陆地 + 岛屿

也就是绘制多边形时 需要绘制一个陆地多边形 和 许多个独立的多边形(岛屿)

若只当做一个多边形绘制会出现如下图错乱

  1. 将下载好的GeoJSON数据存放在 static 目录中, 并导入risk.vue

     import guangdongData from "../../static/json/guangdong.json";

  2. 将GeoJSON数据转换为坐标数组

     // 将GeoJSON坐标转换为小程序地图坐标点数组
     // 数据地址: https://datav.aliyun.com/portal/school/atlas/area_selector
     const convertGeoJsonToMapPoints = (geoJson : any) => {
       const polygons = [];
     ​
       geoJson.features.forEach(feature => {
         const geometry = feature.geometry;
         const type = geometry.type;
         const coordinates = geometry.coordinates;
     ​
         if (type === 'Polygon') {
           /*
             陆地+岛屿 每个岛屿都是一个独立的多边形
             每个Polygon单独添加为一个多边形
            */
           const points = coordinates[0].map(coord => ({
             latitude: coord[1],
             longitude: coord[0],
           }));
           polygons.push({ points });
         } else if (type === 'MultiPolygon') {
           // 每个MultiPolygon中的Polygon也单独添加为一个多边形
           coordinates.forEach(polygon => {
             const points = polygon[0].map(coord => ({
               latitude: coord[1],
               longitude: coord[0],
             }));
             polygons.push({ points });
           });
         }
       });
     ​
       return polygons;
     };

  3. 编写绘制多边形函数 并在onMounted页面加载时绘制

     // 处理绘制多边形轮廓
     const drawPolygons = () => {
       const mapPolygons = convertGeoJsonToMapPoints(guangdongData);
     ​
       polygons.value = mapPolygons.map((polygon) => ({
         points: polygon.points,
         strokeColor: '#066efa',  // 原型: #478fef
         fillColor: '#257afb19', // 透明度15 rgba(37,122,251,0.1) 转十六进制,否则调试时默认黑色
         lineWidth: 2,
       }));
     };
     ​
     onMounted(() => {
       drawPolygons(); // 绘制轮廓
     });

  4. 在map地图设置polygons属性

       <map
         id="map"
         :longitude="mapCenter.longitude"
         :latitude="mapCenter.latitude"
         :scale="mapCenter.scale"
         :markers="markers"
         :polygons="polygons"
         class="map-style"
       >

以下是uniappmap组件的所有属性: | 属性名 | 类型 | 默认值 | 必填 | 描述 | | :----: | :--: | :----: | :--: | :--: | | id | String | | 否 | map组件的唯一标识符,用于在事件处理函数中识别组件 | | style | String/Object | | 否 | map组件的样式,可以是一个字符串或对象 | | class | String | | 否 | map组件的class属性,用于设置组件的样式 | | latitude | Number | | 是 | 中心点的纬度 | | longitude | Number | | 是 | 中心点的经度 | | scale | Number | 16 | 否 | 缩放级别,取值范围为5-18 | | markers | Array | | 否 | 标记点,格式为[{id: 0, latitude: 0, longitude: 0, title: '', iconPath: '', width: '', height: '', callout: {}}],其中callout为自定义标记点上方的气泡 | | polyline | Object | | 否 | 路线,格式为{points: [], color: '', width: '', dottedLine: false},其中points为坐标数组,color为线的颜色,width为线的宽度,dottedLine为是否为虚线 | | circles | Array | | 否 | 圆形,格式为[{latitude: 0, longitude: 0, color: '', fillColor: '', radius: '', strokeWidth: 1}] | | controls | Array | | 否 | 控件,格式为[{id: 0, position: {}, iconPath: '', clickable: true}],其中position为控件的位置,可选值为'leftTop'、'rightTop'、'rightBottom'、'leftBottom' | | include-points | Array | | 否 | 缩放视野以包含所有给定的坐标点,格式为[{latitude: 0, longitude: 0}] | | show-location | Boolean | false | 否 | 是否显示当前位置 | | polygons | Array | | 否 | 多边形,格式为[{points: [], strokeWidth: 1, strokeColor: '', fillColor: ''}] | | subkey | String | | 否 | 用于在腾讯地图开发平台申请的key | | layer-style | Number | 1 | 否 | 地图样式,可选值为0、1、2、3 | | rotate | Number | 0 | 否 | 旋转角度,范围为0-360,逆时针旋转 | | skew | Number | 0 | 否 | 倾斜角度,范围为0-40 | | enable-overlooking | Boolean | false | 否 | 是否开启俯视 | | enable-3D | Boolean | false | 否 | 是否开启3D模式 | | enable-compass | Boolean | false | 否 | 是否显示指南针 | | enable-zoom | Boolean | true | 否 | 是否支持缩放 | | enable-scroll | Boolean | true | 否 | 是否支持拖动 | | enable-rotate | Boolean | false | 否 | 是否支持旋转 | | enable-tilt | Boolean | false | 否 | 是否支持倾斜 | | setting | Object | {} | 否 | 地图设置,可设置以下属性:<br>showLocation: 是否显示当前位置<br>showScale: 是否显示比例尺<br>subKey: 用于在腾讯地图开发平台申请的key<br>style: 地图样式,可选值为'normal'、'satellite'、'dark'、'light'、'fresh'、'bus' | | bindregionchange | EventHandle | | 否 | 拖动地图时触发 | | bindtap | EventHandle | | 否 | 点击地图时触发 | | bindmarkertap | EventHandle | | 否 | 点击标记点时触发 | | bindcallouttap | EventHandle | | 否 | 点击标记点上方的气泡时触发 | | bindcontroltap | EventHandle | | 否 | 点击控件时触发 | | bindupdated | EventHandle | | 否 | 地图更新时触发 | | bindpoitap | EventHandle | | 否 | 点击地图上的坐标点时触发 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值