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"));
幸せな日々。