在Android App中将google-maps sdk与来自GeoServer的自定义图块一起使用

我正在尝试创建一个应用程序,该应用程序使用google-maps sdk显示2D地图并从GeoServer获取图块,但我遇到了有关服务器返回不同缩放级别的问题,而不是预期的1x1、4x4, 16x16正方形,取而代之的是,它使用的是高度的瓦数,而不是宽度的一半:4x2、16x8等。 最终结果是地图可以正常显示,但顶部的一半瓷砖是空的,有没有办法配置它并使其与这种瓷砖一起工作?

服务器使用EPSG:4326投影。

使用偏移量,我可以使地图居中,但是在缩放时,它的行为不符合预期...

这是结果地图的gif:https://gph.is/g/E1qQgkw

在返回的图块的右侧有一些捕获,而在左边的捕获层按预期工作:

在Android App中将google-maps sdk与来自GeoServer的自定义图块一起使用

是否可以配置google-maps以与此投影和图块一起使用?如果不是这种情况,我什至愿意切换到其他sdk ...

我将不胜感激任何帮助或指点...

windy1986 回答:在Android App中将google-maps sdk与来自GeoServer的自定义图块一起使用

EPSG 3857,Pseudo-Mercator确实是消耗瓷砖的客户端“标准” https://epsg.io/3857

而且我还不知道能够使用非标准磁贴(osmdroid,mapsforge,mabox等)的其他任何SDK。

因此,您的Geoserver实例必须即时或预先生成EPSG:3857。

我无法理解Geoserver是否正在提供WMS切片。在这种情况下,您可以在请求图块时将EPSG代码作为参数传递。 看看这个Google Maps插件,看看它是如何完成的, https://github.com/shalperin/android-wms

如果Geoserver仅提供预先生成的X / Y / Z切片的缓存,则必须重新生成该缓存。

不过,这是有关如何使用TileOverlay消费图块的官方演示 https://github.com/googlemaps/android-samples/blob/master/ApiDemos/java/app/src/main/java/com/example/mapdemo/TileOverlayDemoActivity.java

,

默认情况下,GeoServer(实际上是内部GeoWebCache)能够使用3种相关但不同的标准WMTSTMSWMS-C提供图块两个投影EPSG:4326(纬度/经度)或EPSG:900913(现称为EPSG 3857,Psuedo Web Mercator)。

您需要哪些端点取决于您使用的SDK,但是查看显示的图像,左边是EPSG:4326,右边是EPSG:3857。

,

经过大量调查,我们找出了问题所在,并找到了解决方案,它可能会在将来对某人有所帮助。问题在于,与“道路”投影相比,“卫星”拼贴的投影与ESPG:4326和ESPG有所不同: 3857(谷歌地图和所有其他sdk使用的最常见的又名Web Mercator)

我们无法对磁贴进行任何更改,但是我们确实可以对服务器进行更改,因此MapProxy是我们的最佳选择,使用该工具,我们可以将4326转换为3857并使用来自移动客户端的图块,没有任何更改。 这是一个在Windows上运行的python程序,可充当客户端请求的图块与提供图块的服务器之间的代理,并将它们重新投影并暴露在新的端点上。

本文链接:https://www.f2er.com/3137437.html

大家都在问