using Adam; using Cysharp.Threading.Tasks; using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class DataController : MonoSingleton { private CityInfo[] cityInfos; [HideInInspector] public List> loadingAreaDataTasks = new List>(); [HideInInspector] public List> loadingScreenTopStatisticsTasks = new List>(); /// /// 省级视角下得区县信息 /// private AreaStationData areaStationData = new AreaStationData(); /// /// 弹出框信息 /// private AreaData[] areaDatasTasksReturnValue; /// /// 市级视角中得区县信息 /// private AreaStationData[] areaStationDatasTasksReturnValue; /// /// 区县站点信息 /// private List screenTopStatisticss = new List(); /// /// 企业信息 /// public AreaCompanyInformationData companyInformationData = new AreaCompanyInformationData(); private Dictionary urlDic = new Dictionary(); public GameObject companyPoint; public GameObject btns; private void Awake() { var serverConfig = new System.Uri(Path.Combine(Application.streamingAssetsPath + @"/Config", "WebAddress.json")); GetText(serverConfig.ToString(), (temp) => { if (!String.IsNullOrWhiteSpace(temp)) { urlDic = JsonConvert.DeserializeObject>(temp); } else { Debug.Log("加载配置文件错误"); } }); } public void GetText(string url, Action actionResult) { StartCoroutine(FileUtil.GetTextAsyn(url, actionResult)); } private void Start() { #if UNITY_WEBGL && !UNITY_EDITOR btns.SetActive(false); #endif Bootstrap.Instance.webAdapter.onStation.AddListener(SwitchStation); Bootstrap.Instance.webAdapter.onStartRequest.AddListener(OnInit); } public void TEstStation(int index) { SwitchStation(index); } public void OnTEstBtn() { OnInit(); } public async void GetAllCompanyInfo() { companyInformationData = await GetAreaCompanyInformationData("37"); for (int i = 0; i < companyInformationData.data.Count; i++) { Coordinate coords = new Coordinate(); coords.lat = companyInformationData.data[i].latitude; coords.lon = companyInformationData.data[i].longitude; coords.alt = 1986; GameObject obj = Instantiate(companyPoint); obj.transform.position = coords.AsVector3(); //Vector3 temp = WebApiExtension.GPSToVector3(companyInformationData.data[i].latitude, companyInformationData.data[i].longitude); } } public double originLatitude = 37.7749; public double originLongitude = -122.4194; public double originAltitude = 0.0; // 转换后的Unity位置 public Vector3 GPSToUnityWorld(double latitude, double longitude, double altitude) { // 地球半径(单位:米) double radius = 6378137; // 计算相对位置 double deltaLat = latitude - originLatitude; double deltaLon = longitude - originLongitude; // 经度差转换为米 double deltaX = deltaLon * Mathf.Deg2Rad * radius * Mathf.Cos((float)(originLatitude * Mathf.Deg2Rad)); // 纬度差转换为米 double deltaZ = deltaLat * Mathf.Deg2Rad * radius; // 高度差 double deltaY = altitude - originAltitude; // 返回转换后的Unity位置 return new Vector3((float)deltaX, (float)deltaY, (float)deltaZ); } private async void OnInit() { await UniTask.Delay(1); GetAllCompanyInfo(); areaStationData = await GetProvincialLevelStationData("37"); cityInfos = transform.GetComponentsInChildren(); for (int i = 0; i < cityInfos.Length; i++) { cityInfos[i].Init(); } areaDatasTasksReturnValue = await UniTask.WhenAll(loadingAreaDataTasks); for (int i = 0; i < cityInfos.Length; i++) { string distCodeTemp = cityInfos[i].distCode; cityInfos[i].SetAreaData(GetAreaDateByDistCode(distCodeTemp)); } areaStationDatasTasksReturnValue = await UniTask.WhenAll(loadingScreenTopStatisticsTasks); for (int i = 0; i < areaStationDatasTasksReturnValue.Length; i++) { List tempDI = areaStationDatasTasksReturnValue[i].data; if (tempDI != null && tempDI.Count > 0) { for (int j = 0; j < tempDI.Count; j++) { screenTopStatisticss.Add(tempDI[j].screenTopStatistics); } } } for (int i = 0; i < cityInfos.Length; i++) { string distCodeTemp = cityInfos[i].distCode; if (distCodeTemp.Length == 6) cityInfos[i].SetStationData(GetAreLevelStationDataByDistCode(distCodeTemp)); } } public void SwitchStation(int stationIndex) { for (int i = 0; i < cityInfos.Length; i++) { cityInfos[i].SetScreenTopStatistices(stationIndex); } } /// /// 获取所有企业信息 /// /// /// /// public async UniTask GetAreaCompanyInformationData(string _distCode) { string url = urlDic["地图企业用户资源"]; return await AsyncWebReq.Get(url + _distCode, Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token); } /// /// 通过市级视角去获取区县得资源站点数据 /// /// /// public ScreenTopStatistics GetAreLevelStationDataByDistCode(string _distCode) { for (int i = 0; i < screenTopStatisticss.Count; i++) { if (screenTopStatisticss[i] != null && screenTopStatisticss[i].distCode == _distCode) { return screenTopStatisticss[i]; } } return null; } /// /// 针对市级区域 /// /// /// public ScreenTopStatistics GetProvincialLevelStationDataByDistCode(string _distCode) { for (int i = 0; i < areaStationData.data.Count; i++) { if (areaStationData.data[i].distCode == _distCode) { return areaStationData.data[i].screenTopStatistics; } } return null; } /// /// 获取每个区域的聚合信息 /// /// /// public async UniTask GetAreaDataByDistCode(string _distCode) { await UniTask.Delay(2); string url = urlDic["地图弹出框"]; AreaData areaData = await AsyncWebReq.Get($"{url}{_distCode}", Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token); if (!bool.Parse(areaData.success)) return null; return areaData; } public AreaData GetAreaDateByDistCode(string _distCode) { for (int i = 0; i < areaDatasTasksReturnValue.Length; i++) { if (areaDatasTasksReturnValue[i].data.distCode == _distCode) { return areaDatasTasksReturnValue[i]; } } return null; } /// /// 获取地图汇总 /// /// /// public async UniTask GetProvincialLevelStationData(string _distCode) { string url = urlDic["地图信息汇总"]; AreaStationData areaStationData = await AsyncWebReq.Get(url + _distCode, Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token); return areaStationData; } }