动态海拔图,全路线小地图,骑行记录上传增加截图
This commit is contained in:
1 parent
65fc5b5c50
commit
725b510748
11 files changed
+4294
-4675
No files matched your search
+3935
-4554
File diff suppressed because it is too large.
Load diff
@@ -21,11 +21,13 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
GameObject character;
|
||||
[SerializeField]
|
||||
Animator characterAnimator;
|
||||
[SerializeField]
|
||||
AbstractMap map;
|
||||
//AbstractMap map;
|
||||
|
||||
#region 动画控制参数
|
||||
Vector3 nextPos;
|
||||
Vector3 prePos;
|
||||
Vector3 prePos = Vector3.zero;
|
||||
float timer = 1.0f;//计时器
|
||||
#endregion
|
||||
|
||||
@@ -104,11 +106,11 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
|
||||
void Update()
|
||||
{
|
||||
|
||||
Excute();
|
||||
}
|
||||
private void FixedUpdate()
|
||||
{
|
||||
Excute();
|
||||
|
||||
}
|
||||
#region 骑行逻辑
|
||||
//初始化骑行数据
|
||||
@@ -118,7 +120,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
characterAnimator = GetComponentInChildren<Animator>();
|
||||
mainController = transform.parent.GetComponent<CyclingController>();
|
||||
map = FindObjectOfType<AbstractMap>();
|
||||
//map = FindObjectOfType<AbstractMap>();
|
||||
mapData = mainController.GetMapData();//获取路书信息
|
||||
nextlatlong = new Vector2d(mapData.List[0].Point[0], mapData.List[0].Point[1]);//初始化人物位置 TODO加上之前骑行距离
|
||||
cyclingExcutor = mainController.cyclingController;
|
||||
@@ -126,6 +128,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
|
||||
protected virtual void Excute()
|
||||
{
|
||||
//CamControl();
|
||||
timer -= Time.deltaTime;
|
||||
if (timer <= 0)//定时器 一秒执行一次
|
||||
{
|
||||
@@ -147,7 +150,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
//数据处理
|
||||
nextlatlong = Along(totalDistance);//下一个坐标
|
||||
nextPos = map.GeoToWorldPosition(nextlatlong);//下一个点
|
||||
nextPos.y += 0.3f;//提高y轴让人物站在地图上面
|
||||
nextPos.y += 0.5f;//提高y轴让人物站在地图上面
|
||||
prePos = transform.localPosition;//当前点
|
||||
thisRotation = transform.localRotation;
|
||||
//动画控制
|
||||
@@ -181,11 +184,42 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
//当前用户调用来上传骑行记录
|
||||
protected virtual void Upload()
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 工具类
|
||||
|
||||
protected string CaptureCamera(Camera camera, Rect rect)
|
||||
{
|
||||
// 创建一个RenderTexture对象
|
||||
RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
|
||||
// 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机
|
||||
camera.targetTexture = rt;
|
||||
camera.Render();
|
||||
//ps: --- 如果这样加上第二个相机,可以实现只截图某几个指定的相机一起看到的图像。
|
||||
//ps: camera2.targetTexture = rt;
|
||||
//ps: camera2.Render();
|
||||
//ps: -------------------------------------------------------------------
|
||||
|
||||
// 激活这个rt, 并从中中读取像素。
|
||||
RenderTexture.active = rt;
|
||||
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
|
||||
screenShot.ReadPixels(rect, 0, 0);// 注:这个时候,它是从RenderTexture.active中读取像素
|
||||
screenShot.Apply();
|
||||
|
||||
// 重置相关参数,以使用camera继续在屏幕上显示
|
||||
camera.targetTexture = null;
|
||||
//ps: camera2.targetTexture = null;
|
||||
RenderTexture.active = null; // JC: added to avoid errors
|
||||
GameObject.Destroy(rt);
|
||||
// 最后将这些纹理数据,成一个图片文件
|
||||
byte[] bytes = screenShot.EncodeToJPG();
|
||||
string filename = Application.dataPath + "/"+Guid.NewGuid().ToString() +".jpg";
|
||||
System.IO.File.WriteAllBytes(filename, bytes);
|
||||
//Debug.Log(string.Format("截屏了一张照片: {0}", filename));
|
||||
return filename;
|
||||
}
|
||||
|
||||
public int CurrentIndex;
|
||||
//当前距离所在的海拔/坡度/距离 下一个点的坡度以及剩余距离
|
||||
void ComputeNextSlope()
|
||||
@@ -244,7 +278,15 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
Vector3 deltaPos = Vector3.zero;
|
||||
Vector3 previousPos = Vector3.zero;
|
||||
void CamControl()
|
||||
{
|
||||
deltaPos = transform.position - previousPos;
|
||||
deltaPos.y = 0;
|
||||
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, Camera.main.transform.position + deltaPos, Time.time);
|
||||
previousPos = transform.position;
|
||||
}
|
||||
//人物移动控制
|
||||
IEnumerator MoveTo()
|
||||
{
|
||||
@@ -255,8 +297,13 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
t += Time.deltaTime;
|
||||
Vector3 v = Vector3.Lerp(prePos, nextPos, t);
|
||||
Vector3 nextPosition = new Vector3((float)Math.Round(v.x, 2), (float)Math.Round(v.y, 2), (float)Math.Round(v.z, 2));
|
||||
if (!nextPosition.Equals(transform.localPosition))
|
||||
{
|
||||
transform.localPosition = nextPosition;
|
||||
//Camera.main.transform.localPosition = nextPosition;
|
||||
}
|
||||
|
||||
transform.localPosition = new Vector3((float)Math.Round(v.x,4), (float)Math.Round(v.y, 4), (float)Math.Round(v.z, 4));
|
||||
//控制海拔图的位置
|
||||
yield return null;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,6 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
public AbstractMap map;
|
||||
public GameObject player;
|
||||
public GameObject UIObject;
|
||||
public GameObject target;
|
||||
|
||||
|
||||
#region 参数
|
||||
private MapDataModel mapData;//当前路书数据
|
||||
@@ -93,7 +91,7 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
// break;
|
||||
}
|
||||
|
||||
if (result != null && mapRoute != null)
|
||||
if (result != null )//&& mapRoute != null)
|
||||
{
|
||||
mapData = result;
|
||||
coordiantes = result.List[0].Point;//TODO计算当前用户所处的位置
|
||||
@@ -115,11 +113,10 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
|
||||
private void Update()
|
||||
{
|
||||
//发送UDP
|
||||
target.transform.position = player.transform.position;
|
||||
target.transform.rotation = player.transform.rotation; //player.transform.rotation.y;
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region 数据处理
|
||||
/// <summary>
|
||||
/// 当前骑行数据的记录器
|
||||
@@ -154,51 +151,40 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
var jsonData = mapApi.GetData(RouteId);
|
||||
return new Route(jsonData, routeInstance.data);
|
||||
}
|
||||
IEnumerator requset() {
|
||||
string url = @"http://192.168.0.97:5081/Map/GetData?routeid=5492&m=20";
|
||||
UnityWebRequest request = UnityWebRequest.Get(url);
|
||||
yield return request.SendWebRequest();
|
||||
string json = request.downloadHandler.text;
|
||||
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<MapDataModel>(json);
|
||||
if (result != null && result.List.Count > 0)
|
||||
{
|
||||
mapData = result;
|
||||
coordiantes = result.List[0].Point;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.Exception("fail to get route data");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取模拟的骑行记录
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public MapDataModel GetTestData()
|
||||
{
|
||||
//string json = "{'Type':'LineString','TotalDistance':19.17906,'List':[{'Point':[26.092100000000002,119.33686000000002],'Elevation':7.6198},{'Point':[26.09211,119.33749000000002],'Elevation':7.5859},{'Point':[26.092170000000003,119.33840000000001],'Elevation':7.421},{'Point':[26.092260000000003,119.33921000000001],'Elevation':7.3133},{'Point':[26.092270002098761,119.33999000005943],'Elevation':7.2394},{'Point':[26.092280000000002,119.34077],'Elevation':7.2701},{'Point':[26.092240000956789,119.34129500009136],'Elevation':7.3416},{'Point':[26.092200000000002,119.34182000000001],'Elevation':7.4177},{'Point':[26.092083338752424,119.34270666844074],'Elevation':7.5033},{'Point':[26.09196667208499,119.34359333511317],'Elevation':7.2596},{'Point':[26.09185,119.34448],'Elevation':6.8727},{'Point':[26.091680000000004,119.34505000000001],'Elevation':6.4546},{'Point':[26.091536672044878,119.34593333550309],'Elevation':6.0312},{'Point':[26.091393338710645,119.34681666884185],'Elevation':5.751},{'Point':[26.091250000000002,119.3477],'Elevation':5.6373},{'Point':[26.091230000000003,119.34794000000001],'Elevation':5.6052},{'Point':[26.091225001411136,119.3485800001182],'Elevation':5.5997},{'Point':[26.091220000000003,119.34922000000002],'Elevation':5.6907},{'Point':[26.091330000000003,119.34997000000001],'Elevation':6.0231},{'Point':[26.091440000000002,119.35021],'Elevation':6.4916},{'Point':[26.09157,119.35095000000001],'Elevation':7.0092},{'Point':[26.091600000000003,119.3516],'Elevation':7.3641},{'Point':[26.091767507390937,119.35244499640774],'Elevation':7.4909},{'Point':[26.091935009859512,119.353289995235],'Elevation':6.9736},{'Point':[26.092102507405667,119.35413499648182],'Elevation':6.7797},{'Point':[26.092270000000003,119.35498000000001],'Elevation':6.5711},{'Point':[26.092405001867032,119.35571999903352],'Elevation':6.4206},{'Point':[26.092540000000003,119.35646000000001],'Elevation':6.3653},{'Point':[26.09269,119.35732000000002],'Elevation':7.251},{'Point':[26.092710000000004,119.35761000000001],'Elevation':8.2263},{'Point':[26.092703339253426,119.35853666675888],'Elevation':9.8464},{'Point':[26.092696672586847,119.35946333341218],'Elevation':11.8545},{'Point':[26.09269,119.36039000000001],'Elevation':13.6159},{'Point':[26.092665001414368,119.36103000007358],'Elevation':15.1102},{'Point':[26.092640000000003,119.36167],'Elevation':16.3984},{'Point':[26.0925,119.36225],'Elevation':17.1179},{'Point':[26.092270000000003,119.36289000000001],'Elevation':17.3805},{'Point':[26.092200000000002,119.36334000000001],'Elevation':17.3022},{'Point':[26.092180000000003,119.36363000000001],'Elevation':17.2282},{'Point':[26.092190000000002,119.36396],'Elevation':17.2224},{'Point':[26.092290000000002,119.36435000000002],'Elevation':17.1729},{'Point':[26.092100000000002,119.36453000000002],'Elevation':17.1065},{'Point':[26.092000000000002,119.36473000000001],'Elevation':17.0503},{'Point':[26.091910000000002,119.36502000000002],'Elevation':17.1392},{'Point':[26.09193,119.36525],'Elevation':17.2636},{'Point':[26.092150000000004,119.36569000000001],'Elevation':17.4486},{'Point':[26.09233,119.36581000000001],'Elevation':17.7034},{'Point':[26.092540000000003,119.36588],'Elevation':18.1077},{'Point':[26.092750000000002,119.36589000000001],'Elevation':18.5083},{'Point':[26.092950000000002,119.36582000000001],'Elevation':18.892},{'Point':[26.093110000000003,119.36572000000001],'Elevation':19.2643},{'Point':[26.09335,119.36544],'Elevation':19.6256},{'Point':[26.094033333311039,119.36542333352864],'Elevation':20.1707},{'Point':[26.094716666620165,119.36540666686258],'Elevation':21.2487},{'Point':[26.0954,119.36539],'Elevation':22.396},{'Point':[26.09605,119.36548],'Elevation':23.9715},{'Point':[26.09615,119.36567000000001],'Elevation':25.3392},{'Point':[26.096753333417059,119.36562333380944],'Elevation':26.626},{'Point':[26.097356666819095,119.36557666713746],'Elevation':28.1709},{'Point':[26.09796,119.36553],'Elevation':30.077},{'Point':[26.098260000000003,119.36556000000002],'Elevation':32.1094},{'Point':[26.09888000013564,119.36572999910875],'Elevation':34.3101},{'Point':[26.099500000000003,119.36590000000001],'Elevation':36.7362},{'Point':[26.099970000000003,119.36599000000001],'Elevation':39.7763},{'Point':[26.100720000000003,119.36591000000001],'Elevation':43.1691},{'Point':[26.101160000000004,119.36591000000001],'Elevation':46.6581},{'Point':[26.10181,119.36598000000001],'Elevation':50.4232},{'Point':[26.10208,119.36621000000001],'Elevation':53.9898},{'Point':[26.102210000000003,119.36674000000001],'Elevation':57.5845},{'Point':[26.101960000000002,119.36725000000001],'Elevation':61.2459},{'Point':[26.101530000000004,119.36721000000001],'Elevation':64.7154},{'Point':[26.100900000000003,119.36697000000001],'Elevation':68.1881},{'Point':[26.100415000136522,119.36697500001934],'Elevation':71.7923},{'Point':[26.09993,119.36698000000001],'Elevation':75.4172},{'Point':[26.099330000000002,119.36702000000001],'Elevation':79.066},{'PoLine truncated
|
||||
string json = "{'Type':'LineString','TotalDistance':19.17906,'List':[{'Point':[26.092100000000002,119.33686000000002],'Elevation':7.6198},{'Point':[26.09211,119.33749000000002],'Elevation':7.5859},{'Point':[26.092170000000003,119.33840000000001],'Elevation':7.421},{'Point':[26.092260000000003,119.33921000000001],'Elevation':7.3133},{'Point':[26.092270002098761,119.33999000005943],'Elevation':7.2394},{'Point':[26.092280000000002,119.34077],'Elevation':7.2701},{'Point':[26.092240000956789,119.34129500009136],'Elevation':7.3416},{'Point':[26.092200000000002,119.34182000000001],'Elevation':7.4177},{'Point':[26.092083338752424,119.34270666844074],'Elevation':7.5033},{'Point':[26.09196667208499,119.34359333511317],'Elevation':7.2596},{'Point':[26.09185,119.34448],'Elevation':6.8727},{'Point':[26.091680000000004,119.34505000000001],'Elevation':6.4546},{'Point':[26.091536672044878,119.34593333550309],'Elevation':6.0312},{'Point':[26.091393338710645,119.34681666884185],'Elevation':5.751},{'Point':[26.091250000000002,119.3477],'Elevation':5.6373},{'Point':[26.091230000000003,119.34794000000001],'Elevation':5.6052},{'Point':[26.091225001411136,119.3485800001182],'Elevation':5.5997},{'Point':[26.091220000000003,119.34922000000002],'Elevation':5.6907},{'Point':[26.091330000000003,119.34997000000001],'Elevation':6.0231},{'Point':[26.091440000000002,119.35021],'Elevation':6.4916},{'Point':[26.09157,119.35095000000001],'Elevation':7.0092},{'Point':[26.091600000000003,119.3516],'Elevation':7.3641},{'Point':[26.091767507390937,119.35244499640774],'Elevation':7.4909},{'Point':[26.091935009859512,119.353289995235],'Elevation':6.9736},{'Point':[26.092102507405667,119.35413499648182],'Elevation':6.7797},{'Point':[26.092270000000003,119.35498000000001],'Elevation':6.5711},{'Point':[26.092405001867032,119.35571999903352],'Elevation':6.4206},{'Point':[26.092540000000003,119.35646000000001],'Elevation':6.3653},{'Point':[26.09269,119.35732000000002],'Elevation':7.251},{'Point':[26.092710000000004,119.35761000000001],'Elevation':8.2263},{'Point':[26.092703339253426,119.35853666675888],'Elevation':9.8464},{'Point':[26.092696672586847,119.35946333341218],'Elevation':11.8545},{'Point':[26.09269,119.36039000000001],'Elevation':13.6159},{'Point':[26.092665001414368,119.36103000007358],'Elevation':15.1102},{'Point':[26.092640000000003,119.36167],'Elevation':16.3984},{'Point':[26.0925,119.36225],'Elevation':17.1179},{'Point':[26.092270000000003,119.36289000000001],'Elevation':17.3805},{'Point':[26.092200000000002,119.36334000000001],'Elevation':17.3022},{'Point':[26.092180000000003,119.36363000000001],'Elevation':17.2282},{'Point':[26.092190000000002,119.36396],'Elevation':17.2224},{'Point':[26.092290000000002,119.36435000000002],'Elevation':17.1729},{'Point':[26.092100000000002,119.36453000000002],'Elevation':17.1065},{'Point':[26.092000000000002,119.36473000000001],'Elevation':17.0503},{'Point':[26.091910000000002,119.36502000000002],'Elevation':17.1392},{'Point':[26.09193,119.36525],'Elevation':17.2636},{'Point':[26.092150000000004,119.36569000000001],'Elevation':17.4486},{'Point':[26.09233,119.36581000000001],'Elevation':17.7034},{'Point':[26.092540000000003,119.36588],'Elevation':18.1077},{'Point':[26.092750000000002,119.36589000000001],'Elevation':18.5083},{'Point':[26.092950000000002,119.36582000000001],'Elevation':18.892},{'Point':[26.093110000000003,119.36572000000001],'Elevation':19.2643},{'Point':[26.09335,119.36544],'Elevation':19.6256},{'Point':[26.094033333311039,119.36542333352864],'Elevation':20.1707},{'Point':[26.094716666620165,119.36540666686258],'Elevation':21.2487},{'Point':[26.0954,119.36539],'Elevation':22.396},{'Point':[26.09605,119.36548],'Elevation':23.9715},{'Point':[26.09615,119.36567000000001],'Elevation':25.3392},{'Point':[26.096753333417059,119.36562333380944],'Elevation':26.626},{'Point':[26.097356666819095,119.36557666713746],'Elevation':28.1709},{'Point':[26.09796,119.36553],'Elevation':30.077},{'Point':[26.098260000000003,119.36556000000002],'Elevation':32.1094},{'Point':[26.09888000013564,119.36572999910875],'Elevation':34.3101},{'Point':[26.099500000000003,119.36590000000001],'Elevation':36.7362},{'Point':[26.099970000000003,119.36599000000001],'Elevation':39.7763},{'Point':[26.100720000000003,119.36591000000001],'Elevation':43.1691},{'Point':[26.101160000000004,119.36591000000001],'Elevation':46.6581},{'Point':[26.10181,119.36598000000001],'Elevation':50.4232},{'Point':[26.10208,119.36621000000001],'Elevation':53.9898},{'Point':[26.102210000000003,119.36674000000001],'Elevation':57.5845},{'Point':[26.101960000000002,119.36725000000001],'Elevation':61.2459},{'Point':[26.101530000000004,119.36721000000001],'Elevation':64.7154},{'Point':[26.100900000000003,119.36697000000001],'Elevation':68.1881},{'Point':[26.100415000136522,119.36697500001934],'Elevation':71.7923},{'Point':[26.09993,119.36698000000001],'Elevation':75.4172},{'Point':[26.099330000000002,119.36702000000001],'Elevation':79.066},{'Poin
Line truncated
|
||||
//string json = "{'Type':'LineString','TotalDistance':22.201689999999992,'List':[{'Point':[32.060793,118.808228],'Elevation':14.5598},{'Point':[32.061604,118.808548],'Elevation':14.3954},{'Point':[32.063085,118.809059],'Elevation':14.0074},{'Point':[32.064306,118.80951],'Elevation':14.2812},{'Point':[32.065217,118.809841],'Elevation':14.701},{'Point':[32.066188,118.810121],'Elevation':15.2048},{'Point':[32.066558,118.810492],'Elevation':15.4843},{'Point':[32.067079,118.810983],'Elevation':15.5637},{'Point':[32.06756,118.811344],'Elevation':15.507},{'Point':[32.067931,118.811574],'Elevation':15.469},{'Point':[32.068451,118.811845],'Elevation':15.5912},{'Point':[32.068852,118.812085],'Elevation':15.6546},{'Point':[32.069433,118.812766],'Elevation':15.8589},{'Point':[32.070115,118.813588],'Elevation':16.2968},{'Point':[32.070646,118.814229],'Elevation':16.9136},{'Point':[32.071368,118.815101],'Elevation':17.4104},{'Point':[32.07228,118.816213],'Elevation':17.7138},{'Point':[32.072561,118.816554],'Elevation':17.9888},{'Point':[32.072821,118.816885],'Elevation':18.502},{'Point':[32.073483,118.817706],'Elevation':19.5909},{'Point':[32.073844,118.818147],'Elevation':20.596},{'Point':[32.074305,118.818729],'Elevation':21.2868},{'Point':[32.074786,118.81927],'Elevation':21.6856},{'Point':[32.074987,118.81951],'Elevation':22.0494},{'Point':[32.075448,118.819991],'Elevation':22.3838},{'Point':[32.075909,118.820492],'Elevation':22.6512},{'Point':[32.076069,118.820662],'Elevation':22.8796},{'Point':[32.07637,118.821003],'Elevation':23.0857},{'Point':[32.07659,118.821133],'Elevation':23.2517},{'Point':[32.076831,118.821384],'Elevation':23.532},{'Point':[32.077212,118.822025],'Elevation':24.0643},{'Point':[32.077494,118.822867],'Elevation':24.8455},{'Point':[32.077645,118.823438],'Elevation':25.8294},{'Point':[32.077756,118.823879],'Elevation':26.909},{'Point':[32.077896,118.82422],'Elevation':28.0635},{'Point':[32.078037,118.82448],'Elevation':29.1886},{'Point':[32.078267,118.824781],'Elevation':30.2586},{'Point':[32.078418,118.824941],'Elevation':31.1856},{'Point':[32.078728,118.825232],'Elevation':31.9239},{'Point':[32.078969,118.825332],'Elevation':32.549},{'Point':[32.079169,118.825322],'Elevation':33.0782},{'Point':[32.079498,118.825202],'Elevation':33.544},{'Point':[32.079958,118.825021],'Elevation':33.9813},{'Point':[32.080328,118.824941],'Elevation':34.3312},{'Point':[32.081018,118.824861],'Elevation':34.4341},{'Point':[32.081618,118.824811],'Elevation':34.2067},{'Point':[32.081948,118.824811],'Elevation':33.8412},{'Point':[32.082178,118.824841],'Elevation':33.428},{'Point':[32.082369,118.824911],'Elevation':33.0365},{'Point':[32.082579,118.825051],'Elevation':32.6545},{'Point':[32.082769,118.825191],'Elevation':32.2689},{'Point':[32.08304,118.825442],'Elevation':31.9885},{'Point':[32.08319,118.825652],'Elevation':31.8223},{'Point':[32.083331,118.825893],'Elevation':31.7163},{'Point':[32.083742,118.826624],'Elevation':31.7409},{'Point':[32.083973,118.826975],'Elevation':31.8967},{'Point':[32.084113,118.827135],'Elevation':32.0943},{'Point':[32.084354,118.827376],'Elevation':32.289},{'Point':[32.084504,118.827496],'Elevation':32.4791},{'Point':[32.084884,118.827727],'Elevation':32.7283},{'Point':[32.085155,118.827887],'Elevation':32.9179},{'Point':[32.085435,118.828047],'Elevation':32.9931},{'Point':[32.085675,118.828198],'Elevation':32.9919},{'Point':[32.085976,118.828348],'Elevation':32.8424},{'Point':[32.086397,118.829079],'Elevation':32.7725},{'Point':[32.086608,118.82946],'Elevation':32.6947},{'Point':[32.086819,118.829821],'Elevation':32.5996},{'Point':[32.086969,118.830122],'Elevation':32.5681},{'Point':[32.08711,118.830472],'Elevation':32.4398},{'Point':[32.087201,118.830753],'Elevation':32.2517},{'Point':[32.087271,118.831033],'Elevation':32.042},{'Point':[32.087402,118.831615],'Elevation':31.912},{'Point':[32.087463,118.831905],'Elevation':31.9259},{'Point':[32.087503,118.832196],'Elevation':32.0906},{'Point':[32.087554,118.832547],'Elevation':32.2625},{'Point':[32.087584,118.832757],'Elevation':32.4019},{'Point':[32.087645,118.833007],'Elevation':32.4994},{'Point':[32.087725,118.833358],'Elevation':32.605},{'Point':[32.087846,118.833609],'Elevation':32.7142},{'Point':[32.088017,118.8344],'Elevation':32.8226},{'Point':[32.08833,118.835633],'Elevation':33.1344},{'Point':[32.08842,118.835994],'Elevation':33.5805},{'Point':[32.088511,118.836384],'Elevation':34.1777},{'Point':[32.088582,118.836615],'Elevation':34.8768},{'Point':[32.088762,118.837006],'Elevation':35.7894},{'Point':[32.089103,118.837386],'Elevation':36.8831},{'Point':[32.089364,118.837667],'Elevation':37.9825},{'Point':[32.090856,118.838889],'Elevation':38.9346},{'Point':[32.091077,118.8391],'Elevation':39.674},{'Point':[32.091227,118.83925],'Elevation':40.1489},{'Point':[32.091377,118.83944],'Elevation':40.3744},{'Point':[32.091628,118.839951],'Elevation':40.1874},{'Point':[32.091899,118.840653],'Elevation':39.8998},{'Point':[32.0920Line truncated
|
||||
string json = @"{'Type':'LineString','TotalDistance':3.4100999999999995,'List':[{'Point':[31.351249,119.021848],'Elevation':28.3692},{'Point':[31.35127,119.021529],'Elevation':28.4163},{'Point':[31.351322,119.020791],'Elevation':29.5811},{'Point':[31.351364,119.019914],'Elevation':31.2764},{'Point':[31.351458,119.018399],'Elevation':32.102},{'Point':[31.351501,119.017512],'Elevation':32.5486},{'Point':[31.351512,119.017203],'Elevation':33.0451},{'Point':[31.351522,119.016914],'Elevation':33.5963},{'Point':[31.351564,119.016386],'Elevation':34.58},{'Point':[31.351606,119.015788],'Elevation':36.0089},{'Point':[31.351626,119.015539],'Elevation':37.4491},{'Point':[31.351647,119.01529],'Elevation':38.8925},{'Point':[31.351187,119.01521],'Elevation':39.5386},{'Point':[31.350858,119.01514],'Elevation':39.7551},{'Point':[31.350438,119.015051],'Elevation':40.1219},{'Point':[31.350199,119.014891],'Elevation':40.7157},{'Point':[31.350019,119.014742],'Elevation':41.4673},{'Point':[31.34974,119.014622],'Elevation':42.0818},{'Point':[31.34951,119.014553],'Elevation':42.4744},{'Point':[31.349201,119.014363],'Elevation':42.707},{'Point':[31.349051,119.014164],'Elevation':42.9748},{'Point':[31.348563,119.013506],'Elevation':43.4829},{'Point':[31.348384,119.013287],'Elevation':43.7515},{'Point':[31.348095,119.013078],'Elevation':43.711},{'Point':[31.347905,119.012988],'Elevation':43.6298},{'Point':[31.347596,119.012789],'Elevation':43.5441},{'Point':[31.347416,119.012639],'Elevation':43.5661},{'Point':[31.347257,119.01249],'Elevation':43.7661},{'Point':[31.347017,119.012271],'Elevation':44.173},{'Point':[31.346778,119.012071],'Elevation':44.6846},{'Point':[31.346569,119.011932],'Elevation':45.0536},{'Point':[31.346349,119.011862],'Elevation':45.1835},{'Point':[31.346169,119.011822],'Elevation':45.1202},{'Point':[31.34597,119.011573],'Elevation':44.9227},{'Point':[31.345872,119.010926],'Elevation':44.769},{'Point':[31.345823,119.010517],'Elevation':44.825},{'Point':[31.345724,119.010198],'Elevation':45.0025},{'Point':[31.345595,119.009999],'Elevation':45.0965},{'Point':[31.345306,119.00966],'Elevation':44.9105},{'Point':[31.345056,119.009421],'Elevation':44.6363},{'Point':[31.344847,119.009281],'Elevation':44.3001},{'Point':[31.344627,119.009122],'Elevation':43.9679},{'Point':[31.344468,119.008983],'Elevation':43.7442},{'Point':[31.344199,119.008694],'Elevation':43.6926},{'Point':[31.34396,119.008345],'Elevation':43.9002},{'Point':[31.343711,119.007976],'Elevation':44.3907},{'Point':[31.343333,119.007488],'Elevation':45.4845},{'Point':[31.343173,119.007289],'Elevation':46.704},{'Point':[31.342834,119.007109],'Elevation':47.9561},{'Point':[31.342485,119.00698],'Elevation':48.9071},{'Point':[31.342285,119.00687],'Elevation':49.4839},{'Point':[31.342155,119.006721],'Elevation':49.8479},{'Point':[31.342026,119.006472],'Elevation':50.1356},{'Point':[31.342057,119.006253],'Elevation':50.7142},{'Point':[31.342257,119.006223],'Elevation':51.7425},{'Point':[31.342547,119.006332],'Elevation':53.1767},{'Point':[31.342737,119.006213],'Elevation':54.8684},{'Point':[31.342818,119.005894],'Elevation':56.8442},{'Point':[31.342909,119.005625],'Elevation':58.8701},{'Point':[31.342989,119.005415],'Elevation':60.9597},{'Point':[31.343199,119.005276],'Elevation':63.4359},{'Point':[31.34363,119.005166],'Elevation':66.2565},{'Point':[31.34396,119.005087],'Elevation':69.0464},{'Point':[31.34469,119.004897],'Elevation':72.3644},{'Point':[31.34492,119.004817],'Elevation':75.7088},{'Point':[31.345151,119.004578],'Elevation':79.2975},{'Point':[31.345452,119.004329],'Elevation':83.0134},{'Point':[31.345722,119.00413],'Elevation':87.0387},{'Point':[31.345882,119.00397],'Elevation':90.9773},{'Point':[31.346003,119.003701],'Elevation':94.1804},{'Point':[31.346134,119.003492],'Elevation':96.7123},{'Point':[31.346334,119.003412],'Elevation':99.1538},{'Point':[31.346604,119.003522],'Elevation':102.4359},{'Point':[31.346853,119.003552],'Elevation':106.1954},{'Point':[31.347143,119.003502],'Elevation':110.2601},{'Point':[31.347344,119.003432],'Elevation':114.1717},{'Point':[31.347564,119.003313],'Elevation':117.6072},{'Point':[31.347754,119.003103],'Elevation':120.1657},{'Point':[31.347925,119.002874],'Elevation':121.9901},{'Point':[31.348095,119.002765],'Elevation':123.592},{'Point':[31.348285,119.002914],'Elevation':125.0265},{'Point':[31.348434,119.003312],'Elevation':127.3454},{'Point':[31.348573,119.003621],'Elevation':130.5107},{'Point':[31.348782,119.00391],'Elevation':134.3053},{'Point':[31.349021,119.004129],'Elevation':138.0121},{'Point':[31.34935,119.004279],'Elevation':141.3069},{'Point':[31.34952,119.004369],'Elevation':144.2481},{'Point':[31.34974,119.004468],'Elevation':146.7968},{'Point':[31.349909,119.004548],'Elevation':148.9758},{'Point':[31.349989,119.004737],'Elevation':151.0985},{'Point':[31.349759,119.004727],'Elevation':153.2488},{'Point':[31.349539,119.004638],'Elevation':155.3186},{'Point':[31.34922,119.004568],'Elevation':157.
Line truncated
|
||||
//string json = @"{'Type':'LineString','TotalDistance':3.4100999999999995,'List':[{'Point':[31.351249,119.021848],'Elevation':28.3692},{'Point':[31.35127,119.021529],'Elevation':28.4163},{'Point':[31.351322,119.020791],'Elevation':29.5811},{'Point':[31.351364,119.019914],'Elevation':31.2764},{'Point':[31.351458,119.018399],'Elevation':32.102},{'Point':[31.351501,119.017512],'Elevation':32.5486},{'Point':[31.351512,119.017203],'Elevation':33.0451},{'Point':[31.351522,119.016914],'Elevation':33.5963},{'Point':[31.351564,119.016386],'Elevation':34.58},{'Point':[31.351606,119.015788],'Elevation':36.0089},{'Point':[31.351626,119.015539],'Elevation':37.4491},{'Point':[31.351647,119.01529],'Elevation':38.8925},{'Point':[31.351187,119.01521],'Elevation':39.5386},{'Point':[31.350858,119.01514],'Elevation':39.7551},{'Point':[31.350438,119.015051],'Elevation':40.1219},{'Point':[31.350199,119.014891],'Elevation':40.7157},{'Point':[31.350019,119.014742],'Elevation':41.4673},{'Point':[31.34974,119.014622],'Elevation':42.0818},{'Point':[31.34951,119.014553],'Elevation':42.4744},{'Point':[31.349201,119.014363],'Elevation':42.707},{'Point':[31.349051,119.014164],'Elevation':42.9748},{'Point':[31.348563,119.013506],'Elevation':43.4829},{'Point':[31.348384,119.013287],'Elevation':43.7515},{'Point':[31.348095,119.013078],'Elevation':43.711},{'Point':[31.347905,119.012988],'Elevation':43.6298},{'Point':[31.347596,119.012789],'Elevation':43.5441},{'Point':[31.347416,119.012639],'Elevation':43.5661},{'Point':[31.347257,119.01249],'Elevation':43.7661},{'Point':[31.347017,119.012271],'Elevation':44.173},{'Point':[31.346778,119.012071],'Elevation':44.6846},{'Point':[31.346569,119.011932],'Elevation':45.0536},{'Point':[31.346349,119.011862],'Elevation':45.1835},{'Point':[31.346169,119.011822],'Elevation':45.1202},{'Point':[31.34597,119.011573],'Elevation':44.9227},{'Point':[31.345872,119.010926],'Elevation':44.769},{'Point':[31.345823,119.010517],'Elevation':44.825},{'Point':[31.345724,119.010198],'Elevation':45.0025},{'Point':[31.345595,119.009999],'Elevation':45.0965},{'Point':[31.345306,119.00966],'Elevation':44.9105},{'Point':[31.345056,119.009421],'Elevation':44.6363},{'Point':[31.344847,119.009281],'Elevation':44.3001},{'Point':[31.344627,119.009122],'Elevation':43.9679},{'Point':[31.344468,119.008983],'Elevation':43.7442},{'Point':[31.344199,119.008694],'Elevation':43.6926},{'Point':[31.34396,119.008345],'Elevation':43.9002},{'Point':[31.343711,119.007976],'Elevation':44.3907},{'Point':[31.343333,119.007488],'Elevation':45.4845},{'Point':[31.343173,119.007289],'Elevation':46.704},{'Point':[31.342834,119.007109],'Elevation':47.9561},{'Point':[31.342485,119.00698],'Elevation':48.9071},{'Point':[31.342285,119.00687],'Elevation':49.4839},{'Point':[31.342155,119.006721],'Elevation':49.8479},{'Point':[31.342026,119.006472],'Elevation':50.1356},{'Point':[31.342057,119.006253],'Elevation':50.7142},{'Point':[31.342257,119.006223],'Elevation':51.7425},{'Point':[31.342547,119.006332],'Elevation':53.1767},{'Point':[31.342737,119.006213],'Elevation':54.8684},{'Point':[31.342818,119.005894],'Elevation':56.8442},{'Point':[31.342909,119.005625],'Elevation':58.8701},{'Point':[31.342989,119.005415],'Elevation':60.9597},{'Point':[31.343199,119.005276],'Elevation':63.4359},{'Point':[31.34363,119.005166],'Elevation':66.2565},{'Point':[31.34396,119.005087],'Elevation':69.0464},{'Point':[31.34469,119.004897],'Elevation':72.3644},{'Point':[31.34492,119.004817],'Elevation':75.7088},{'Point':[31.345151,119.004578],'Elevation':79.2975},{'Point':[31.345452,119.004329],'Elevation':83.0134},{'Point':[31.345722,119.00413],'Elevation':87.0387},{'Point':[31.345882,119.00397],'Elevation':90.9773},{'Point':[31.346003,119.003701],'Elevation':94.1804},{'Point':[31.346134,119.003492],'Elevation':96.7123},{'Point':[31.346334,119.003412],'Elevation':99.1538},{'Point':[31.346604,119.003522],'Elevation':102.4359},{'Point':[31.346853,119.003552],'Elevation':106.1954},{'Point':[31.347143,119.003502],'Elevation':110.2601},{'Point':[31.347344,119.003432],'Elevation':114.1717},{'Point':[31.347564,119.003313],'Elevation':117.6072},{'Point':[31.347754,119.003103],'Elevation':120.1657},{'Point':[31.347925,119.002874],'Elevation':121.9901},{'Point':[31.348095,119.002765],'Elevation':123.592},{'Point':[31.348285,119.002914],'Elevation':125.0265},{'Point':[31.348434,119.003312],'Elevation':127.3454},{'Point':[31.348573,119.003621],'Elevation':130.5107},{'Point':[31.348782,119.00391],'Elevation':134.3053},{'Point':[31.349021,119.004129],'Elevation':138.0121},{'Point':[31.34935,119.004279],'Elevation':141.3069},{'Point':[31.34952,119.004369],'Elevation':144.2481},{'Point':[31.34974,119.004468],'Elevation':146.7968},{'Point':[31.349909,119.004548],'Elevation':148.9758},{'Point':[31.349989,119.004737],'Elevation':151.0985},{'Point':[31.349759,119.004727],'Elevation':153.2488},{'Point':[31.349539,119.004638],'Elevation':155.3186},{'Point':[31.34922,119.004568],'Elevation':157Line truncated
|
||||
return Newtonsoft.Json.JsonConvert.DeserializeObject<MapDataModel>(json);
|
||||
}
|
||||
/// <summary>
|
||||
/// 海拔图数据
|
||||
/// </summary>
|
||||
public float[] GetLineChartData()
|
||||
public float[] GetRealTimeLineChartData(int index)
|
||||
{
|
||||
List<float> dist = new List<float>();
|
||||
var list = mapData.List.Select(c => (float) c.Elevation ).ToArray();
|
||||
var count = list.Count();
|
||||
int v = Math.Max(count / 500, 1);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (i % v == 0)
|
||||
if (i > index)
|
||||
{
|
||||
dist.Add(list[i]);
|
||||
}
|
||||
}
|
||||
return dist.ToArray();
|
||||
}
|
||||
|
||||
public float[] GetLineChartData()
|
||||
{
|
||||
var list = mapData.List.Select(c => (float)c.Elevation).ToArray();
|
||||
return list;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
using Mapbox.Unity.Map;
|
||||
using Mapbox.Unity.MeshGeneration.Data;
|
||||
using Mapbox.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class InitMiniMapProvider : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
AbstractMap _map;
|
||||
[SerializeField]
|
||||
Camera _minicamera;
|
||||
[SerializeField]
|
||||
GameObject _player;
|
||||
CyclingController cyclingCotroller;
|
||||
PlayerController playerController;
|
||||
GameObject _mipMapRoute;
|
||||
void Start()
|
||||
{
|
||||
cyclingCotroller = FindObjectOfType<CyclingController>();
|
||||
playerController = FindObjectOfType<PlayerController>();
|
||||
if (cyclingCotroller != null)
|
||||
{
|
||||
var mapdata = cyclingCotroller.GetMapData();
|
||||
//初始化map
|
||||
var point = cyclingCotroller.GetCenterCoordinate();
|
||||
if (_map != null)
|
||||
{
|
||||
_map.OnInitialized += _map_OnInitialized;
|
||||
_map.OnUpdated += _map_OnUpdated;
|
||||
_map.Initialize(new Vector2d(mapdata.Center[0], mapdata.Center[1]), 12);
|
||||
var bbox = mapdata.Bbox;
|
||||
var targetbounds = new Vector2dBounds(new Vector2d(bbox[0], bbox[1]), new Vector2d(bbox[2], bbox[3]));
|
||||
var screenBounds = GetScreenBounds();
|
||||
SetZoomToFitBounds(targetbounds, screenBounds);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void Update()
|
||||
{
|
||||
_player.transform.localPosition = _map.GeoToWorldPosition(playerController.Nextlatlong);
|
||||
}
|
||||
private bool init = false;
|
||||
private void _map_OnInitialized()
|
||||
{
|
||||
init = true;
|
||||
|
||||
}
|
||||
|
||||
#region Camera 自适应
|
||||
/// <summary>
|
||||
/// https://github.com/mapbox/mapbox-unity-sdk/issues/1580
|
||||
/// </summary>
|
||||
/// <param name="targetBounds">路线的边界</param>
|
||||
/// <param name="screenBounds">小地图边界</param>
|
||||
private void SetZoomToFitBounds(Vector2dBounds targetBounds, Vector2dBounds screenBounds)
|
||||
{
|
||||
var targetLonDelta = targetBounds.East - targetBounds.West;
|
||||
var targetLatDelta = targetBounds.North - targetBounds.South;
|
||||
|
||||
var screenLonDelta = screenBounds.East - screenBounds.West;
|
||||
var screenLatDelta = screenBounds.North - screenBounds.South;
|
||||
|
||||
var zoomLatMultiplier = screenLatDelta / targetLatDelta;
|
||||
var zoomLonMultiplier = screenLonDelta / targetLonDelta;
|
||||
|
||||
var latZoom = Math.Log(zoomLatMultiplier, 2);
|
||||
var lonZoom = Math.Log(zoomLonMultiplier, 2);
|
||||
|
||||
var zoom = (float)(_map.Zoom + Math.Min(latZoom, lonZoom));
|
||||
|
||||
_map.SetZoom((float)Math.Floor(zoom));
|
||||
_map.UpdateMap();
|
||||
}
|
||||
private Vector2dBounds GetScreenBounds()
|
||||
{
|
||||
var screenWidth = UnityEngine.Screen.width;
|
||||
var screenHeight = UnityEngine.Screen.height;
|
||||
|
||||
var sw_world = _minicamera.ViewportToWorldPoint(new Vector3(0, 0, 180));
|
||||
var sw = _map.WorldToGeoPosition(sw_world);
|
||||
|
||||
var ne_world = _minicamera.ViewportToWorldPoint(new Vector3(0.6f, 0.6f, 180));
|
||||
var ne = _map.WorldToGeoPosition(ne_world);
|
||||
|
||||
return new Vector2dBounds(new Vector2d(sw.x, sw.y), new Vector2d(ne.x, ne.y));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 创建小地图路线
|
||||
private void _map_OnUpdated()
|
||||
{
|
||||
CreateMiniRoute();
|
||||
}
|
||||
void CreateMiniRoute()
|
||||
{
|
||||
var meshData = new MeshData();
|
||||
var dat = new List<Vector3>();
|
||||
var mapData = cyclingCotroller.GetMapData();
|
||||
if (mapData != null)
|
||||
{
|
||||
var count = mapData.List.Count;
|
||||
var interval = Math.Max(Math.Ceiling(count / 500D),1f);
|
||||
for (int i = 0; i < mapData.List.Count; i++)
|
||||
{
|
||||
if(i% interval == 0)
|
||||
{
|
||||
var point = mapData.List[i].Point;
|
||||
Vector3 item = _map.GeoToWorldPosition(new Vector2d(point[0], point[1]));
|
||||
item.y += 1f;
|
||||
dat.Add(item);
|
||||
}
|
||||
}
|
||||
var feat = new VectorFeatureUnity();
|
||||
feat.Points.Add(dat);
|
||||
CreateLineRender(feat);//创建小地图路线
|
||||
}
|
||||
}
|
||||
//创建小地图路线
|
||||
void CreateLineRender(VectorFeatureUnity feat)
|
||||
{
|
||||
if (_mipMapRoute != null)
|
||||
{
|
||||
_mipMapRoute.Destroy();
|
||||
}
|
||||
_mipMapRoute = new GameObject("MiniMapRoute");
|
||||
_mipMapRoute.transform.parent = transform;
|
||||
var lineRender = _mipMapRoute.AddComponent<LineRenderer>();
|
||||
lineRender.material = new Material(Shader.Find("Sprites/Default"));
|
||||
var dat = feat.Points[0];
|
||||
lineRender.endColor = Color.blue;
|
||||
lineRender.startColor = Color.blue;
|
||||
//设置宽度
|
||||
lineRender.startWidth = 0.6f;
|
||||
lineRender.endWidth = 0.6f;
|
||||
lineRender.positionCount = dat.Count;
|
||||
lineRender.SetPositions(feat.Points[0].ToArray());
|
||||
lineRender.numCornerVertices = 90;
|
||||
_mipMapRoute.layer = 9;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e94e95c463c5914d99fb16ff1047af4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -71,7 +71,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
void Update()
|
||||
{
|
||||
var t = _curve.Evaluate(Time.time);
|
||||
Debug.Log(t);
|
||||
_text.color = Color.Lerp(Color.clear, Color.white, t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
/// </summary>
|
||||
/// <param name="base64Image"></param>
|
||||
/// <returns></returns>
|
||||
public JsonResult<AddMapRecordResultModel> SaveData(CyclingModel cyclingModel, SelectParamModel selectParam, string base64Image = "")
|
||||
public JsonResult<AddMapRecordResultModel> SaveData(CyclingModel cyclingModel, SelectParamModel selectParam, string imageName = "")
|
||||
{
|
||||
if (RiderDatas.Count <= 0)
|
||||
{
|
||||
@@ -196,19 +196,10 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
stream.Close();
|
||||
files.Add(fname);
|
||||
}
|
||||
#region TODO 截图
|
||||
if (!string.IsNullOrEmpty(base64Image))
|
||||
#region 截图
|
||||
if (!string.IsNullOrEmpty(imageName))
|
||||
{
|
||||
//var imageName = path + "/" + Guid.NewGuid().ToString() + ".png";
|
||||
//base64Image = base64Image.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", ""); ;
|
||||
//byte[] image = Convert.FromBase64String(base64Image);
|
||||
//using (MemoryStream ms = new MemoryStream(image))
|
||||
//using (Image img = Image.FromStream(ms))
|
||||
//{
|
||||
// img.Save(imageName, System.Drawing.Imaging.ImageFormat.Png);
|
||||
// //img.Dispose();
|
||||
//}
|
||||
//files.Add(imageName);
|
||||
files.Add(imageName);
|
||||
}
|
||||
#endregion
|
||||
var result = service.Add(interruptRecord, files);
|
||||
|
||||
@@ -35,9 +35,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
distance = mainController.UpdateDistance(speed);
|
||||
totalDistance += distance;
|
||||
//记录骑行数据
|
||||
var recordText = string.Format($"{ ticks },{ power.ToString(CultureInfo.InvariantCulture) },{ speed.ToString(CultureInfo.InvariantCulture) },{ Math.Round(totalDistance, 6).ToString(CultureInfo.InvariantCulture) },{ cadance.ToString(CultureInfo.InvariantCulture) },{ heartRate.ToString(CultureInfo.InvariantCulture) },{ Math.Round(nextlatlong.x, 6).ToString(CultureInfo.InvariantCulture) },{ Math.Round(nextlatlong.y, 6).ToString(CultureInfo.InvariantCulture) }");
|
||||
Debug.Log(recordText);
|
||||
#if !UNITY_EDITOR
|
||||
#if UNITY_EDITOR
|
||||
var recorderData = cyclingExcutor.recorderData;
|
||||
recorderData.RiderDatas.Add(new TargetData
|
||||
{
|
||||
@@ -51,14 +49,15 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
_Lon = nextlatlong.y
|
||||
});
|
||||
#endif
|
||||
}
|
||||
//上传数据
|
||||
protected override void Upload()
|
||||
}
|
||||
//上传数据
|
||||
protected override void Upload()
|
||||
{
|
||||
#if !UNITY_EDITOR
|
||||
#if UNITY_EDITOR
|
||||
string imageFileName = base.CaptureCamera(Camera.main, new Rect(Screen.width * 0f, Screen.height * 0f, Screen.width * 0.5f, Screen.height * 0.5f));
|
||||
cyclingExcutor.recorderData.IsCompleted = totalDistance == mapData.TotalDistance;
|
||||
cyclingExcutor.recorderData.EndDistance = totalDistance;
|
||||
cyclingExcutor.recorderData.SaveData(cyclingExcutor.Mode,null,string.Empty);
|
||||
cyclingExcutor.recorderData.SaveData(cyclingExcutor.Mode,null, imageFileName);
|
||||
#endif
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Collections;
|
||||
using Mapbox.Unity.MeshGeneration.Modifiers;
|
||||
using Mapbox.Unity.MeshGeneration.Data;
|
||||
using Mapbox.Unity.Utilities;
|
||||
using System;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
@@ -18,7 +19,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
MeshModifier SnapModifier;
|
||||
[SerializeField]
|
||||
Material _material;
|
||||
|
||||
[SerializeField]
|
||||
[Range(1, 10)]
|
||||
private float UpdateFrequency = 2;
|
||||
@@ -36,14 +36,14 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
_map = FindObjectOfType<AbstractMap>();
|
||||
}
|
||||
// _map.OnInitialized += _map_OnInitialized; ;
|
||||
// _map.OnInitialized += _map_OnInitialized; ;
|
||||
//_map.OnUpdated += _map_OnUpdated; ;
|
||||
//_map.OnTileFinished += _map_OnTileFinished; ;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void _map_OnUpdated()
|
||||
private void _map_OnUpdated()
|
||||
{
|
||||
Debug.Log("_map_OnUpdated");
|
||||
}
|
||||
@@ -59,7 +59,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
|
||||
if (!initComplete)
|
||||
{
|
||||
Debug.Log(47);
|
||||
CreateRoute(obj);
|
||||
initComplete = true;
|
||||
}
|
||||
@@ -71,6 +70,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
cyclingCotroller = transform.parent.GetComponent<CyclingController>();
|
||||
playerController = FindObjectOfType<PlayerController>();
|
||||
_map.OnTileFinished += _map_OnTileFinished;
|
||||
StartCoroutine(QueryTimer());
|
||||
//CreateRoute();
|
||||
}
|
||||
@@ -85,9 +85,8 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
Debug.Log(88);
|
||||
yield return new WaitForSeconds(UpdateFrequency);
|
||||
CreateRoute(null);
|
||||
yield return new WaitForSeconds(UpdateFrequency);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,15 +99,18 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
var mapData = cyclingCotroller.GetMapData();
|
||||
if (mapData != null)
|
||||
{
|
||||
foreach (var mapDataItem in mapData.List)
|
||||
//foreach (var mapDataItem in mapData.List)
|
||||
for (int i = 0; i < mapData.List.Count; i++)
|
||||
{
|
||||
var point = mapDataItem.Point;
|
||||
|
||||
var point = mapData.List[i].Point;
|
||||
Vector3 item = _map.GeoToWorldPosition(new Vector2d(point[0], point[1]));
|
||||
var distance = TurfCS.Turf.Distance(TurfCS.Turf.Point(new double[] { playerController.Nextlatlong.x, playerController.Nextlatlong.y }), TurfCS.Turf.Point(new double[] { point[0], point[1]}));
|
||||
if (distance<10)
|
||||
item.y += 0.3f;
|
||||
if (!posInScreen(item) && i > playerController.CurrentIndex)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (posInScreen(item))
|
||||
{
|
||||
item.y += 0.3f;
|
||||
dat.Add(item);
|
||||
}
|
||||
}
|
||||
@@ -117,7 +119,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
//处理海拔高度的问题
|
||||
//SnapModifier.Run(feat, meshData, tile);
|
||||
CreatMapRoute(feat);//创建路线
|
||||
CreateMiniMapRoute(feat);//创建小地图路线
|
||||
//CreateMiniMapRoute(feat);//创建小地图路线
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -127,7 +129,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
Vector3 viewPos = Camera.main.WorldToViewportPoint(position);
|
||||
Vector3 dir = (position - camreatra.position).normalized;
|
||||
float dot = Vector3.Dot(camreatra.forward, dir);
|
||||
if (dot > 0 && viewPos.x > 0 && viewPos.x < 1 && viewPos.y > 0 && viewPos.y < 1)
|
||||
if (dot > -1 && viewPos.x > -1 && viewPos.x < 2 && viewPos.y > -1 && viewPos.y < 2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -155,9 +157,10 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
var feat = new VectorFeatureUnity();
|
||||
feat.Points.Add(dat);
|
||||
//处理海拔高度的问题
|
||||
SnapModifier.Run(feat, meshData, tile);
|
||||
CreatMapRoute(feat);//创建路线
|
||||
CreateMiniMapRoute(feat);//创建小地图路线
|
||||
//SnapModifier.Run(feat, meshData, tile);
|
||||
//CreatMapRoute(feat);//创建路线
|
||||
//CreateMiniMapRoute(feat);//创建小地图路线
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -176,7 +179,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
lineRender.endColor = c;
|
||||
lineRender.startColor = c;
|
||||
//设置宽度
|
||||
lineRender.SetWidth(0.5f, 0.5f);
|
||||
lineRender.SetWidth(0.2f, 0.2f);
|
||||
lineRender.SetVertexCount(dat.Count);
|
||||
lineRender.SetPositions(feat.Points[0].ToArray());
|
||||
//lineRender.numCapVertices = 90;
|
||||
@@ -190,33 +193,5 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
lineRender.numCornerVertices = 90;
|
||||
|
||||
}
|
||||
void CreateMiniMapRoute(VectorFeatureUnity feat)
|
||||
{
|
||||
if (_mipMapRoute != null)
|
||||
{
|
||||
_mipMapRoute.Destroy();
|
||||
}
|
||||
_mipMapRoute = new GameObject("MiniMapRoute");
|
||||
_mipMapRoute.transform.parent = transform;
|
||||
var lineRender = _mipMapRoute.AddComponent<LineRenderer>();
|
||||
lineRender.material = new Material(Shader.Find("Sprites/Default"));
|
||||
var dat = feat.Points[0];
|
||||
lineRender.endColor = Color.white;
|
||||
lineRender.startColor = Color.white;
|
||||
//设置宽度
|
||||
lineRender.SetWidth(3f, 3f);
|
||||
lineRender.SetVertexCount(dat.Count);
|
||||
lineRender.SetPositions(feat.Points[0].ToArray());
|
||||
//lineRender.numCapVertices = 90;
|
||||
float alpha = 1.0f;
|
||||
//Gradient gradient = new Gradient();
|
||||
//gradient.SetKeys(
|
||||
// new GradientColorKey[] { new GradientColorKey(Color.green, 0.0f), new GradientColorKey(Color.red, 1.0f) },
|
||||
// new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) }
|
||||
//);
|
||||
//lineRender.colorGradient = gradient;
|
||||
lineRender.numCornerVertices = 90;
|
||||
_mipMapRoute.layer = 9;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,8 @@ using DG.Tweening;
|
||||
using System;
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using UnityEngine.SceneManagement;
|
||||
using System.Collections.Generic;
|
||||
using Assets.Cyp.Common;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
@@ -57,7 +59,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
[SerializeField]
|
||||
Text mapName;//路书名称
|
||||
[SerializeField] LineChart elevationChart;//海拔图
|
||||
[SerializeField] Image img;//当前用户头像
|
||||
[SerializeField] RawImage img;//当前用户头像
|
||||
[SerializeField]
|
||||
Button StartOrPauseButton;//暂停按钮
|
||||
[SerializeField]
|
||||
@@ -66,6 +68,9 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
Button DeviceButton;//设备按钮
|
||||
[SerializeField]
|
||||
Button ExitButton;//退出按钮
|
||||
|
||||
[SerializeField]
|
||||
GameObject target;//开始按钮
|
||||
#endregion
|
||||
|
||||
#region 控制器
|
||||
@@ -86,8 +91,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
SettingButton.onClick.AddListener(ShowSettingPanel);
|
||||
DeviceButton.onClick.AddListener(ShowDevicePanel);
|
||||
ExitButton.onClick.AddListener(StopRide);
|
||||
|
||||
|
||||
}
|
||||
void Start()
|
||||
{
|
||||
@@ -97,6 +100,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
mapName.text = route.RouteInstance.Name;
|
||||
totalDistance.text = "/" + Math.Round(mainController.GetMapData().TotalDistance, 2).ToString() + "KM";
|
||||
RenderChart();
|
||||
startIndex = playerController.CurrentIndex;
|
||||
}
|
||||
// Update is called once per frame
|
||||
float tt = 1f;
|
||||
@@ -139,15 +143,20 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
currentSlopeText.text = Math.Round(playerController.CurrentSlope, 1).ToString() + "%";
|
||||
currentSlopeDistanceText.text = Math.Round(playerController.CurrentSlopeDistance, 0).ToString() + "M";
|
||||
//移动海拔图头像 TODO:移动所有人的头像
|
||||
MoveChartMarkPoint();
|
||||
UpdateRealTimeChart();
|
||||
//MoveChartMarkPoint();
|
||||
}
|
||||
}
|
||||
|
||||
//根据不同的骑行模式渲染不同的UI界面
|
||||
void InitUI(CyclingModel cyclingModel)
|
||||
private void LateUpdate()
|
||||
{
|
||||
|
||||
if (target != null)
|
||||
{
|
||||
target.transform.position = playerController.transform.position; //new Vector3((float)Math.Round(player.transform.position.x,1), 0, (float)Math.Round(player.transform.position.z,1));
|
||||
target.transform.rotation = new Quaternion(playerController.transform.rotation.x, playerController.transform.rotation.y + 180, playerController.transform.rotation.z, playerController.transform.rotation.w);
|
||||
}
|
||||
}
|
||||
|
||||
private void StartRide()
|
||||
{
|
||||
//加个5秒钟倒计时
|
||||
@@ -188,25 +197,79 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
isSimple *= -1;
|
||||
}
|
||||
|
||||
|
||||
private int maxCacheDataNumber = 100;//海拔图最大点数
|
||||
private int totalCount;//路线实际点数
|
||||
private int startIndex;//选中玩家起始索引
|
||||
private int interval = 50;//选中玩家移动索引个数
|
||||
private float[] elevationList;
|
||||
//初始化海拔图
|
||||
void RenderChart()
|
||||
{
|
||||
elevationChart.ClearData();
|
||||
var elevationArr = mainController.GetLineChartData();
|
||||
foreach (var elevation in elevationArr)
|
||||
elevationList = mainController.GetLineChartData();
|
||||
totalCount = elevationList.Length;
|
||||
maxCacheDataNumber = Math.Min(totalCount, maxCacheDataNumber);
|
||||
elevationChart.SetMaxCache(maxCacheDataNumber);
|
||||
//for (int i = 0; i < maxCacheDataNumber; i++)
|
||||
//{
|
||||
// elevationChart.AddData(0, elevationList[i]);
|
||||
//}
|
||||
//elevationChart.RefreshChart();
|
||||
|
||||
var endIndex = playerController.CurrentIndex;
|
||||
var s = endIndex / maxCacheDataNumber;
|
||||
var v = endIndex % maxCacheDataNumber;
|
||||
|
||||
maxCacheDataNumber = Math.Min(totalCount-s* maxCacheDataNumber, maxCacheDataNumber);
|
||||
|
||||
for (int i = 0; i < maxCacheDataNumber; i++)
|
||||
{
|
||||
elevationChart.AddData(0, elevation);
|
||||
initCount++;
|
||||
if (initCount > maxCacheDataNumber) break;
|
||||
AddOneData(s * maxCacheDataNumber + v + i);
|
||||
}
|
||||
|
||||
elevationChart.RefreshChart();
|
||||
Utils.DisplayImage(StartCoroutine, img, App.CurrentUser.WxHeadImg);
|
||||
}
|
||||
//长路线动态更新chart
|
||||
private int initCount;
|
||||
private float updateTime;
|
||||
private int lastIndex;
|
||||
private int chartAddNum;
|
||||
void UpdateRealTimeChart()
|
||||
{
|
||||
var endIndex = playerController.CurrentIndex;
|
||||
updateTime += Time.deltaTime;
|
||||
if (updateTime >= 1)
|
||||
{
|
||||
int delta = endIndex - lastIndex;
|
||||
if (delta >0 && initCount < totalCount)
|
||||
{
|
||||
lastIndex = endIndex;
|
||||
AddOneData(initCount);
|
||||
initCount++;
|
||||
updateTime = 0;
|
||||
chartAddNum++;
|
||||
}
|
||||
var v = (endIndex - chartAddNum) % maxCacheDataNumber;
|
||||
MoveChartMarkPoint(v);
|
||||
}
|
||||
}
|
||||
void AddOneData(int index)
|
||||
{
|
||||
elevationChart.AddData(0, elevationList[index]);
|
||||
//elevationChart.AddXAxisData(index.ToString(), index);
|
||||
|
||||
}
|
||||
|
||||
void MoveChartMarkPoint()
|
||||
void MoveChartMarkPoint(int index)
|
||||
{
|
||||
var dataPoints = elevationChart.series.list[0].dataPoints.OrderBy(c=>c.x).ToList();
|
||||
if (dataPoints.Count > 0)
|
||||
{
|
||||
var pinLoction = dataPoints[playerController.CurrentIndex];
|
||||
pinLoction.y += 10;
|
||||
var pinLoction = dataPoints[index];
|
||||
pinLoction.y = img.transform.localPosition.y;
|
||||
img.transform.localPosition = pinLoction;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using GeoJSON.Net.Geometry;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -64,6 +65,8 @@ namespace Assets.Scripts.Apis.Models
|
||||
if (_List == null) return;
|
||||
this.CalcDistance();
|
||||
this.CalcGrade();
|
||||
this.CalcBbox();
|
||||
this.CalcCenter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +120,22 @@ namespace Assets.Scripts.Apis.Models
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void CalcCenter()
|
||||
{
|
||||
var list = this.List.Select(p => new GeoJSON.Net.Geometry.GeographicPosition(p.Point[0], p.Point[1]));
|
||||
LineString lineString = new LineString(list);
|
||||
var ll = Turf.Centroid(lineString);
|
||||
var p1 = ((Point)ll.Geometry).Coordinates;
|
||||
Center = new double[] { ((GeographicPosition)p1).Latitude, ((GeographicPosition)p1).Longitude };
|
||||
}
|
||||
private void CalcBbox()
|
||||
{
|
||||
var list = this.List.Select(p => new GeoJSON.Net.Geometry.GeographicPosition(p.Point[0], p.Point[1]));
|
||||
LineString lineString = new LineString(list);
|
||||
Bbox = Turf.Bbox(lineString);
|
||||
}
|
||||
public Double[] Center { set; get; }
|
||||
public List<Double> Bbox { set; get; }
|
||||
public MapDataModel()
|
||||
{
|
||||
//List = new List<Item>();
|
||||
|
||||
Reference in new issue
Block a user