Leaflet 基础语法:Spring Boot 支持下的省级旅游口号地图标注入门

Leaflet 基础语法:Spring Boot 支持下的省级旅游口号地图标注入门

1. Leaflet 基础地图初始化

在 HTML 页面中创建地图容器并初始化:

<div id="chinaMap" style="height: 600px;"></div>

<script>
// 初始化地图
const map = L.map('chinaMap').setView([35.8617, 104.1954], 5); // 中国中心坐标

// 添加底图图层
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '© OpenStreetMap contributors'
}).addTo(map);

2. 省级数据准备(Spring Boot 后端)

Spring Boot 实体类示例:

// Province.java
@Data
@Entity
public class Province {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;       // 省份名称
    private Double latitude;   // 纬度
    private Double longitude;  // 经度
    private String slogan;     // 旅游口号
}

API 控制器示例:

// MapController.java
@RestController
@RequestMapping("/api/provinces")
public class MapController {
    @Autowired
    private ProvinceRepository provinceRepository;

    @GetMapping
    public List<Province> getAllProvinces() {
        return provinceRepository.findAll();
    }
}

3. 前端标注实现

从 Spring Boot API 获取数据并标注:

// 获取省级数据
fetch('/api/provinces')
    .then(response => response.json())
    .then(provinces => {
        provinces.forEach(province => {
            // 创建自定义图标
            const customIcon = L.divIcon({
                className: 'slogan-icon',
                html: `<div class="slogan-label">${province.name}</div>`,
                iconSize: [100, 30]
            });

            // 添加标记
            L.marker([province.latitude, province.longitude], {icon: customIcon})
                .addTo(map)
                .bindPopup(`
                    <b>${province.name}</b><br>
                    ${province.slogan}
                `);
        });
    });

4. CSS 样式优化
.slogan-icon {
    background: rgba(255, 215, 0, 0.7);
    border-radius: 4px;
    padding: 3px 8px;
    border: 1px solid #d4af37;
    text-align: center;
    font-weight: bold;
}

.slogan-label {
    color: #8b0000;
    font-size: 14px;
    text-shadow: 1px 1px 2px white;
}

5. 效果示例
省份坐标旅游口号
云南[25.0433, 102.7066]七彩云南,旅游天堂
四川[30.5728, 104.0668]天府之国,安逸四川
浙江[30.2741, 120.1551]诗画江南,山水浙江
6. 高级功能扩展
// 添加省级边界图层
fetch('geojson/china-provinces.json')
    .then(res => res.json())
    .then(data => {
        L.geoJSON(data, {
            style: { color: '#3388ff', weight: 1 },
            onEachFeature: (feature, layer) => {
                layer.bindPopup(feature.properties.name);
            }
        }).addTo(map);
    });

// 添加热力图
const heatPoints = provinces.map(p => [p.latitude, p.longitude, 0.8]);
L.heatLayer(heatPoints, { radius: 25 }).addTo(map);

关键知识点
  1. 坐标系统:使用 WGS84 坐标系(EPSG:4326)
  2. 图层叠加:基础图层 + 标记层 + 边界层
  3. 响应式设计:添加地图重绘监听
    window.addEventListener('resize', () => map.invalidateSize());
    

  4. 性能优化:使用 MarkerCluster 处理大量标注点
    const markerCluster = L.markerClusterGroup();
    provinces.forEach(p => markerCluster.addLayer(createMarker(p)));
    map.addLayer(markerCluster);
    

最佳实践:省级坐标建议使用省会城市坐标,可通过国家地理信息公共服务平台获取精准经纬度数据。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值