传单如何加载自定义规则的图块地图?

时间:2019-03-23 03:22:51

标签: javascript leaflet

现在本地有一张自定义图块规则的地图。已经有一个可以正常调用的自定义JavaScript库。现在,我需要用传单代替这个图书馆。如何使用旧的JavaScript库和传单中的算法进行平铺地图正常调用?

图块地图投影规则是墨卡托投影。磁贴大小不规则。宽度为256像素。每行的高度相同,但是不同的行高不同。旧的JavaScript库定义了椭球参数。各个级别的比例尺,等级数计算规则等,现在要使用传单来加载这些图块地图,如何使用旧规则和传单组合?

MapBase定义了各种基本参数,loadMapImage是一个关键功能

function LoadMapImage() {
    var tileLoadInfo = mapBase.getViewInfo();
    MapInfo.Map.basemapslicedlayer.empty();
    for (var i = 0; i < tileLoadInfo.TileInfo.length; i++) {
        if (MapInfo.Map.Tiles[tileLoadInfo.TileInfo[i].Col + "_" + tileLoadInfo.TileInfo[i].Row + "_" + tileLoadInfo.Mode] == undefined) {
            if (tileLoadInfo.Mode == 6) {
                var src = DNCOptions.url + "&" + DNCOptions.paramX + "=" + tileLoadInfo.TileInfo[i].Row + "&" + DNCOptions.paramY + "=" + tileLoadInfo.TileInfo[i].Col + "&" + DNCOptions.paramZ + "=" + tileLoadInfo.TileInfo[i].Level + "&SessionID=" + WinfoDNCSessionID
            } else if (tileLoadInfo.Mode == 8 || tileLoadInfo.Mode == 9) {
                var level = tileLoadInfo.Level + 2;
                if (tileLoadInfo.Mode == 9) {
                    level = tileLoadInfo.Level - 3
                }
                src = MapInfo.ServicePath + "?REQUEST=GetMap&SERVICE=CacheMap&Y=" + tileLoadInfo.TileInfo[i].Col + "&X=" + tileLoadInfo.TileInfo[i].Row + "&LEVEL=" + level + "&LAYERS=" + DNCOptions.layername + "&SessionID=" + WinfoDNCSessionID
            } else {
                var src = MapInfo.ServicePath + "?REQUEST=GetMap&SERVICE=WINFODNC&X=" + tileLoadInfo.TileInfo[i].Col + "&Y=" + tileLoadInfo.TileInfo[i].Row + "&LEVEL=" + tileLoadInfo.Level + "&LAYERS=" + tileLoadInfo.Mode + "&SessionID=" + WinfoDNCSessionID
            }
            MapInfo.Map.Tiles[tileLoadInfo.TileInfo[i].Col + "_" + tileLoadInfo.TileInfo[i].Row + "_" + tileLoadInfo.Mode] = w$("<img>").css({
                position: "absolute",
                left: tileLoadInfo.TileInfo[i].Offset_x,
                top: tileLoadInfo.TileInfo[i].Offset_y
            }).attr("src", src)
        }
        MapInfo.Map.basemapslicedlayer.append(MapInfo.Map.Tiles[tileLoadInfo.TileInfo[i].Col + "_" + tileLoadInfo.TileInfo[i].Row + "_" + tileLoadInfo.Mode].css({
            position: "absolute",
            left: tileLoadInfo.TileInfo[i].Offset_x,
            top: tileLoadInfo.TileInfo[i].Offset_y
        }))
    }
}
    function GetTileInfoByViewportParam(vp) {
        var Box = {};
        var i, row1, row2, col1, col2, hTileSize;
        var L, R, T, B;
        var LT = ScreenPoint2Coordinate(vp, 0, 0);
        Box.Top = LT[0];
        Box.Left = LT[1];
        var RB = ScreenPoint2Coordinate(vp, vp.Width, vp.Height);
        Box.Bottom = RB[0];
        Box.Right = RB[1];
        var rc = CalculateTile(LevelZeroTileSizeDegrees, Box, vp.Level);
        row1 = rc[0];
        row2 = rc[2];
        col1 = rc[1];
        col2 = rc[3];
        var LRTB = CalculateTileExtend(LevelZeroTileSizeDegrees, vp.Level, row1, col1);
        L = LRTB[0];
        R = LRTB[1];
        T = LRTB[2];
        B = LRTB[3];
        var Offset = Coordinate2ScreenPoint(vp, T, L);
        vp.Offset_x = Offset[0];
        vp.Offset_y = Offset[1];
        MapViewInfo.Level = vp.Level;
        MapViewInfo.Box = Box;
        i = 0;
        var offsety = vp.Offset_y;
        MapViewInfo.TileInfo = [];
        for (var j = row1; j >= row2; j--) {
            hTileSize = CalculateTileSize(vp.Level, j, col1);
            var offsetx = vp.Offset_x;
            for (var z = col1; z <= col2; z++) {
                var tileInfo = {};
                tileInfo.Row = j;
                tileInfo.Col = z;
                tileInfo.Height = hTileSize;
                tileInfo.Widht = TileSize;
                tileInfo.Offset_x = offsetx;
                tileInfo.Offset_y = offsety;
                offsetx += TileSize;
                MapViewInfo.TileInfo[i] = tileInfo;
                i++
            }
            offsety += hTileSize
        }
        return MapViewInfo
    };

根据默认的传单初始化地图方法,只能将参数检索到空白图块。

0 个答案:

没有答案