我在Xamarin Android和iOS上使用谷歌地图
我试图从随机抽头坐标创建一个近似多边形。
Android喜欢:
var options = new PolygonOptions();
options.InvokeFillColor(int.Parse("80000000", System.Globalization.NumberStyles.HexNumber));
options.InvokeStrokeColor(int.Parse("000000", System.Globalization.NumberStyles.HexNumber));
options.InvokeStrokeWidth(2);
options.AddAll(listOfPosition); //list of tapped coordinates
googleMap.AddPolygon(options);
iOS喜欢:
var polygon = new Polygon();
polygon.Path = path; // this is my list of tapped coordinates
polygon.StrokeWidth = 2;
polygon.StrokeColor = UIColor.Black;
polygon.FillColor = UIColor.FromRGBA(0, 0, 0, 0.3f);
polygon.Map = mapView;
假设我已经随机点击坐标:
Debug|LOCATION:: 37.9115841998119 : -122.566957734525
Debug|LOCATION:: 37.9117754470967 : -122.561504803598
Debug|LOCATION:: 37.9085008969633 : -122.566276118159
Debug|LOCATION:: 37.9086561762004 : -122.562640719116
Debug|LOCATION:: 37.9102216477146 : -122.561550065875
Debug|LOCATION:: 37.9098513127501 : -122.567805983126
Debug|LOCATION:: 37.9123967989511 : -122.564518935978
如何将其关闭多边形而不相交内线甚至可以将坐标达到100位置数据。任何想法或计算?谢谢提前..
答案 0 :(得分:1)
您不必在本地计算,使用Google地图的形状API
对本地的点进行排序以关闭多边形
答案 1 :(得分:0)
这是解决方案:)
你需要在Lat和Lon上获得最多的左派和最右派。
获取最小和最大纬度。
画一条线并先分开较低点和较高点
检查点是否高于或低于行的等式。
public static bool CheckIsUpperCoordinate(PositionData a, PositionData b, PositionData c)
{
var position = Math.Sign((b.Latitude - a.Latitude) * (c.Longitude - a.Longitude) - (b.Longitude - a.Longitude) * (c.Latitude - a.Latitude));
return position > 0 ? true : false; //true if upper , false if lower position
}
现在按经度排序lowerlist和upperlist。
var lowerPosition = lowerPositionList.OrderBy(x => x.Longitude).ToList();
var higherPosition = higherPositionList.OrderByDescending(x => x.Longitude).ToList();
并且最左边连接此序列中的所有点 - >低点列表 - >最右边 - >上部点列表
path.AddLatLon(leftMost.Latitude, leftMost.Longitude);
foreach (PositionData lowerData in lowerPosition)
{
path.AddLatLon(lowerData.Latitude, lowerData.Longitude);
}
path.AddLatLon(rightMost.Latitude, rightMost.Longitude);
foreach (PositionData higherData in higherPosition)
{
path.AddLatLon(higherData.Latitude, higherData.Longitude);
}
path.AddLatLon(leftMost.Latitude, leftMost.Longitude);
将其包裹在多边形
上var polygon = new Polygon();
polygon.Path = path;
polygon.StrokeWidth = 2;
polygon.StrokeColor = UIColor.Black;
polygon.FillColor = UIColor.FromRGBA(0, 0, 0, 0.3f);
polygon.Map = mapView;
希望它可以帮助某人:)
在完成这项任务后,我很欣赏我的数学老师。大声笑xd