Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MapWinGis的脱机磁贴服务_C#_Dictionary_Offline - Fatal编程技术网

C# MapWinGis的脱机磁贴服务

C# MapWinGis的脱机磁贴服务,c#,dictionary,offline,C#,Dictionary,Offline,具有可将磁贴缓存到指定文件系统文件夹以供进一步脱机使用的功能。这个函数工作得很好,但是我如何加载这些平铺来在限制区域中创建脱机地图呢? 以下是使用预取文件夹的示例: double y = 39; // latitude, deg. double x = 140; // longitude, deg. double span = 5; // deg. Extents ext = new Extents();

具有可将磁贴缓存到指定文件系统文件夹以供进一步脱机使用的功能。这个函数工作得很好,但是我如何加载这些平铺来在限制区域中创建脱机地图呢? 以下是使用预取文件夹的示例:

        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());
    }

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

对于windows:

1) 下载ms4w:

2) 提取根目录(c:/ms4w)

3) 通过运行/MS4W/Apache-install.bat(在命令行或双击它)启动MS4W Apache Web服务器。此文件将Apache安装为Windows服务(称为“ApacheWeb服务器”),以便在机器重新启动时启动。执行时,应弹出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) 复制tile文件/ms4w/Apache/htdocs/maps

5) 那么您应该可以在中看到这些文件

平铺文件生成

对于这个过程,我使用mapertive。这个程序免费生成openstreet地图。这是链接:

代码示例:

    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;
结果=

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

坦克梅利赫,正如你们所说,我检查了所有东西(除了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);
如果我更改了提供程序,一切都会正常工作,但此提供程序无法加载映射。 正如我所说的,它很好用。 再次感谢你的努力


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

“{zoom}/{x}/{y}.png”


更改您的URL http:/localhost/。。。作为。。。
您错过了一个“/”

谢谢Melih,正如您所说的,我安装了ms4w,效果非常好。我还使用Maperitive缓存了磁贴。但没有任何地图视图。显示图像,但localhost/maps/{zoom}/{x}/{y}.png不显示任何贴图!你测试过你的解决方案吗?是的,这个解决方案有效。请检查providers add方法的返回值,如果该值为false,请更改+1值并重试,或者尝试将投影更改为wsg84。可能添加了map,但由于缩放级别的原因,您没有看到它,所以请在代码中添加map.zoomToTileLevel(1)行,而不是CurrentZoomBe,因为无法在此处键入太多注释,我发布了一个答案。感谢删除行axMap1.GeoProjection.SetWgs84();并更改投影axMap1.projection=tkMapProjection.projection_WGS84如果您更改地图的任何范围,请删除它们并重试。我添加了图像和代码。@melih altıntaş,我们有相同的代码,但结果不同。我禁用了我的防火墙,并用Maperitive为zoom 1和zoom 2重新创建了瓷砖。但正如你在我上一篇文章中看到的,没有答案!这是我的电子邮件:bsflasher(ats)gmail.com。你能把你的瓷砖和代码寄给我吗?或者将您的邮件地址发送给我以向您发送代码和磁贴。我的环境是:VS 2015(在.net 4客户端配置文件中的项目)、Windows 10 x86、Eset防火墙、使用ms4w(3.0.6)、MapWinGIS-only-v4.9.3.5-Win32。