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