在世界地图上的任何地方在Mapbox上实现相同的平方/像素大小?

时间:2018-04-07 07:20:56

标签: ios swift mapbox

我面临的问题与this issue on Github类似,但与Unity SDK的问题密切相关,我的问题是针对iOS SDK。

我想达到同样的目的。让我解释一下,基本上我有像素网格,其中每个像素的大小相等。在现实世界中,像素设置为10米x 10米。我经历过的事情是,如果像素位于世界的北部或南部,它的大小会像下面那样拉伸。

enter image description here

点击查看大图

但是当这样的像素位于赤道线上时,或者只是沿着世界的中间部分。看起来好像跟着

enter image description here

点击查看大图

渲染内容或在Mapbox上定位没有问题。问题是我希望每个像素在视觉上都是方形的。

我已经阅读了上面链接的问题。它与mercator有关,世界并不平坦,因此这种视觉发生。它看起来沿着世界地图的北部和南部延伸。同样,我发现Unity SDK中针对iOS SDK上的这个特定问题没有相同的功能,因此我不确定应该采用哪种方法来解决此解决方案。

如何使用Mapbox iOS SDK在地图框上的网格线上实现相同大小的像素? SDK中是否已提供解决方案?

FYI

  • 我的要求还需要实际距离,如地图上所示。我不确定它是否会影响我在上面链接的链接中提供的解决方案。
  • 我使用的是Mapbox iOS SDK 3.7.6
  • 我的初始方法很简单,因为我将像素的大小固定为10m x 10m,然后计算其对应的纬度和经度值。使用这些值将它们放置在Mapbox中,将整个世界地图视为tilemap。无论如何,我没有在计算中考虑墨卡托,所以情况可能就是这样,如果是这样的话,那该怎么做呢?我在iOS SDK中查看的内容只有MGLMapView' s metersPerPoint(atLatitude:)。没有tile ID系统,或者在Unity SDK上看到的Conversions.cs。所以我不确定如何继续解决这个问题。

更新 我设法解决它并使其工作! 我会回来发布解决方案。

1 个答案:

答案 0 :(得分:0)

我的解决方案是将sphericalmercator.js移植到swift,然后在代码中使用它。我使用22级的固定缩放级别,因为它的视觉外观最接近我需要的以及之前。我采用的方法至少让它在视觉上看起来没有必要,不需要它的物理尺寸。

  

感谢此answer中有关如何使用ballsmercator.js的提示。

无论如何,使用它进行测试时,无论我设置什么值,使用SphericalMercator创建实例时设置的切片大小似乎都没有效果。只有缩放级别才能确定世界地图上的切片数量。请注意,左上角是原点,即0,0 tile索引。较低的缩放级别值将生成较大的图块大小,但较高的值将生成较小的图块大小。

你可以看一下SphericalMercator-swift;我从上面链接的源JS实现移植的代码,以及如何使用它来获取tile索引,或者在swift代码中使用经度/纬度的边界框,以便在Mapbox之上渲染内容。