我有一个与谷歌地图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没有任何区别。
答案 0 :(得分:0)
由于您不知道捕获点的顺序,因此您无法追踪围绕围场周围的实际路径;这就是为什么你的折线在整个地图上变成愚蠢的行走。缺乏这些信息,你最多可以做出有根据的猜测。
您可能想尝试的一些可能的启发式方法:
atan2(l.latitude - middle.latitude, l.longitude - middle.longitude)
订购。 (注意,atan2
未定义(0, 0)
!)