Beispiel #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);
        }
Beispiel #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;
            }
        }
Beispiel #3
0
        void SetTileYPos(int x, int y, int i, MoveState_T state)
        {
            int   xV    = 0;
            int   yV    = 0;
            float hight = 0;
            int   rem   = 0;
            int   div   = 0;
            float xPos  = 0;
            float yPos  = 0;

            yV = y + i;
            if (yV >= levelOffect[level].indexB && yV <= levelOffect[level].indexT)
            {
                RawImage img = null;
                for (int j = row_L; j <= row_R; j++)
                {
                    xV  = x + j;
                    rem = xV % mul;
                    div = Mathf.Abs(xV / mul);
                    if (xV < levelOffect[level].indexL)
                    {
                        if (rem < levelOffect[level].indexL)
                        {
                            xPos = (2 * size - levelOffect[level].widthL - levelOffect[level].widthR) * (div + 1);
                            xV   = rem + mul;
                        }
                        else
                        {
                            xPos = (2 * size - levelOffect[level].widthL - levelOffect[level].widthR) * div;
                            xV   = rem;
                        }
                    }
                    else if (xV > levelOffect[level].indexR)
                    {
                        if (rem > levelOffect[level].indexR)
                        {
                            xPos = (levelOffect[level].widthL + levelOffect[level].widthR - 2 * size) * (div + 1);
                            xV   = rem - mul;
                        }
                        else
                        {
                            xPos = (levelOffect[level].widthL + levelOffect[level].widthR - 2 * size) * div;
                            xV   = rem;
                        }
                    }
                    else
                    {
                        xPos = 0;
                        yPos = 0;
                    }
                    hight = size * j;
                    if (state == MoveState_T.buttom)
                    {
                        img = container.Find(j + "_" + col_T).GetComponent <RawImage>();
                        img.rectTransform.anchoredPosition = new Vector2(hight, -size) + new Vector2(xPos, yPos) + lastVect_B;
                    }
                    else if (state == MoveState_T.top)
                    {
                        img = container.Find(j + "_" + col_B).GetComponent <RawImage>();
                        img.rectTransform.anchoredPosition = new Vector2(hight, size) + new Vector2(xPos, yPos) + lastVect_T;
                    }
                    img.name    = j + "_" + i;
                    img.texture = null;
                    if (!texture_rawDic.ContainsKey(img.transform.GetChild(0).name))
                    {
                        texture_rawDic.Add(img.transform.GetChild(0).name, j + "_" + i);
                    }
                    else
                    {
                        rawDic.Remove(texture_rawDic[img.transform.GetChild(0).name]);
                    }
                    rawDic.Add(j + "_" + i, new RawImageV(img, "http://online1.map.bdimg.com/onlinelabel/?qt=tile" + $"&x={xV}&y={yV}&z={level}"));
                }
                if (state == MoveState_T.buttom)
                {
                    lastVect_B = new Vector2(0, img.rectTransform.anchoredPosition.y);
                    col_B--;
                    col_T--;
                    lastVect_T = new Vector2(0, container.Find(row_L + "_" + col_T).GetComponent <RectTransform>().anchoredPosition.y);
                    centerY--;
                }
                else if (state == MoveState_T.top)
                {
                    lastVect_T = new Vector2(0, img.rectTransform.anchoredPosition.y);
                    col_T++;
                    col_B++;
                    lastVect_B = new Vector2(0, container.Find(row_L + "_" + col_B).GetComponent <RectTransform>().anchoredPosition.y);
                    centerY++;
                }
            }
            else
            {
                Debug.Log("超出矩形限制范围");
            }
            latLngPoint = BDMapTool.Tile2LngLat(centerX, centerY, level);
            lon         = (float)latLngPoint.Lng;
            lat         = (float)latLngPoint.Lat;
        }
Beispiel #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));
            }
        }