Leaflet 结合 SpringBoot 实现地图点位点击查看时间功能
一、需求解析
1. 地图展示
核心需求为加载一张可缩放、可拖拽的世界地图,支持用户在任意位置点击交互。地图需加载流畅、无地域偏移,适配 PC 端浏览器,这是整个功能的基础载体。
2. 时区和时间的关系
全球共划分 24 个时区,以本初子午线为基准,每个时区对应标准时间。后端基于标准时区规则计算目标点位的标准时间或夏令时时间,保证时间精准性。
3. 经纬度和时区的关系
时区由地理位置(经纬度)决定:经度决定时区的基准偏移,纬度辅助区分特殊时区。核心难点在于无法通过简单公式直接计算经纬度对应的精确时区,通常需依托算法或库实现转换。
二、应用实现
1. 经纬度和时区求解
后端使用 Java 实现经纬度转时区逻辑。核心工具类代码如下:
package com.yelang.common.utils.zone;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import com.yelang.common.utils.StringUtils;
/**
* - 时区时间计算工具类
*/
public class ZoneUtils {
// 创建一个日期时间格式化器
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static String getTimeFormat(String zoneIdStr, long currentTimeMillis) {
ZoneId zoneId = StringUtils.isNotEmpty(zoneIdStr) ? ZoneId.of(zoneIdStr) : ZoneId.systemDefault();
Instant instant = Instant.ofEpochMilli(currentTimeMillis);
ZonedDateTime zonedDateTime = instant.atZone(zoneId);
zonedDateTime.format(formatter);
formattedDateTime;
}
{
timeZone;
() (currentLon / );
Math.abs(currentLon % );
(yushuValue <= ) {
timeZone = shangValue;
} {
timeZone = shangValue + (currentLon > ? : -);
}
timeZone;
}
}










