Ios7 在iOS应用程序中理解GPS值列表

Ios7 在iOS应用程序中理解GPS值列表,ios7,xamarin.ios,gps,cllocation,Ios7,Xamarin.ios,Gps,Cllocation,我有一个web服务,它与google maps API接口,在google地图上生成多边形。该服务获取GPS值并存储以供检索 问题是,当我尝试在iPhone应用程序上使用这些值时,MKPolyline要么是一团乱麻,要么是一堆锯齿形的线 有没有办法理解这些值,以便重建多边形 我当前的代码如下所示 private void GenerateMap() { var latCoord = new List<double>(); var longCoo

我有一个web服务,它与google maps API接口,在google地图上生成多边形。该服务获取GPS值并存储以供检索

问题是,当我尝试在iPhone应用程序上使用这些值时,MKPolyline要么是一团乱麻,要么是一堆锯齿形的线

有没有办法理解这些值,以便重建多边形

我当前的代码如下所示

private void GenerateMap()
    {
        var latCoord = new List<double>();
        var longCoord = new List<double>();
        var pad = AppDelegate.Self.db.GetPaddockFromCrop(crop);
        mapMapView.MapType = MKMapType.Standard;
        mapMapView.ZoomEnabled = true;
        mapMapView.ScrollEnabled = false;

        mapMapView.OverlayRenderer = (m, o) =>
        {
            if (o.GetType() == typeof(MKPolyline))
            {
                var p = new MKPolylineRenderer((MKPolyline)o);
                p.LineWidth = 2.0f;
                p.StrokeColor = UIColor.Green;
                return p;
            }
            else
                return null;
        };

        scMapType.ValueChanged += (s, e) =>
        {
            switch (scMapType.SelectedSegment)
            {
                case 0:
                    mapMapView.MapType = MKMapType.Standard;
                    break;
                case 1:
                    mapMapView.MapType = MKMapType.Satellite;
                    break;
                case 2:
                    mapMapView.MapType = MKMapType.Hybrid;
                    break;
            }
        };

        if (pad.Boundaries != null)
        {
            var bounds = pad.Boundaries.OrderBy(t => t.latitude).ThenBy(t => t.longitude).ToList();
            foreach (var l in bounds)
            {
                double lat = l.latitude;
                double lon = l.longitude;

                latCoord.Add(lat);
                longCoord.Add(lon);
            }

            if (latCoord.Count != 0)
            {
                if (latCoord.Count > 0)
                {
                    var coord = new List<CLLocationCoordinate2D>();
                    for (int i = 0; i < latCoord.Count; ++i)
                    {
                        var c = new CLLocationCoordinate2D();
                        c.Latitude = latCoord[i];
                        c.Longitude = longCoord[i];
                        coord.Add(c);
                    }
                    var line = MKPolyline.FromCoordinates(coord.ToArray());  
                    mapMapView.AddOverlay(line);
                    mapMapView.SetVisibleMapRect(line.BoundingMapRect, true);
                }
            }
        }
    }

MKPolygon/MKPolygon渲染器提供相同种类的随机线混乱。OrderBy LINQ除了使随机线在视图上下呈之字形外没有任何区别。

由于您不知道捕捉点的顺序,因此无法追踪围场周围的实际路径;这就是为什么你的多段线在地图上变成了愚蠢的散步。如果没有这些信息,你最多只能做出有根据的猜测

您可能想尝试一些可能的启发式方法:

取所有点的平均值,得到中间点的某个点,然后按纬度-中间纬度,L.经度-中点。经度排序。小心,atan2在0,0处未定义! 以捕获的点为例:对于相对较少的点,您可以使用简单的二次时间。这样做的大致效果是,通过丢弃会形成凹面的点,在地图图钉的外侧缠绕一条概念上的橡皮筋,并且还应给出剩余点的顺序。
是存储每个坐标的时间戳,还是仅存储一对坐标值?iOS渲染器按照给定的精确顺序绘制线条。您必须记住坐标的顺序,并以相同的顺序将它们赋给多边形。否则,您必须按照答案所示,尝试用最佳猜测重新构造多边形。