Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dependencies/mapbox-sdk-cs
Submodule mapbox-sdk-cs updated 37 files
+4 −4 src/Directions/DirectionResource.cs
+2 −2 src/Directions/Response/Intersection.cs
+1 −1 src/Directions/Response/Maneuver.cs
+2 −2 src/Directions/Response/Route.cs
+2 −2 src/Directions/Response/Step.cs
+2 −2 src/Directions/Response/Waypoint.cs
+7 −7 src/Geocoding/ForwardGeocodeResource.cs
+4 −4 src/Geocoding/Response/Feature.cs
+2 −2 src/Geocoding/Response/Geometry.cs
+4 −4 src/Geocoding/ReverseGeocodeResource.cs
+2 −2 src/Map/CanonicalTileId.cs
+5 −5 src/Map/Map.cs
+7 −7 src/Map/TileCover.cs
+35 −35 src/Utils/GeoCoordinate.cs
+42 −42 src/Utils/GeoCoordinateBounds.cs
+12 −12 src/Utils/JsonConverters/BboxToGeoCoordinateBoundsConverter.cs
+3 −3 src/Utils/JsonConverters/JsonConverters.cs
+10 −10 src/Utils/JsonConverters/LonLatToGeoCoordinateConverter.cs
+8 −8 src/Utils/JsonConverters/PolylineToGeoCoordinateListConverter.cs
+9 −9 src/Utils/PolylineUtils.cs
+6 −0 src/Utils/Utils.csproj
+352 −0 src/Utils/Vector2d/Mathd.cs
+25 −0 src/Utils/Vector2d/RectD.cs
+263 −0 src/Utils/Vector2d/Vector2d.cs
+9 −9 test/UnitTest/BboxToGeoCoordinateBoundsConverterTest.cs
+3 −3 test/UnitTest/CanonicalTileIdTest.cs
+1 −1 test/UnitTest/DirectionResourceTest.cs
+2 −2 test/UnitTest/ForwardGeocodeResourceTest.cs
+26 −26 test/UnitTest/GeoCoordinateBoundsTest.cs
+4 −4 test/UnitTest/GeoCoordinateTest.cs
+4 −4 test/UnitTest/LonLatToGeoCoordinateConverterTest.cs
+8 −8 test/UnitTest/MapTest.cs
+7 −7 test/UnitTest/PolylineToGeoCoordinateListConverterTest.cs
+11 −11 test/UnitTest/PolylineUtilsTest.cs
+1 −1 test/UnitTest/ReverseGeocodeResourceTest.cs
+6 −6 test/UnitTest/TileCoverTest.cs
+3 −3 test/UnitTest/VectorTileTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Vector3> Vertices { get; set; }
public List<List<int>> Triangles { get; set; }
public List<List<Vector2>> UV { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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<string, object> Properties { get; set; }
public List<List<LatLng>> 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<string, object> Properties { get; set; }
public List<List<Vector3>> Points;

public VectorFeatureUnity(VectorTileFeature feature, UnityTile tile, float layerExtent)
{
Data = feature;
Properties = Data.GetProperties();
Points = new List<List<Vector3>>();

for (int i = 0; i < feature.Geometry.Count; i++)
{
var nl = new List<Vector3>(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);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public class DirectionsFactory : Factory
private Directions _directions;
public List<MeshModifier> 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<GeoCoordinate> waypoints)
public void Query(List<Vector2d> waypoints)
{
var _directionResource = new DirectionResource(waypoints.ToArray(), RoutingProfile.Driving);
_directionResource.Steps = true;
Expand All @@ -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());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ public class MapImageFactory : Factory

private Dictionary<Vector2, UnityTile> _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<Vector2, UnityTile>();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ public class MeshFactory : Factory
private Dictionary<Vector2, UnityTile> _tiles;
private Dictionary<string, List<LayerVisualizerBase>> _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<Vector2, UnityTile>();
_layerBuilder = new Dictionary<string, List<LayerVisualizerBase>>();
foreach (LayerVisualizerBase factory in Visualizers)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<Vector2, UnityTile>();
}

Expand Down Expand Up @@ -83,30 +84,30 @@ private void CreateTerrain(UnityTile tile, Texture2D texture)
{
var go = tile.gameObject;
var mesh = new Mesh();
var verts = new List<Vector3>();
var verts = new List<Vector3>(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)));
}
}

mesh.SetVertices(verts);

//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<int>();
var trilist = new List<int>(sampleCount * sampleCount * 3);
for (int y = 0; y < sampleCount - 1; y++)
{
for (int x = 0; x < sampleCount - 1; x++)
Expand All @@ -122,7 +123,7 @@ private void CreateTerrain(UnityTile tile, Texture2D texture)
}
mesh.SetTriangles(trilist, 0);

var uvlist = new List<Vector2>();
var uvlist = new List<Vector2>(sampleCount * sampleCount);
var step = 1f / (sampleCount - 1);
for (int i = 0; i < sampleCount; i++)
{
Expand All @@ -134,7 +135,8 @@ private void CreateTerrain(UnityTile tile, Texture2D texture)
mesh.SetUVs(0, uvlist);
mesh.RecalculateNormals();
go.GetComponent<MeshFilter>().sharedMesh = mesh;
go.AddComponent<MeshCollider>();

//go.AddComponent<MeshCollider>();
//go.layer = LayerMask.NameToLayer("terrain");
}

Expand Down Expand Up @@ -204,10 +206,18 @@ private void CreateTileBase(UnityTile tile)
var mesh = new Mesh();
var verts = new List<Vector3>();

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<int>() { 0, 1, 2, 1, 3, 2 };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand All @@ -41,18 +41,18 @@ 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;

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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<Vector2, UnityTile>();
}

Expand Down Expand Up @@ -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++)
Expand All @@ -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);
}
Expand Down Expand Up @@ -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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ public class MapVisualization : ScriptableObject
{
public List<Factory> 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);
}
}

Expand Down
Loading