using System; using System.Collections.Generic; using UnityEngine; public class SimplifyPoly : MonoBehaviour { public double minMagnitude = 4; private List points; private OnlineMaps map; private OnlineMapsDrawingPoly poly; private OnlineMapsTileSetControl control; private bool needUpdatePoints; private void OnRequestComplete(OnlineMapsWWW www) { OnlineMapsJSONItem json = OnlineMapsJSON.Parse(www.text); points = new List(); OnlineMapsJSONItem items = json["features/0/geometry/coordinates/0"]; foreach (OnlineMapsJSONItem c in items) { OnlineMapsVector2d p = new OnlineMapsVector2d(c[0].V(), c[1].V()); points.Add(p); } poly = new OnlineMapsDrawingPoly(new List(), Color.yellow, 3); OnlineMapsDrawingElementManager.AddItem(poly); UpdatePoints(); map.OnChangeZoom += OnChangeZoom; control.OnMeshUpdated += OnMeshUpdated; map.Redraw(); } private void OnMeshUpdated() { if (!needUpdatePoints) return; UpdatePoints(); } private void OnChangeZoom() { needUpdatePoints = true; } private void UpdatePoints() { List ps = new List(); OnlineMapsVector2d p = points[0]; Vector3 lwp = control.GetWorldPosition(p.x, p.y); ps.Add(p); for (int i = 1; i < points.Count; i++) { p = points[i]; Vector3 wp = control.GetWorldPosition(p.x, p.y); if ((wp - lwp).sqrMagnitude > minMagnitude) { lwp = wp; ps.Add(p); } } poly.points = ps; Debug.Log(ps.Count); needUpdatePoints = false; map.Redraw(); } private void Start() { map = OnlineMaps.instance; control = OnlineMapsTileSetControl.instance; new OnlineMapsWWW("http://umap.openstreetmap.fr/en/datalayer/442532/").OnComplete += OnRequestComplete; } }