diff --git a/dependencies/mapbox-sdk-cs b/dependencies/mapbox-sdk-cs index 9bd950375..e7cec0185 160000 --- a/dependencies/mapbox-sdk-cs +++ b/dependencies/mapbox-sdk-cs @@ -1 +1 @@ -Subproject commit 9bd950375dccf6423b93f1afd2ab4286b44dcf66 +Subproject commit e7cec018502fe90ecced48dee846e99e2798523f diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/GeocodeAttributeSearchWindow.cs b/sdkproject/Assets/Mapbox/Core/Unity/Editor/GeocodeAttributeSearchWindow.cs index 4a898476d..b0cbbdcc6 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Editor/GeocodeAttributeSearchWindow.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/GeocodeAttributeSearchWindow.cs @@ -81,7 +81,7 @@ void OnGUI() for (int i = 0; i < _features.Count; i++) { Feature feature = _features[i]; - string coordinates = feature.Center.Latitude + ", " + feature.Center.Longitude; + string coordinates = feature.Center.x + ", " + feature.Center.y; string buttonContent = feature.Address + " (" + coordinates + ")"; if (GUILayout.Button(buttonContent)) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/MeshData.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/MeshData.cs index 9e8b631f2..e274c7517 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/MeshData.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/MeshData.cs @@ -2,11 +2,12 @@ namespace Mapbox.Unity.MeshGeneration.Data { using System.Collections.Generic; using UnityEngine; + using Utils; public class MeshData { public Vector2 MercatorCenter { get; set; } - public Rect TileRect { get; set; } + public RectD TileRect { get; set; } public List Vertices { get; set; } public List> Triangles { get; set; } public List> UV { get; set; } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/UnityTile.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/UnityTile.cs index 1a69ec23f..56b085688 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/UnityTile.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/UnityTile.cs @@ -5,6 +5,7 @@ namespace Mapbox.Unity.MeshGeneration.Data using UnityEngine; using Mapbox.Unity.MeshGeneration.Enums; using Mapbox.Unity.Utilities; + using Utils; [RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))] public class UnityTile : MonoBehaviour, INotifyPropertyChanged @@ -52,7 +53,7 @@ public string VectorData public Vector2 TileCoordinate { get; set; } public int Zoom { get; set; } - public Rect Rect { get; set; } + public RectD Rect { get; set; } public float RelativeScale { get; set; } public float QueryHeightData(float x, float y) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/VectorFeatureUnity.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/VectorFeatureUnity.cs index 8267d586c..0264537ed 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/VectorFeatureUnity.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Data/VectorFeatureUnity.cs @@ -1,21 +1,33 @@ -namespace Mapbox.Unity.MeshGeneration.Data -{ - using Mapbox.VectorTile; - using Mapbox.VectorTile.ExtensionMethods; - using System.Collections.Generic; - using Mapbox.VectorTile.Geometry; - - public class VectorFeatureUnity - { - public VectorTileFeature Data { get; set; } - public Dictionary Properties { get; set; } - public List> Points; - - public VectorFeatureUnity(VectorTileFeature feature, UnityTile tile) - { - Data = feature; - Properties = Data.GetProperties(); - Points = feature.GeometryAsWgs84((ulong)tile.Zoom, (ulong)tile.TileCoordinate.x, (ulong)tile.TileCoordinate.y); - } - } -} +namespace Mapbox.Unity.MeshGeneration.Data +{ + using Mapbox.VectorTile; + using Mapbox.VectorTile.ExtensionMethods; + using System.Collections.Generic; + using Mapbox.VectorTile.Geometry; + using UnityEngine; + + public class VectorFeatureUnity + { + public VectorTileFeature Data { get; set; } + public Dictionary Properties { get; set; } + public List> Points; + + public VectorFeatureUnity(VectorTileFeature feature, UnityTile tile, float layerExtent) + { + Data = feature; + Properties = Data.GetProperties(); + Points = new List>(); + + for (int i = 0; i < feature.Geometry.Count; i++) + { + var nl = new List(feature.Geometry[i].Count); + for (int j = 0; j < feature.Geometry[i].Count; j++) + { + var point = feature.Geometry[i][j]; + nl.Add(new Vector3((float)(point.X / layerExtent * tile.Rect.Size.x - (tile.Rect.Size.x/2)), 0, (float)((layerExtent - point.Y) / layerExtent * tile.Rect.Size.y - (tile.Rect.Size.y / 2)))); + } + Points.Add(nl); + } + } + } +} diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs index 16cc05f69..cb80b7035 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs @@ -18,13 +18,13 @@ public class DirectionsFactory : Factory private Directions _directions; public List MeshModifiers; - public override void Initialize(MonoBehaviour mb, IFileSource fileSource) + public override void Initialize(IFileSource fileSource) { - base.Initialize(mb, fileSource); - _directions = new Directions(fileSource); + base.Initialize(fileSource); + _directions = MapboxAccess.Instance.Directions; } - public void Query(List waypoints) + public void Query(List waypoints) { var _directionResource = new DirectionResource(waypoints.ToArray(), RoutingProfile.Driving); _directionResource.Steps = true; @@ -39,7 +39,7 @@ void HandleDirectionsResponse(DirectionsResponse response) { foreach (var step in leg.Steps) { - meshData.Vertices.Add(Conversions.GeoToWorldPosition(step.Maneuver.Location.Latitude, step.Maneuver.Location.Longitude, MapController.ReferenceTileRect.center, MapController.WorldScaleFactor).ToVector3xz()); + meshData.Vertices.Add(Conversions.GeoToWorldPosition(step.Maneuver.Location.x, step.Maneuver.Location.y, MapController.ReferenceTileRect.Center, MapController.WorldScaleFactor).ToVector3xz()); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs index b9bc43e57..f2334709a 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs @@ -8,7 +8,7 @@ public class Factory : ScriptableObject { protected IFileSource FileSource; - public virtual void Initialize(MonoBehaviour mb, IFileSource fileSource) + public virtual void Initialize(IFileSource fileSource) { FileSource = fileSource; } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs index fa608eeb0..c17596a32 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs @@ -20,9 +20,9 @@ public class MapImageFactory : Factory private Dictionary _tiles; - public override void Initialize(MonoBehaviour mb, IFileSource fs) + public override void Initialize(IFileSource fs) { - base.Initialize(mb, fs); + base.Initialize(fs); _tiles = new Dictionary(); } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs index c539695dd..f50a83a62 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs @@ -17,9 +17,9 @@ public class MeshFactory : Factory private Dictionary _tiles; private Dictionary> _layerBuilder; - public override void Initialize(MonoBehaviour mb, IFileSource fs) + public override void Initialize(IFileSource fs) { - base.Initialize(mb, fs); + base.Initialize(fs); _tiles = new Dictionary(); _layerBuilder = new Dictionary>(); foreach (LayerVisualizerBase factory in Visualizers) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs index f7c6b9e88..8d49919f4 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs @@ -7,6 +7,7 @@ namespace Mapbox.Unity.MeshGeneration.Factories using Mapbox.Unity.MeshGeneration.Data; using Mapbox.Platform; using Mapbox.Unity.Utilities; + using Utils; [CreateAssetMenu(menuName = "Mapbox/Factories/Terrain Factory")] public class TerrainFactory : Factory @@ -24,9 +25,9 @@ public class TerrainFactory : Factory [SerializeField] private int sampleCount = 40; - public override void Initialize(MonoBehaviour mb, IFileSource fs) + public override void Initialize(IFileSource fs) { - base.Initialize(mb, fs); + base.Initialize(fs); _tiles = new Dictionary(); } @@ -83,22 +84,22 @@ private void CreateTerrain(UnityTile tile, Texture2D texture) { var go = tile.gameObject; var mesh = new Mesh(); - var verts = new List(); + var verts = new List(sampleCount* sampleCount); for (float x = 0; x < sampleCount; x++) { for (float y = 0; y < sampleCount; y++) { - var xx = Mathf.Lerp(tile.Rect.xMin, (tile.Rect.xMin + tile.Rect.size.x), + var xx = Mathd.Lerp(tile.Rect.Min.x, tile.Rect.Max.x, x / (sampleCount - 1)); - var yy = Mathf.Lerp(tile.Rect.yMin, (tile.Rect.yMin + tile.Rect.size.y), + var yy = Mathd.Lerp(tile.Rect.Min.y, tile.Rect.Max.y, y / (sampleCount - 1)); verts.Add(new Vector3( - (xx - tile.Rect.center.x), + (float)(xx - tile.Rect.Center.x), Conversions.GetRelativeHeightFromColor(texture.GetPixel((int)Mathf.Clamp((x / (sampleCount - 1) * 256), 0, 255), (int)Mathf.Clamp((256 - (y / (sampleCount - 1) * 256)), 0, 255)), tile.RelativeScale), - (yy - tile.Rect.center.y))); + (float)(yy - tile.Rect.Center.y))); } } @@ -106,7 +107,7 @@ private void CreateTerrain(UnityTile tile, Texture2D texture) //we can read these from a hardcoded dictionary as well //no need to calculate this every single time unless we need a really high range for sampleCount - var trilist = new List(); + var trilist = new List(sampleCount * sampleCount * 3); for (int y = 0; y < sampleCount - 1; y++) { for (int x = 0; x < sampleCount - 1; x++) @@ -122,7 +123,7 @@ private void CreateTerrain(UnityTile tile, Texture2D texture) } mesh.SetTriangles(trilist, 0); - var uvlist = new List(); + var uvlist = new List(sampleCount * sampleCount); var step = 1f / (sampleCount - 1); for (int i = 0; i < sampleCount; i++) { @@ -134,7 +135,8 @@ private void CreateTerrain(UnityTile tile, Texture2D texture) mesh.SetUVs(0, uvlist); mesh.RecalculateNormals(); go.GetComponent().sharedMesh = mesh; - go.AddComponent(); + + //go.AddComponent(); //go.layer = LayerMask.NameToLayer("terrain"); } @@ -204,10 +206,18 @@ private void CreateTileBase(UnityTile tile) var mesh = new Mesh(); var verts = new List(); - verts.Add((tile.Rect.min - tile.Rect.center).ToVector3xz()); - verts.Add(new Vector3(tile.Rect.xMax - tile.Rect.center.x, 0, tile.Rect.yMin - tile.Rect.center.y)); - verts.Add(new Vector3(tile.Rect.xMin - tile.Rect.center.x, 0, tile.Rect.yMax - tile.Rect.center.y)); - verts.Add((tile.Rect.max - tile.Rect.center).ToVector3xz()); + verts.Add((tile.Rect.Min - tile.Rect.Center).ToVector3xz()); + verts.Add( + new Vector3( + (float)(tile.Rect.Max.x - tile.Rect.Center.x), + 0, + (float)(tile.Rect.Min.y - tile.Rect.Center.y))); + verts.Add( + new Vector3( + (float)(tile.Rect.Min.x - tile.Rect.Center.x), + 0, + (float)(tile.Rect.Max.y - tile.Rect.Center.y))); + verts.Add((tile.Rect.Max - tile.Rect.Center).ToVector3xz()); mesh.SetVertices(verts); var trilist = new List() { 0, 1, 2, 1, 3, 2 }; diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/PoiVisualizer.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/PoiVisualizer.cs index 0e1e27c44..f61a388db 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/PoiVisualizer.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/PoiVisualizer.cs @@ -30,7 +30,7 @@ public override void Create(VectorTileLayer layer, UnityTile tile) var fc = layer.FeatureCount(); for (int i = 0; i < fc; i++) { - var feature = new VectorFeatureUnity(layer.GetFeature(i, 0), tile); + var feature = new VectorFeatureUnity(layer.GetFeature(i, 0), tile, layer.Extent); Build(feature, tile, _container); } } @@ -41,8 +41,8 @@ private void Build(VectorFeatureUnity feature, UnityTile tile, GameObject parent return; int selpos = feature.Points[0].Count / 2; - var met = Conversions.GeoToWorldPosition(feature.Points[0][selpos].Lat, feature.Points[0][selpos].Lng, tile.Rect.center).ToVector3xz(); - if (Math.Abs(met.x) > Math.Abs(tile.Rect.size.x) / 2 || Math.Abs(met.y) > Math.Abs(tile.Rect.size.y) / 2) + var met = feature.Points[0][selpos]; + if (Math.Abs(met.x) > Math.Abs(tile.Rect.Size.x) / 2 || Math.Abs(met.y) > Math.Abs(tile.Rect.Size.y) / 2) return; if (!feature.Properties.ContainsKey("name")) return; @@ -50,9 +50,9 @@ private void Build(VectorFeatureUnity feature, UnityTile tile, GameObject parent var go = Instantiate(PoiPrefab); go.name = _key + " " + feature.Data.Id.ToString(); - var rx = (met.x - tile.Rect.min.x) / tile.Rect.width; - var ry = 1 - (met.z - tile.Rect.min.y) / tile.Rect.height; - var h = tile.QueryHeightData(rx, ry); + var rx = (met.x - tile.Rect.Min.x) / tile.Rect.Size.x; + var ry = 1 - (met.z - tile.Rect.Min.y) / tile.Rect.Size.y; + var h = tile.QueryHeightData((float)rx, (float)ry); met.y += h; go.transform.position = met; go.transform.SetParent(parent.transform, false); diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/VectorLayerVisualizer.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/VectorLayerVisualizer.cs index 7444acae7..1f61cf1b9 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/VectorLayerVisualizer.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/LayerVisualizers/VectorLayerVisualizer.cs @@ -55,7 +55,7 @@ public override void Create(VectorTileLayer layer, UnityTile tile) for (int i = 0; i < fc; i++) { filterOut = false; - var feature = new VectorFeatureUnity(layer.GetFeature(i, 0), tile); + var feature = new VectorFeatureUnity(layer.GetFeature(i, 0), tile, layer.Extent); foreach (var filter in Filters) { if (!string.IsNullOrEmpty(filter.Key) && !feature.Properties.ContainsKey(filter.Key)) @@ -110,7 +110,8 @@ private void Build(VectorFeatureUnity feature, UnityTile tile, GameObject parent } //we'll run all visualizers on MeshData here - var list = geometry.Select(x => Conversions.GeoToWorldPosition(x.Lat, x.Lng, tile.Rect.center).ToVector3xz()).ToList(); + var list = geometry; + //.Select(x => Conversions.GeoToWorldPosition(x.Lat, x.Lng, tile.Rect.Center).ToVector3xz()).ToList(); //long straight edges looks bad on bumpy terrain if (_subdivideLongEdges) @@ -143,7 +144,7 @@ private void Build(VectorFeatureUnity feature, UnityTile tile, GameObject parent //we may move this into height modifier in the future meshData.Vertices = list.Select(vertex => { - var h = tile.QueryHeightData((vertex.x + tile.Rect.size.x / 2) / tile.Rect.size.x, (tile.Rect.size.y - (vertex.z + tile.Rect.size.y / 2)) / tile.Rect.size.y); + var h = tile.QueryHeightData((float)((vertex.x + tile.Rect.Size.x / 2) / tile.Rect.Size.x), (float)((vertex.z + tile.Rect.Size.y / 2) / tile.Rect.Size.y)); vertex += new Vector3(0, h, 0); if (feature.Properties.ContainsKey("min_height")) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index 7403d8d6c..224ce95d7 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -6,11 +6,11 @@ namespace Mapbox.Unity.MeshGeneration using Mapbox.Unity; using Mapbox.Platform; using Mapbox.Unity.Utilities; + using Utils; public class MapController : MonoBehaviour { - private IFileSource _fileSource; - public static Rect ReferenceTileRect { get; set; } + public static RectD ReferenceTileRect { get; set; } public static float WorldScaleFactor { get; set; } public MapVisualization MapVisualization; @@ -29,8 +29,7 @@ public class MapController : MonoBehaviour public void Awake() { - _fileSource = MapboxAccess.Instance; - MapVisualization.Initialize(this, _fileSource); + MapVisualization.Initialize(MapboxAccess.Instance); _tiles = new Dictionary(); } @@ -72,10 +71,10 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) _root = new GameObject("worldRoot"); - var v2 = Conversions.GeoToWorldPosition(lat, lng, new Vector2(0, 0)); + var v2 = Conversions.GeoToWorldPosition(lat, lng, new Vector2d(0, 0)); var tms = Conversions.MetersToTile(v2, zoom); ReferenceTileRect = Conversions.TileBounds(tms, zoom); - WorldScaleFactor = TileSize / ReferenceTileRect.width; + WorldScaleFactor = (float)(TileSize / ReferenceTileRect.Size.x); _root.transform.localScale = Vector3.one * WorldScaleFactor; for (int i = (int)(tms.x - frame.x); i <= (tms.x + frame.z); i++) @@ -88,7 +87,7 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)lat, Zoom); tile.TileCoordinate = new Vector2(i, j); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); - tile.transform.position = new Vector3(tile.Rect.center.x - ReferenceTileRect.center.x, 0, tile.Rect.center.y - ReferenceTileRect.center.y); + tile.transform.position = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), 0, (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); tile.transform.SetParent(_root.transform, false); MapVisualization.ShowTile(tile); } @@ -116,10 +115,10 @@ public void Request(Vector2 pos, int zoom) tile.TileCoordinate = new Vector2(pos.x, pos.y); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / - Conversions.GetTileScaleInMeters((float)Conversions.MetersToLatLon(tile.Rect.center).Latitude, Zoom); - tile.transform.localPosition = new Vector3(tile.Rect.center.x - ReferenceTileRect.center.x, + Conversions.GetTileScaleInMeters((float)Conversions.MetersToLatLon(tile.Rect.Center).x, Zoom); + tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), 0, - tile.Rect.center.y - ReferenceTileRect.center.y); + (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); MapVisualization.ShowTile(tile); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs index 24a5794d8..525289c93 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs @@ -12,11 +12,11 @@ public class MapVisualization : ScriptableObject { public List Factories; - public void Initialize(MonoBehaviour runner, IFileSource fs) + public void Initialize(IFileSource fs) { foreach (Factory fac in Factories.Where(x => x != null)) { - fac.Initialize(runner, fs); + fac.Initialize(fs); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/UvModifier.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/UvModifier.cs index 6c0d381d7..e7a734f07 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/UvModifier.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/UvModifier.cs @@ -17,8 +17,8 @@ public override void Run(VectorFeatureUnity feature, MeshData md) { if (UseSatelliteRoof) { - var fromBottomLeft = new Vector2((c.x + md.TileRect.width / 2) / md.TileRect.width, - ((c.z + md.TileRect.width / 2) / md.TileRect.width)); + var fromBottomLeft = new Vector2((float)((c.x + md.TileRect.Size.x / 2) / md.TileRect.Size.x), + (float)((c.z + md.TileRect.Size.x / 2) / md.TileRect.Size.x)); uv.Add(fromBottomLeft); } else diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Utilities/Conversions.cs b/sdkproject/Assets/Mapbox/Core/Unity/Utilities/Conversions.cs index 8bdc879af..7f24816d1 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Utilities/Conversions.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Utilities/Conversions.cs @@ -21,14 +21,14 @@ public static class Conversions private const double OriginShift = 2 * Math.PI * EarthRadius / 2; /// - /// Converts struct, WGS84 + /// Converts struct, WGS84 /// lat/lon to Spherical Mercator EPSG:900913 xy meters. /// - /// The . - /// A of coordinates in meters. - private static Vector2 LatLonToMeters(GeoCoordinate v) + /// The . + /// A of coordinates in meters. + private static Vector2d LatLonToMeters(Vector2d v) { - return LatLonToMeters(v.Latitude, v.Longitude); + return LatLonToMeters(v.x, v.y); } /// @@ -37,46 +37,46 @@ private static Vector2 LatLonToMeters(GeoCoordinate v) /// /// The latitude. /// The longitude. - /// A of xy meters. - private static Vector2 LatLonToMeters(double lat, double lon) + /// A of xy meters. + private static Vector2d LatLonToMeters(double lat, double lon) { var posx = lon * OriginShift / 180; var posy = Math.Log(Math.Tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180); posy = posy * OriginShift / 180; //losing precision by converting to float here if lat/lng is too high/low. //prefer using GeoToWorldPosition - return new Vector2((float)posx, (float)posy); + return new Vector2d((float)posx, (float)posy); } - public static Vector2 GeoToWorldPosition(double lat, double lon, Vector2 refPoint, float scale = 1) + public static Vector2d GeoToWorldPosition(double lat, double lon, Vector2d refPoint, float scale = 1) { var posx = lon * OriginShift / 180; var posy = Math.Log(Math.Tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180); posy = posy * OriginShift / 180; - return new Vector2((float)((posx - refPoint.x) * scale), (float)((posy - refPoint.y) * scale)); + return new Vector2d((posx - refPoint.x) * scale, (posy - refPoint.y) * scale); } /// /// Converts Spherical Mercator EPSG:900913 in xy meters to WGS84 lat/lon. /// Inverse of LatLonToMeters. /// - /// A of coordinates in meters. - /// The in lat/lon. - public static GeoCoordinate MetersToLatLon(Vector2 m) + /// A of coordinates in meters. + /// The in lat/lon. + public static Vector2d MetersToLatLon(Vector2d m) { var vx = (m.x / OriginShift) * 180; var vy = (m.y / OriginShift) * 180; vy = 180 / Math.PI * (2 * Math.Atan(Math.Exp(vy * Math.PI / 180)) - Math.PI / 2); - return new GeoCoordinate(vy, vx); + return new Vector2d(vy, vx); } /// /// Gets the xy tile ID from Spherical Mercator EPSG:900913 xy coords. /// - /// XY coords in meters. + /// XY coords in meters. /// Zoom level. - /// A xy tile ID. - public static Vector2 MetersToTile(Vector2 m, int zoom) + /// A xy tile ID. + public static Vector2 MetersToTile(Vector2d m, int zoom) { var p = MetersToPixels(m, zoom); return PixelsToTile(p); @@ -85,14 +85,14 @@ public static Vector2 MetersToTile(Vector2 m, int zoom) /// /// Gets the tile bounds in Spherical Mercator EPSG:900913 meters from an xy tile ID. /// - /// XY tile ID. + /// XY tile ID. /// Zoom level. /// A in meters. - public static Rect TileBounds(Vector2 t, int zoom) + public static RectD TileBounds(Vector2 tileCoordinate, int zoom) { - var min = PixelsToMeters(new Vector2(t.x * TileSize, t.y * TileSize), zoom); - var max = PixelsToMeters(new Vector2((t.x + 1) * TileSize, (t.y + 1) * TileSize), zoom); - return new Rect(min, max - min); + var min = PixelsToMeters(new Vector2d(tileCoordinate.x * TileSize, tileCoordinate.y * TileSize), zoom); + var max = PixelsToMeters(new Vector2d((tileCoordinate.x + 1) * TileSize, (tileCoordinate.y + 1) * TileSize), zoom); + return new RectD(min, max - min); } /// @@ -102,14 +102,14 @@ public static Rect TileBounds(Vector2 t, int zoom) /// The latitude. /// The longitude. /// Zoom level. - /// A xy tile ID. - public static Vector2 LatitudeLongitudeToTileId(float latitude, float longitude, int zoom) + /// A xy tile ID. + public static Vector2d LatitudeLongitudeToTileId(float latitude, float longitude, int zoom) { var x = (int)Math.Floor((longitude + 180.0) / 360.0 * Math.Pow(2.0, zoom)); var y = (int)Math.Floor((1.0 - Math.Log(Math.Tan(latitude * Math.PI / 180.0) + 1.0 / Math.Cos(latitude * Math.PI / 180.0)) / Math.PI) / 2.0 * Math.Pow(2.0, zoom)); - return new Vector2(x, y); + return new Vector2d(x, y); } /// @@ -142,17 +142,17 @@ public static double TileYToNWLatitude(int y, int zoom) } /// - /// Gets the of a tile. + /// Gets the of a tile. /// /// Tile X position. /// Tile Y position. /// Zoom level. - /// The of the tile. - public static GeoCoordinateBounds TileIdToBounds(int x, int y, int zoom) + /// The of the tile. + public static Vector2dBounds TileIdToBounds(int x, int y, int zoom) { - var sw = new GeoCoordinate(TileYToNWLatitude(y, zoom), TileXToNWLongitude(x + 1, zoom)); - var ne = new GeoCoordinate(TileYToNWLatitude(y + 1, zoom), TileXToNWLongitude(x, zoom)); - return new GeoCoordinateBounds(sw, ne); + var sw = new Vector2d(TileYToNWLatitude(y, zoom), TileXToNWLongitude(x + 1, zoom)); + var ne = new Vector2d(TileYToNWLatitude(y + 1, zoom), TileXToNWLongitude(x, zoom)); + return new Vector2dBounds(sw, ne); } /// @@ -161,12 +161,12 @@ public static GeoCoordinateBounds TileIdToBounds(int x, int y, int zoom) /// Tile X position. /// Tile Y position. /// Zoom level. - /// A of lat/lon coordinates. - public static Vector2 TileIdToCenterLatitudeLongitude(int x, int y, int zoom) + /// A of lat/lon coordinates. + public static Vector2d TileIdToCenterLatitudeLongitude(int x, int y, int zoom) { var bb = TileIdToBounds(x, y, zoom); var center = bb.Center; - return new Vector2((float)center.Latitude, (float)center.Longitude); + return new Vector2d((float)center.x, (float)center.y); } /// @@ -208,23 +208,23 @@ private static double Resolution(int zoom) return InitialResolution / Math.Pow(2, zoom); } - private static Vector2 PixelsToMeters(Vector2 p, int zoom) + private static Vector2d PixelsToMeters(Vector2d p, int zoom) { var res = Resolution(zoom); - var met = new Vector2(); + var met = new Vector2d(); met.x = (float)(p.x * res - OriginShift); met.y = (float)-(p.y * res - OriginShift); return met; } - private static Vector2 MetersToPixels(Vector2 m, int zoom) + private static Vector2d MetersToPixels(Vector2d m, int zoom) { var res = Resolution(zoom); - var pix = new Vector2((float)((m.x + OriginShift) / res), (float)((-m.y + OriginShift) / res)); + var pix = new Vector2d((float)((m.x + OriginShift) / res), (float)((-m.y + OriginShift) / res)); return pix; } - private static Vector2 PixelsToTile(Vector2 p) + private static Vector2 PixelsToTile(Vector2d p) { var t = new Vector2((int)Math.Ceiling(p.x / (double)TileSize) - 1, (int)Math.Ceiling(p.y / (double)TileSize) - 1); return t; diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Utilities/VectorExtensions.cs b/sdkproject/Assets/Mapbox/Core/Unity/Utilities/VectorExtensions.cs index 74c547201..5e77131e9 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Utilities/VectorExtensions.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Utilities/VectorExtensions.cs @@ -16,30 +16,40 @@ public static Vector3 ToVector3xz(this Vector2 v) return new Vector3(v.x, 0, v.y); } + public static Vector3 ToVector3xz(this Vector2d v) + { + return new Vector3((float)v.x, 0, (float)v.y); + } + public static Vector2 ToVector2xz(this Vector3 v) { return new Vector3(v.x, v.z); } - public static void MoveToGeocoordinate(this Transform t, double lat, double lng, Vector2 refPoint, float scale = 1) + public static Vector2d ToVector2d(this Vector3 v) + { + return new Vector2d(v.x, v.z); + } + + public static void MoveToGeocoordinate(this Transform t, double lat, double lng, Vector2d refPoint, float scale = 1) { t.position = Conversions.GeoToWorldPosition(lat, lng, refPoint, scale).ToVector3xz(); } - public static void MoveToGeocoordinate(this Transform t, Vector2 latLon, Vector2 refPoint, float scale = 1) + public static void MoveToGeocoordinate(this Transform t, Vector2d latLon, Vector2d refPoint, float scale = 1) { t.MoveToGeocoordinate(latLon.x, latLon.y, refPoint, scale); } - public static Vector3 AsUnityPosition(this Vector2 latLon, Vector2 refPoint, float scale = 1) + public static Vector3 AsUnityPosition(this Vector2 latLon, Vector2d refPoint, float scale = 1) { - return Conversions.GeoToWorldPosition(latLon.x, latLon.y, refPoint, scale); + return Conversions.GeoToWorldPosition(latLon.x, latLon.y, refPoint, scale).ToVector3xz(); } - public static GeoCoordinate GetGeoPosition(this Transform t, Vector2 refPoint, float scale = 1) + public static Vector2d GetGeoPosition(this Transform t, Vector2d refPoint, float scale = 1) { - var pos = refPoint.ToVector3xz() + (t.position / scale); - return Conversions.MetersToLatLon(pos.ToVector2xz()); + var pos = refPoint + (t.position / scale).ToVector2d(); + return Conversions.MetersToLatLon(pos); } // TODO: add ability to get geo position from a vector2 or vector 3, as well (not just transform). diff --git a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs index 143214920..317a58bfc 100644 --- a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs +++ b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs @@ -21,10 +21,10 @@ void Start() public void Query() { - var waypoints = new List(); + var waypoints = new List(); foreach (var wp in Waypoints) { - waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceTileRect.center, MapController.WorldScaleFactor)); + waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceTileRect.Center, MapController.WorldScaleFactor)); } Directions.Query(waypoints); diff --git a/sdkproject/Assets/Mapbox/Examples/MeshGenerationBasics/MapVisualization/Factories/MeshFactory.asset b/sdkproject/Assets/Mapbox/Examples/MeshGenerationBasics/MapVisualization/Factories/MeshFactory.asset index e1d43e53b..45a9743ed 100644 --- a/sdkproject/Assets/Mapbox/Examples/MeshGenerationBasics/MapVisualization/Factories/MeshFactory.asset +++ b/sdkproject/Assets/Mapbox/Examples/MeshGenerationBasics/MapVisualization/Factories/MeshFactory.asset @@ -11,6 +11,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 63d97cb1cfb3f1b499c24763afa54873, type: 3} m_Name: MeshFactory m_EditorClassIdentifier: + _mapId: mapbox.mapbox-streets-v7 Visualizers: - {fileID: 11400000, guid: 49b5b5cab8982084a986f2d148acff42, type: 2} - {fileID: 11400000, guid: e71aac5125636534886a86af764815c9, type: 2} diff --git a/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/DirectionsExample.cs b/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/DirectionsExample.cs index 0244f403a..9a6411762 100644 --- a/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/DirectionsExample.cs +++ b/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/DirectionsExample.cs @@ -32,7 +32,7 @@ public class DirectionsExample : MonoBehaviour Directions _directions; - GeoCoordinate[] _coordinates; + Vector2d[] _coordinates; DirectionResource _directionResource; @@ -42,7 +42,7 @@ void Start() _startLocationGeocoder.OnGeocoderResponse += StartLocationGeocoder_OnGeocoderResponse; _endLocationGeocoder.OnGeocoderResponse += EndLocationGeocoder_OnGeocoderResponse; - _coordinates = new GeoCoordinate[2]; + _coordinates = new Vector2d[2]; // Can we make routing profiles an enum? _directionResource = new DirectionResource(_coordinates, RoutingProfile.Driving); diff --git a/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/RasterTileExample.cs b/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/RasterTileExample.cs index 5b212f8f9..5c7c5a9c7 100644 --- a/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/RasterTileExample.cs +++ b/sdkproject/Assets/Mapbox/Examples/Playground/Scripts/RasterTileExample.cs @@ -45,7 +45,7 @@ public class RasterTileExample : MonoBehaviour, Mapbox.Utils.IObserver