예제 #1
0
        //缩放地图后更新瓦片
        void UpdateTileOffectOfScale()
        {
            int   ll     = 0;
            int   tt     = 0;
            float offect = 0;

            if (lastVect_L.x + container.anchoredPosition.x - size / 2 > rect.x)
            {
                mStateL = MoveState_L.left;
                offect  = lastVect_L.x + container.anchoredPosition.x - size / 2 - rect.x;
            }
            else if (lastVect_R.x + container.anchoredPosition.x + size / 2 < rect.width)
            {
                mStateL = MoveState_L.right;
                offect  = lastVect_L.x + container.anchoredPosition.x - size / 2 - rect.x;
            }
            else
            {
                mStateL = MoveState_L.None;
            }
            float reml  = Mathf.Abs(offect) / size;
            int   remlv = Mathf.FloorToInt(reml);

            if (reml == remlv)
            {
                ll = remlv;
            }
            else
            {
                ll = remlv + 1;
            }
            mStateT = MoveState_T.None;
            UpdateTile(mStateL, mStateT, ll, tt);
        }
예제 #2
0
        void UpdateTile(MoveState_L isLeft, MoveState_T isTop, int ll, int tt)
        {
            switch (isLeft)
            {
            case MoveState_L.left:
                for (int i = 0; i < ll; i++)
                {
                    SetTileXPos(x, y, row_L - 1, isLeft);
                }
                break;

            case MoveState_L.right:
                for (int i = 0; i < ll; i++)
                {
                    SetTileXPos(x, y, row_R + 1, isLeft);
                }
                break;

            case MoveState_L.None:
                break;
            }
            switch (isTop)
            {
            case MoveState_T.buttom:
                for (int i = 0; i < tt; i++)
                {
                    SetTileYPos(x, y, col_B - 1, isTop);
                }
                break;

            case MoveState_T.top:
                for (int i = 0; i < tt; i++)
                {
                    SetTileYPos(x, y, col_T + 1, isTop);
                }
                break;

            case MoveState_T.None:
                break;
            }
        }
예제 #3
0
        void SetTileXPos(int x, int y, int i, MoveState_L state)
        {
            int   xV    = 0;
            int   yV    = 0;
            int   rem   = 0;
            int   div   = 0;
            float xPos  = 0;
            float yPos  = 0;
            float hight = 0;

            xV  = x + i;
            rem = xV % mul;
            div = xV / mul;
            float rectX = 0;

            if (state == MoveState_L.left)
            {
                if (xV == levelOffect[level].indexR + mul * div)
                {
                    xPos = (size / 2 - levelOffect[level].widthL) + (size / 2 - levelOffect[level].widthR) + size;
                }
                else if (xV == levelOffect[level].indexL + mul * div - 1)
                {
                    rectX = size - levelOffect[level].widthR;
                    xPos  = (size / 2 - levelOffect[level].widthL) + (size / 2 - levelOffect[level].widthR) + size;
                }
                else if (xV == levelOffect[level].indexL + mul * div)
                {
                    rectX = size - levelOffect[level].widthL;
                }
                centerX--;
            }
            else if (state == MoveState_L.right)
            {
                if (xV == levelOffect[level].indexL + mul * div)
                {
                    xPos = -((size / 2 - levelOffect[level].widthL) + (size / 2 - levelOffect[level].widthR) + size);
                }
                else if (xV == levelOffect[level].indexR + mul * div + 1)
                {
                    xPos  = -((size / 2 - levelOffect[level].widthL) + (size / 2 - levelOffect[level].widthR) + size);
                    rectX = size - levelOffect[level].widthL;
                }
                else if (xV == levelOffect[level].indexR + mul * div)
                {
                    rectX = size - levelOffect[level].widthR;
                }
                centerX++;
            }
            if (xV < levelOffect[level].indexL)
            {
                if (rem < levelOffect[level].indexL)
                {
                    xV = rem + mul;
                }
                else
                {
                    xV = rem;
                }
            }
            else if (xV > levelOffect[level].indexR)
            {
                if (rem > levelOffect[level].indexR)
                {
                    xV = rem - mul;
                }
                else
                {
                    xV = rem;
                }
            }
            RawImage img = null;

            for (int j = col_B; j <= col_T; j++)
            {
                yV    = y + j;
                hight = size * j;
                if (state == MoveState_L.left)
                {
                    img = container.Find(row_R + "_" + j).GetComponent <RawImage>();
                    img.rectTransform.anchoredPosition = new Vector2(-size, hight) + new Vector2(xPos, yPos) + lastVect_L;
                }
                else if (state == MoveState_L.right)
                {
                    img = container.Find(row_L + "_" + j).GetComponent <RawImage>();
                    img.rectTransform.anchoredPosition = new Vector2(size, hight) + new Vector2(xPos, yPos) + lastVect_R;
                }
                img.name    = i + "_" + j;
                img.texture = null;
                if (!texture_rawDic.ContainsKey(img.transform.GetChild(0).name))
                {
                    texture_rawDic.Add(img.transform.GetChild(0).name, i + "_" + j);
                }
                else
                {
                    rawDic.Remove(texture_rawDic[img.transform.GetChild(0).name]);
                }
                rawDic.Add(i + "_" + j, new RawImageV(img, "http://online1.map.bdimg.com/onlinelabel/?qt=tile" + $"&x={xV}&y={yV}&z={level}"));
            }
            if (state == MoveState_L.left)
            {
                lastVect_L = new Vector2(img.rectTransform.anchoredPosition.x, 0);
                row_L--;
                row_R--;
                lastVect_R = new Vector2(container.Find(row_R + "_" + col_B).GetComponent <RectTransform>().anchoredPosition.x, 0);
                if (lastVect_L.x + pposX + rectX - size / 2 - rect.x > 0)
                {
                    SetTileXPos(x, y, row_L - 1, state);
                }
            }
            else if (state == MoveState_L.right)
            {
                lastVect_R = new Vector2(img.rectTransform.anchoredPosition.x, 0);
                row_R++;
                row_L++;
                lastVect_L = new Vector2(container.Find(row_L + "_" + col_B).GetComponent <RectTransform>().anchoredPosition.x, 0);
                if (lastVect_R.x + pposX - rectX + size / 2 < rect.width)
                {
                    SetTileXPos(x, y, row_R + 1, state);
                }
            }
            latLngPoint = BDMapTool.Tile2LngLat(centerX, centerY, level);
            lon         = (float)latLngPoint.Lng;
            lat         = (float)latLngPoint.Lat;
        }
예제 #4
0
        //移动地图后更新瓦片
        void UpdateTileOffectOfMove(Vector2 offect)
        {
            if (rawDic.Count > 0)
            {
                rawDic.Clear();
            }
            if (texture_rawDic.Count > 0)
            {
                texture_rawDic.Clear();
            }
            int   tt   = 0;
            float temp = 0;

            pposX = container.anchoredPosition.x;
            pposY = container.anchoredPosition.y;
            if (offect.x > 0)
            {
                temp = lastVect_L.x + pposX - size / 2 - rect.x;
                if (temp > 0)
                {
                    mStateL = MoveState_L.left;
                    SetTileXPos(x, y, row_L - 1, mStateL);
                }
                else
                {
                    mStateL = MoveState_L.None;
                }
            }
            else if (offect.x < 0)
            {
                if (lastVect_R.x + pposX + size / 2 < rect.width)
                {
                    mStateL = MoveState_L.right;
                    SetTileXPos(x, y, row_R + 1, mStateL);
                }
                else
                {
                    mStateL = MoveState_L.None;
                }
            }

            if (offect.y > 0)
            {
                if (lastVect_B.y + pposY - size / 2 > rect.y)
                {
                    mStateT = MoveState_T.buttom;
                    tt      = SetOffectNumber(lastVect_B.y + pposY - size / 2 - rect.y);
                }
                else
                {
                    mStateT = MoveState_T.None;
                }
            }
            else if (offect.y < 0)
            {
                if (lastVect_T.y + pposY + size / 2 < rect.height)
                {
                    mStateT = MoveState_T.top;
                    tt      = SetOffectNumber(lastVect_T.y + pposY + size / 2 - rect.height);
                }
                else
                {
                    mStateT = MoveState_T.None;
                }
            }
            UpdateTile(MoveState_L.None, mStateT, 0, tt);
            foreach (string ss in rawDic.Keys)
            {
                StartCoroutine(GetHttpTexture(rawDic[ss].raw, rawDic[ss].url));
            }
        }