【问题标题】:Offline tile services for MapWinGisMapWinGis 的离线切片服务
【发布时间】:2015-10-21 21:18:15
【问题描述】:

MapWinGIS 具有PrefetchToFolder 的功能,可以将切片缓存到指定的文件系统文件夹以供进一步离线使用。此功能完美运行,但是如何加载该图块以在受限区域创建离线地图? 这是使用 PrefetchToFolder 的示例:

        double y = 39;    // latitude, deg.
        double x = 140;     // longitude, deg.
        double span = 5;  // deg.
        Extents ext = new Extents();
        ext.SetBounds(x - span, y - span, 0.0, x + span, y + span, 0.0);
        axMap1.Tiles.PrefetchToFolder(ext, 8, 0, @"c:\map1", ".png", StopFunction());

我的编程语言是 C#。

这是一些可以获取但无法加载的代码:

    private void btnLoad_Click(object sender, EventArgs e)
    {
        TileProviders providers = axMap1.Tiles.Providers; ;
        int providerId = (int)tkTileProvider.ProviderCustom + 1;    
        providers.Add(providerId, "MyProvider", @"file:///C|/map1/{zoom}/{x}/{y}.png", tkTileProjection.SphericalMercator, 1, 18);

        axMap1.Projection = tkMapProjection.PROJECTION_GOOGLE_MERCATOR;
        axMap1.TileProvider = tkTileProvider.ProviderCustom;
        axMap1.Tiles.ProviderId = providerId;

        axMap1.Latitude = 39;
        axMap1.Longitude = 140;
        axMap1.CurrentZoom = 8;

    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        double y = 39;    // latitude, deg.
        double x = 140;     // longitude, deg.
        double span = 5;  // deg.
        Extents ext = new Extents();
        ext.SetBounds(x - span, y - span, 0.0, x + span, y + span, 0.0);
       axMap1.Tiles.PrefetchToFolder(ext,1 , 0, @"c:\map1", ".png", StopFunction());
    }

【问题讨论】:

    标签: c# dictionary offline


    【解决方案1】:

    您应该为此使用服务器。例如:地图服务器

    对于窗户:

    1) 下载 ms4w : http://www.maptools.org/ms4w/index.phtml?page=downloads.html

    2) 解压根目录(c:/ms4w)

    3) 通过运行 /ms4w/apache-install.bat(在命令行或双击它)启动您的 MS4W Apache Web 服务器。此文件将 Apache 安装为 Windows 服务(称为“Apache Web 服务器”),以便在您的计算机重新启动时启动它。执行时,应该会弹出一个 DOS 窗口并显示以下消息:

    Installing the Apache MS4W Web Server service
    The Apache MS4W Web Server service is successfully installed.
    Testing httpd.conf....
    Errors reported here must be corrected before the service
    can be started.
    The Apache MS4W Web Server service is starting.
    The Apache MS4W Web Server service was started successfully.
    

    4)复制平铺文件/ms4w/Apache/htdocs/maps

    5) 然后你应该在http://localhost/maps看到这个文件

    瓷砖文件生成

    对于这个过程,我使用 mapertive。该程序免费并生成openstreet地图。这是链接:http://maperitive.net/

    代码示例:

        TileProviders providers = axMap1.Tiles.Providers; ;
        int providerId = (int)tkTileProvider.ProviderCustom + 1;    
        providers.Add(providerId, "MyProvider", "http:/localhost/maps/{zoom}/{x}/{y}.png", tkTileProjection.SphericalMercator, 1, 18);
    
        axMap1.Tiles.ProviderId = providerId;
        axMap1.CurrentZoom = 8;
    

    结果 =

    【讨论】:

    • 谢谢Melih,正如你所说,我安装了ms4w,效果很好。我还用 Maperitive 缓存了切片。但是没有任何地图视图。 localhost/maps/1/1/1.png 显示图像,但 localhost/maps/{zoom}/{x}/{y}.png 不显示任何地图!你测试你的解决方案吗?
    • 是的,这个解决方案有效。请检查 providers add 方法的返回值,如果值为 false 更改 +1 值并重试或尝试将投影更改为 wsg84。可能添加了地图,但由于缩放级别而您没有看到,因此请在代码中添加 map.zoomToTileLevel(1) 行而不是 currentzoom
    • 因为不能在这里输入太多评论,所以我发布了一个答案。谢谢
    【解决方案2】:

    是的,此解决方案有效。请检查 providers add 方法的返回值,如果值为 false 更改 +1 值并重试或尝试将投影更改为 wsg84。可能添加了地图,但由于缩放级别而您没有看到,所以在代码中添加 map.zoomToTileLevel(1) 行而不是 currentzoom

    Tanks Melih,正如你所说,我检查了所有东西(除了 wsg84,我对此一无所知)但仍然看不到地图!这是我的代码:

            axMap1.CtlbackColor = Color.Transparent;
            TileProviders providers = axMap1.Tiles.Providers;
            int providerId = (int)tkTileProvider.ProviderCustom + 100;
            //providers.Add(providerId, "Custom TMS provider", "http://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png", tkTileProjection.SphericalMercator, 1, 18);
            providers.Add(providerId, "CustomTMSprovider", @"http://localhost/maps/Tiles/{zoom}/{x}/{y}.png", tkTileProjection.SphericalMercator, 1, 18);
            axMap1.Tiles.ProviderId = providerId;
            axMap1.Projection = tkMapProjection.PROJECTION_WGS84;
            axMap1.GrabProjectionFromData = true;
            axMap1.ZoomBehavior = tkZoomBehavior.zbUseTileLevels;
            axMap1.ZoomToTileLevel(2);
    

    如果我更改提供程序,一切正常,但此提供程序无法加载地图。 正如我所说,tile local server 效果很好。 再次感谢您的努力。

    【讨论】:

    • 删除行 axMap1.GeoProjection.SetWgs84();并更改投影 axMap1.Projection = tkMapProjection.PROJECTION_WGS84 如果您更改地图的任何范围,请删除它们并重试。我添加了图像和代码。
    • @melih-altıntaş,我们有相同的代码,但结果不同。我禁用了我的防火墙并使用 Maperitive 为缩放 1 和 2 重新创建图块。但是正如您在我上一篇文章中看到的那样,没有答案!这是我的电子邮件:bsflasher (ats) gmail.com。你能把你的瓷砖和代码发给我吗?或者将您的邮件地址发送给我,以便向您发送我的代码和图块。
    • 我的环境是:VS 2015(.net 4 客户端配置文件中的项目),Windows 10 x86,Eset 防火墙,使用 ms4w (3.0.6),MapWinGIS-only-v4.9.3.5-Win32 .
    【解决方案3】:

    将您的 URL http:/localhost/... 更改为 http://localhost/... 你错过了一个'/'

    【讨论】:

      【解决方案4】:

      我正在执行此过程,但无法加载地图,我在 map.mbtiles 中有来自 maperitive 的图块,但我如何显示它:我必须将我的文件 .mbtiles 导出为 .png?作为..

      http://localhost/maps/Tiles/{zoom}/{x}/{y}.png”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-25
        • 2011-05-10
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        相关资源
        最近更新 更多