Leaflet根据坐标画圆形区域

在做地图应用时,有时需要根据指定的坐标来画一个圆形区域,比如签到打卡类的应用,此时我们可以使用 leaflet.Circle 来在在指定坐标上创建一个圆并添加到的地图上,其中可以通过 radius 属性可以指定区域半径,比如:

const circle = leaflet.circle([lat, lng], {
    color: 'red',
    fillColor: 'red',
    fillOpacity: 0.5,
    radius: 100,
}).addTo(this.map);

完整例子如下

import { Component, OnInit, AfterViewInit } from "@angular/core";
import * as leaflet from "leaflet";

@Component({
    selector: "app-map-circle",
    templateUrl: "./map-circle.component.html",
    styleUrls: ["./map-circle.component.css"],
})
export class MapCircleComponent implements OnInit, AfterViewInit {
    map!: leaflet.Map;

    constructor() {}

    ngOnInit(): void {}

    ngAfterViewInit(): void {
        this.initMap();
    }

    private initMap(): void {
        this.map = leaflet.map("map").setView([51.5, -0.09], 16);

        const tiles = leaflet.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
            maxZoom: 19,
            attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
        });
        tiles.addTo(this.map);

        let marker: leaflet.Marker | null = null;
        let circle: leaflet.Circle | null = null;

        this.map.on("click", (e) => {
            console.log(e.latlng);

            if (marker) {
                this.map.removeLayer(marker);
            }
            const icon = leaflet.icon({
                iconUrl: "media/marker-icon.png",
                iconSize: [25, 41],
                iconAnchor: [12, 41]});
            marker = leaflet.marker([e.latlng.lat, e.latlng.lng], {icon: icon}).addTo(this.map);

            if (circle) {
                this.map.removeLayer(circle);
            }
            circle = this.createCircle(e.latlng.lat, e.latlng.lng, "red").addTo(this.map);
        });
    }

    private createCircle(lat: number, lng: number, color: string): leaflet.Circle {
        return leaflet.circle([lat, lng], {
            color: color,
            fillColor: color,
            fillOpacity: 0.5,
            radius: 100,
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值