在 OSMDroid 中显示来自 Geoserver 的地图

Posted

技术标签:

【中文标题】在 OSMDroid 中显示来自 Geoserver 的地图【英文标题】:Display map from Geoserver in OSMDroid 【发布时间】:2017-03-04 13:40:23 【问题描述】:

我已经在 Geoserver 中缓存了切片,我需要在我的 android 应用程序中通过 OSMDroid 显示地图。我已经使用 OpenLayers 对我的 Web 应用程序进行了尝试,并且可以像这样正常工作:

 var map = new ol.Map(
    target: 'map',
    layers: [
        new ol.layer.Tile(
            source: new ol.source.XYZ(
                url: 'http://localhost:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/z/x/-y.png'
            )
        )

所以现在我需要在 Android 中显示它。我为自定义磁贴源创建了类:

public class GeoserverTileSource extends OnlineTileSourceBase 

public static String[] TILE_URL = "http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png";

public GeoserverTileSource(String aName, int aZoomMinLevel, int aZoomMaxLevel, int aTileSizePixels, String aImageFilenameEnding, String[] aBaseUrl) 
    super(aName, aZoomMinLevel, aZoomMaxLevel, aTileSizePixels, aImageFilenameEnding, aBaseUrl);


@Override
public String getTileURLString(MapTile aTile) 
    return TILE_URL[0] + "/" + aTile.getZoomLevel() + "/" + aTile.getX() + "/" + aTile.getY();

这是我的 MainActivity 类:

public class MainActivity extends AppCompatActivity 

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    Context ctx = getApplicationContext();
    //important! set your user agent to prevent getting banned from the osm servers
    Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
    setContentView(R.layout.activity_main);

    MapView map = (MapView) findViewById(R.id.map);

    GeoserverTileSource source = new GeoserverTileSource("geoserver", 10, 18, 256, ".png", GeoserverTileSource.TILE_URL);

    map.setTileSource(source);
    //map.setTileSource(TileSourceFactory.MAPNIK);



public void onResume()
    super.onResume();
    Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));

Geoserver 日志打印:

2017-03-04 14:29:20,451 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/642/281
2017-03-04 14:29:20,460 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/639/281
2017-03-04 14:29:20,460 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/640/280
2017-03-04 14:29:20,472 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/637/281
2017-03-04 14:29:20,473 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/638/281
2017-03-04 14:29:20,480 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/639/280
2017-03-04 14:29:20,480 ERROR [geowebcache.GeoWebCacheDispatcher] - null http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/18/641/279

geoserver 打开geoserver 调试日志后: http://pastebin.com/wTw5ASDC

起初我尝试了 Mapnik 平铺源并且它可以工作......但我没有:/你能告诉我我做错了什么吗?谢谢

编辑: 我已将我的函数 getTileURLString 编辑为此但仍然无法正常工作:

@Override
public String getTileURLString(MapTile aTile) 
    return TILE_URL[0] + "/" + aTile.getZoomLevel() + "/" + aTile.getX() + "/" + aTile.getY() + ".png";

所以我尝试了浏览器中日志文件中的 url,我得到了这个:

当我在最后尝试使用“.png”的 url 时,我得到了这个:

android studio 终端打印这个:

W/OsmDroid: Problem downloading MapTile: /10/651/444 HTTP response: 
W/OsmDroid: Problem downloading MapTile: /10/649/444 HTTP response: 
W/OsmDroid: Problem downloading MapTile: /10/648/445 HTTP response: 
W/OsmDroid: Problem downloading MapTile: /10/650/445 HTTP response: 
W/OsmDroid: Problem downloading MapTile: /10/649/445 HTTP response:

osmdroid 调用 url 是否可能带有错误的参数?因为正如您在图片上看到的,结构名称略有不同,并且它们包含下划线。

【问题讨论】:

将 geoserver 日志级别调高到开发者并重试 好的,我打开它,我有新日志......所以我编辑了问题。 运气好能找到解决方案???我正在尝试实现类似的目标 【参考方案1】:

GeoServer 说它不知道如何处理如下请求:

http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/11/9/3

这是因为您没有指定图像格式,所以这样的 URL 应该可以工作:

http://10.0.2.2:8080/geoserver/gwc/service/tms/1.0.0/Bachelor%3Av_slovensko_group@EPSG%3A3857@png/11/9/3.png

【讨论】:

仍然不行,我再次更新我的问题,并添加屏幕当我调用这个 url 时 geoserver 返回的内容。

以上是关于在 OSMDroid 中显示来自 Geoserver 的地图的主要内容,如果未能解决你的问题,请参考以下文章

OsmDroid 显示当前 LocationIcon 不工作

Geoserve发布地图

用 Osmdroid 捏合缩放

OSMDroid:缩放以显示整个 PathOverlay

OsmDroid 显示带有块的空白屏幕

osmdroid 显示一个空网格