OpenStreetMap
在发现如何存储它的瓷砖后,我想出了这个。基本情况是:
- 瓷砖是 256 × 256 像素的 PNG 文件
- 每个缩放级别是一个目录,每一列是一个子目录,该列中的每个图块都是一个文件
- 访问文件使用
http://localhost/osm/${z}/${x}/${y}.png
${z} ${x} and ${y}
根据纬度和经度计算值。
OpenStreetMap Wiki上有一些关于此主题的优秀文档,包括用于计算图块名称的各种语言的代码块。我需要一个 Java 解决方案,所以我最终使用的代码是:
public class Mapper
{
public static void main(String[] args)
{
int zoom = 11;
double lat = -33.77651d;
double lon = 150.94712d;
System.out.println("http://localhost/osm/"
+ getTileNumber(lat, lon, zoom) + ".png");
}
public static String getTileNumber(double lat, double lon, int zoom)
{
int xtile = (int)Math.floor((lon + 180) / 360 * (1<<zoom));
int ytile = (int)Math.floor((1 - Math.log(Math.tan(Math.toRadians(lat))
+ 1 / Math.cos(Math.toRadians(lat))) / Math.PI) / 2 * (1<<zoom));
return ("" + zoom + "/" + xtile + "/" + ytile);
}
}
这将返回所需图像块的 URL,例如:http://localhost/osm/11/1882/1228.png
然后您可以使用它来获取图像。然后我使用Thumbnailator生成 128x128 的缩略图大小:
Thumbnails.of(new File("tile.png"))
.size(128, 128)
.toFile(new File("thumbnail.png"));
快乐的时光。