//缩放地图后更新瓦片 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); }
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; } }
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; }
//移动地图后更新瓦片 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)); } }