跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java算法

Leaflet+SpringBoot 实现地图任意点位点击查看时间功能

基于 Leaflet 和 SpringBoot 技术栈,通过后端 Java 计算经纬度对应的时区偏移量,结合前端地图点击事件,实现全球任意点位查看当地时间与北京时间的对比功能。核心逻辑包含经纬度转时区算法、前后端数据交互及页面展示,适用于跨境系统、物流地图等场景,解决了纯前端无法精准获取全球时区的痛点。

女王发布于 2026/3/22更新于 2026/7/722 浏览
Leaflet+SpringBoot 实现地图任意点位点击查看时间功能

前言

在数字化、全球化的当下,地理位置与时间信息的结合应用,已经渗透到出行导航、跨境调度、物流追踪、国际业务展示等众多场景。用户不再满足于单纯查看地图点位,更需要点击地图任意位置,即可快速获取当地真实时间。这种轻量化、高实用性的交互功能,已成为 Web 地图应用的标配能力。

文章配图

在前端地图开发领域,Leaflet 凭借体积小、易用性强、兼容性好、插件丰富等优势,成为轻量级 Web 地图开发的首选框架;在后端技术栈中,SpringBoot 以自动配置、开箱即用、生态完善等特点,成为 Java 全栈开发的主流选择。将 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 getTimeFormart(String zoneIdStr, long currentTimeMillis) {
        ZoneId zoneId = StringUtils.isNotEmpty(zoneIdStr) ? ZoneId.of(zoneIdStr) : ZoneId.systemDefault();
        // 将时间戳转换为 Instant 对象
        Instant instant = Instant.ofEpochMilli(currentTimeMillis);
        // 将 Instant 转换为 ZonedDateTime
        ZonedDateTime zonedDateTime = instant.atZone(zoneId);
        // 格式化日期时间
        String formattedDateTime = zonedDateTime.format(formatter);
        // 输出格式化后的日期时间
        return formattedDateTime;
    }

    /**
     * - 根据位置精度获得时区 id
     * @param currentLon
     * @return
     */
    public static int calculateTimeZone(double currentLon) {
        int timeZone;
        int shangValue = (int) (currentLon / 15);
        double yushuValue = Math.abs(currentLon % 15);
        if (yushuValue <= 7.5) {
            timeZone = shangValue;
        } else {
            timeZone = shangValue + (currentLon > 0 ? 1 : -1);
        }
        return timeZone;
    }
}
2、Leaflet 实现地图点击

关于如何使用 Leaflet 集成地图展示,非常简单。前端在引入 Leaflet 之后,初始化地图,绑定点击事件,获取点击点位的经纬度。核心代码如下:

function onMapClick(e) {
    var title = "坐标信息展示";
    parent.layer.open({
        type: 2,
        title: [title, 'font-size:16px;text-align:center;font-weight: bold;'],
        scrollbar: false,
        area: ['45%', '50%'],
        content: ctx + "/eq/wcountry/globaldetail?lng=" + e.latlng.lng + "&lat=" + e.latlng.lat,
        btn: [],
        yes: function(index, layero) {},
        cancel: function(index, layero) {
            parent.layer.close(index);
            return false;
        }
    });
}
mymap.on('click', onMapClick);

值得注意的是,在这里我们使用 Layui 来实现打开一个新窗口。因此在页面开发时需要注意引入依赖资源。

3、前后台交互

后端 Controller 主要为实现页面的跳转以及时区时间信息展示,在实现具体时区展示时,自动计算时间信息,并与北京时间进行对比。Java 代码如下:

/**
 * - 全球信息可视化,集成北京时间、当地时间、所属时区、未来可以扩展天气和国家、首都信息
 * @return
 */
@RequiresPermissions("eq:capital:globalinfo")
@GetMapping("/globalinfo")
public String globalinfo() {
    return prefix + "/globalinfo";
}

/**
 * - 全球信息可视化,集成北京时间、当地时间、所属时区、未来可以扩展天气和国家、首都信息
 * @return
 */
@RequiresPermissions("eq:capital:globaldetail")
@GetMapping("/globaldetail")
public String globaldetail(String lng, String lat, ModelMap mmap) {
    mmap.put("lng", lng);
    mmap.put("lat", lat);
    // 获取当前时间戳
    long currentTimeMillis = System.currentTimeMillis();
    String beijingTime = ZoneUtils.getTimeFormart(null, currentTimeMillis); // 北京时间
    mmap.put("beijingTime", beijingTime);
    // 根据经度求解时区偏移,然后计算时间
    int timeZoneOffset = ZoneUtils.calculateTimeZone(Double.parseDouble(lng));
    // 获取时区偏移
    String offset = (timeZoneOffset < 0 ? "-" : "+") + Math.abs(timeZoneOffset);
    String zongIdStr = "UTC" + offset;
    mmap.put("zongIdStr", zongIdStr);
    String localTime = ZoneUtils.getTimeFormart(zongIdStr, currentTimeMillis);
    mmap.put("localTime", localTime);
    return prefix + "/globaldetail";
}

前端请求页面展示时区及时间信息,前端使用 Thymeleaf 来进行页面构建。核心代码如下:

<table>
    <tbody>
        <tr>
            <td>经度</td>
            <td>[[${lng}]]</td>
        </tr>
        <tr>
            <td>纬度</td>
            <td>[[${lat}]]</td>
        </tr>
        <tr>
            <td>北京时间</td>
            <td>[[${beijingTime}]] &nbsp;【UTC+8 】</td>
        </tr>
        <tr>
            <td>当地时间</td>
            <td>[[${localTime}]] &nbsp;【[[${zongIdStr}]]】</td>
        </tr>
    </tbody>
</table>

三、成果展示

本节将对直接对页面进行展示,将成果给大家呈现出来。启动 SpringBoot 项目,访问前端页面,在全球不同区域点击测试,效果如下:

1、亚洲地区
  • 点击中国北京:弹出东八区标准时间,与时区完全匹配;

文章配图

  • 点击日本东京:显示东九区时间,时差 1 小时,结果精准。

文章配图

2、欧洲地区
  • 点击英国伦敦:显示零时区 / 夏令时时间;

文章配图

  • 点击法国巴黎:显示东零区时间,时差匹配无误。

文章配图

3、拉美地区
  • 点击巴西里约:显示西三区时间,符合南美时区规则;

文章配图

  • 点击墨西哥城:显示西七区时间,计算结果无偏差。

文章配图

4、澳洲地区
  • 点击澳大利亚悉尼:显示东十区时间;

文章配图

  • 点击新西兰奥克兰:显示东十二区时间,跨区域计算精准。

文章配图

以上所有点位点击响应速度快,时间 100% 准确,无偏移、无错误。证明我们的计算无误。

四、总结

以上就是本文的主要内容。文章通过Leaflet+SpringBoot技术栈,完整实现了「地图任意点位点击查看当地时间」功能,核心完成了三大模块开发:

  1. 基于 Leaflet 实现世界地图加载与点位点击交互,前端简洁高效;
  2. 依托 Java 语言解决经纬度转时区的核心难题,保证时间精准性;
  3. 通过前后端分离接口实现数据交互,架构清晰、易于扩展。

本项目可直接应用于跨境系统、可视化大屏、物流地图、国际业务平台等场景,也可在此基础上扩展历史时间查询、时区对比、多语言展示等功能。Leaflet 轻量化的特性搭配 SpringBoot 高效的后端能力,是中小型 Web 地图项目的最佳实践之一。

目录

  1. 前言
  2. 一、需求解析
  3. 1、地图展示
  4. 2、时区和时间的关系
  5. 3、经纬度和时区的关系
  6. 二、应用实现
  7. 1、经纬度和时区求解
  8. 2、Leaflet 实现地图点击
  9. 3、前后台交互
  10. 三、成果展示
  11. 1、亚洲地区
  12. 2、欧洲地区
  13. 3、拉美地区
  14. 4、澳洲地区
  15. 四、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Windows 本地部署 Ollama 与 OpenClaw 构建 AI 自动化工作流
  • Spring Cloud + Nacos 微服务从 0 到 1 搭建实战
  • Docker 拉取镜像失败报错及配置镜像源解决方案
  • 使用 Metasploit 制作 Linux 可执行文件及恶意 deb 包获取 Shell
  • 基于 Higress 将现有 REST API 转换为 MCP Server 工具
  • 大模型量化技术可视化指南
  • 2023 年高考大专就业前景较好的专业推荐
  • UniHttp 中 Xml 与 JavaBean 序列化的多种实现方式
  • OpenClaw 多智能体架构配置指南
  • SpringBoot 4.0 新特性整合项目实战应用详解
  • 网络爬虫技术原理、攻防博弈与法律风险解析
  • 未来八大最具潜力行业深度解析与技术趋势
  • LeetCode Hot 100 链表进阶:反转与排序实战 (Python)
  • 飞算 JavaAI 插件安装与实战开发指南
  • Linux 基础指令与权限管理实战指南
  • AI 产品经理的核心能力与职业转型指南
  • 县域烟花禁燃监管实践:Java 调用高德地图盘点销售点
  • C++ 内存分布与模板机制详解
  • Linux 6.19 ARM64 Crypto SM3 哈希子模块源码分析
  • 无人机智能巡检系统架构设计与大疆云集成方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online