首页 > 解决方案 > 如何将地图框瓷砖添加到gmap?

问题描述

我想从数据库中获取地图框图块,但它不起作用。我从这里得到 MBTilesMapProvider 类。它的调用如下:

map.Manager.Mode = AccessMode.ServerAndCache;
map.MapProvider = new  MBTilesMapProvider("C:\\Users\\NPC\\Desktop\\test\\ne.mbtiles");

结果: [2]:https://i.stack.imgur.com/rGRCP.png

但如果谷歌地图用作地图提供​​者,如下所示,它运作良好

map.Manager.Mode = AccessMode.ServerAndCache;
map.MapProvider = GoogleSatelliteMapProvider.Instance;

当我调试时,我注意到永远不会调用GetTiles方法。

注意:我认为查找数据库没有问题,因为它从数据库中读取元数据。

标签: c#user-interfacemapsgmap.netmbtiles

解决方案


我通过在 MBTilesHelper.cs 上进行一些更改来解决解决方案。

首先我意识到,当从数据库 MinZoom 和 MaxZoom 值读取元数据时,它们总是保持为零,因为它不包含 MinZoom 或 MaxZoom。因此,我手动设置它们。

其次,我改变了一点“getImage”方法。

private PureImage getImage(GPoint pos, int zoom)
{
    PureImage retval = null;

    var resultImage = _mbtiles.GetTileStream(pos.X, pos.Y, zoom);
        
    if (resultImage != null && resultImage.Length > 0)
    {
        //resultImage.Position = 0L;
        retval = GetTileImageFromArray(resultImage);
    }
    return retval;
}

推荐阅读