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();
}
相关推荐
SuperherRo26 分钟前
JAVA攻防-Shiro专题&断点调试&有key利用链&URL&CC&CB&原生反序列化&加密逻辑
java·shiro·反序列化·有key·利用链·原生反序列化·加密逻辑
桦说编程35 分钟前
简单方法实现子任务耗时统计
java·后端·监控
爱笑的眼睛1139 分钟前
超越可视化:降维算法组件的深度解析与工程实践
java·人工智能·python·ai
BD_Marathon41 分钟前
配置文件分类
spring boot
M***Z21042 分钟前
springboot中配置logback-spring.xml
spring boot·spring·logback
盖世英雄酱581361 小时前
物品超领取损失1万事故复盘(一)
java·后端
凌览1 小时前
别再死磕 Nginx!http-proxy-middleware 低配置起飞
前端·后端
拾玖不会code1 小时前
简单分表场景下的业务发散思考:分表如何保证丝滑?
后端
CryptoRzz1 小时前
印度尼西亚(IDX)股票数据对接开发
java·后端·websocket·web3·区块链