了解iOS应用程序中的GPS值列表

时间:2014-05-02 00:33:02

标签: ios7 xamarin.ios gps cllocation

我有一个与谷歌地图API接口的网络服务,可以在谷歌地图上生成多边形。该服务获取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 / MKPolygonRenderer提供相同类型的随机行混乱。除了使随机线在视图中上下移动之外,OrderBy LINQ没有任何区别。

1 个答案:

答案 0 :(得分:0)

由于您不知道捕获点的顺序,因此您无法追踪围绕围场周围的实际路径;这就是为什么你的折线在整个地图上变成愚蠢的行走。缺乏这些信息,你最多可以做出有根据的猜测。

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

  • 取所有积分的平均值来得到一个位于中间的地方&#34;点,然后按atan2(l.latitude - middle.latitude, l.longitude - middle.longitude)订购。 (注意,atan2未定义(0, 0)!)
  • 获取所捕捉点数的convex hull:对于相对较少的点数,您可以使用简单的二次时间Jarvis's march来逃避。这有一个近似的效果,即通过丢弃可能形成凹陷的点来围绕地图推针的外部包裹一个名义橡皮筋,并且还应该给出剩余点的顺序。