1

我正在更改如何从 Google 地图 api 获取地图图像到使用 OpenStreetMap 数据的 MapQuest 托管的地图图块。我正在从谷歌地图切换,因为我达到了我没想到的每日请求限制,而且我没有使用 OpenStreet api,因为虽然他们的数据是免费的,但他们的图块有限制,我只需要一张图像。因此,我在这里使用 MapQuest 托管的地图图块。

我想我明白了,但是有些事情我想做却找不到任何文档。例如,如果可能的话,我希望图像大小为 500x300,或者至少为 512*512(双 256*256,这就是瓷砖的大小)。我也希望能够显示一个标记。这可能吗?

我使用这里找到的代码我的纬度和经度数据转换为 x 和 y 坐标:

 public class slippy {
 public static void main(String[] args) {
 int zoom = 9;
 double lat = 42.8549;
 double lon = -78.863;
 System.out.println("http://otile1.mqcdn.com/tiles/1.0.0/map/" + getTileNumber(lat, lon, zoom) + ".png");
 }
 public static String getTileNumber(final double lat, final double lon, final 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);
}
}

我使用此代码生成了两个指向 Buffalo 地图的链接;一个缩放为 9, here和一个缩放为 10 , here和中心似乎不同。这是使用开源数据的结果还是我可以使用的属性?

4

1 回答 1

5

当然,中心不同。从一个缩放级别到下一个缩放级别,一个图块被“分割”成四个其他图块。因此,单个图块的中心将位于四个图块的角落。使用上述公式,您将始终获得包含您的坐标的图块。但由于瓷砖的性质,它不一定位于瓷砖的中心。对于每个特定坐标,在给定缩放级别只有一个包含它的图块。因此,坐标可以在图块上的任何位置,而不必在中心。

仍然我不太确定你真正想要实现什么。要显示图块(和标记),您需要做的就是使用LeafletOpenLayers(或任何其他支持图块概念的库)。

请记住,MapQuest 也有使用条款

编辑:

另一种方法是使用WMS服务而不是TMS,它会为您调整图块的大小和连接。使用 WMS,您只需在中心周围定义一个边界框和一个图像大小。生成的图像将始终以坐标为中心。OSM wiki 有一个OSM WMS 服务器列表

不要忘记了解您选择的 WMS 服务的使用政策。

于 2013-08-01T07:31:21.813 回答