Spring Boot 实现构建一个轻量级地图瓦片服务

  • 存在瓦片:从本地目录读取对应 PNG 文件并返回;
  • 瓦片缺失:动态生成一张 256×256 的全透明 PNG 图像,避免前端加载错误;
java 复制代码
@GetMapping("/tiles/{z}/{x}/{y}.png")
public ResponseEntity<Resource> getTile(
                                @PathVariable String z,
                                @PathVariable String x,
                                @PathVariable String y) throws IOException {

    String TILE_ROOT = "";
    if ("Windows 10".equals(System.getProperty("os.name"))) {
        TILE_ROOT = "本地地址";
    } else {
        TILE_ROOT = "云端地址/www/java/title/";
    }

    String path = TILE_ROOT + z + "/" + x + "/" + y + ".png";
    File file = new File(path);

    if (file.exists()) {
        InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=\"" + y + ".png\"")
                .contentType(MediaType.IMAGE_PNG)
                .body(resource);
    } else {
        // 没有瓦片 → 返回透明图片
        byte[] transparentPng = createTransparentPng(256, 256);
        return ResponseEntity.ok()
                .contentType(MediaType.IMAGE_PNG)
                .body(new ByteArrayResource(transparentPng));
    }
}

   

当瓦片不存在时,调用 createTransparentPng(256, 256) 生成一张 256×256 的全透明 PNG:

java 复制代码
// 创建透明 PNG 的字节数组
private byte[] createTransparentPng(int width, int height) throws IOException {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = image.createGraphics();
    g.setColor(new Color(0, 0, 0, 0)); // 全透明
    g.fillRect(0, 0, width, height);
    g.dispose();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(image, "png", baos);
    return baos.toByteArray();
}
相关推荐
ShadowYD3 小时前
Agent Loop:一个让 AI 编程 Agent 从"会写代码"进化到"闭环交付"的开源 Skill(适配国内外主流 Code Agent)
后端
考虑考虑5 小时前
nohup启动java程序
后端·自动化运维
鹿角片ljp6 小时前
LeetCode 64:最小路径和复盘|二维 DP 与 ACM 模式完整写法
java·数据结构·算法
aramae6 小时前
模拟实现strcmp()(C语言)
c语言·开发语言·后端
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
泡海椒7 小时前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
根目录下的猫8 小时前
RK3588适配的轻量级AI模型推荐
人工智能·后端·python·目标检测
景熙55238 小时前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
wno7048 小时前
Spring Security权限控制
java·python·spring