2017-07-21 3 views
1

Im mit Google Map auf Xamarin Android und iOSGoogle Map Android und iOS Xamarin: Erstellen schließen Polygon auf Zufall angezapft Koordinaten

Im Versuch, eine enge Polygon zu erstellen, die von zufälligen Tap-Koordinaten.

Android wie:

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 wie:

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; 

Lassen Sie sagen, ich getippt haben Koordinaten zufällig wie folgt aus:

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 

Wie kann ich es in der Nähe Polygon machen ohne sich zu schneiden Linien im Inneren sogar tippen können Koordinaten 100 Positionsdaten erreicht. Irgendeine Idee oder Berechnung? Dank Voraus ..

enter image description here

Antwort

1
+0

Ich mache bereits die API .. das Problem ist, wie kann es schließen Polygon auf zufälligen Koordinaten angezapft .. es Schnittpunkt jeder Zeile hängt von der Ort Sortierung .. – Rai

+0

Sie müssen PolygonOptions nicht das Polygon selbst – Mani

+0

I verwenden Verwenden Sie PolygonOptions für Xamarin Android. obigen Code ist für Xamarin iOS google map Version – Rai

0

Hier ist die Lösung :)

Sie benötigen die meisten links und am weitesten rechts auf Lat und Lon zu bekommen.

erhalten Sie den minimalen und maximalen Breitengrad.

enter image description here

eine Linie zeichnen und zuerst die unteren Punkte und die höheren Punkte

Prüfpunkte, wenn seine auf höher oder niedriger durch Gleichung Linie trennen.

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 
     } 

Sortieren Sie jetzt die untere und obere Liste nach ihrer Länge.

var lowerPosition = lowerPositionList.OrderBy(x => x.Longitude).ToList(); 
var higherPosition = higherPositionList.OrderByDescending(x => x.Longitude).ToList(); 

und schließen Sie alle Punkte aus dieser Sequenz am meisten links -> untere Punkteliste -> am weitesten rechts stehenden -> obere Punkteliste

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); 

wickeln Sie es auf Polygon

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; 

es Hoffnung kann jemandem helfen :)

Ich schätzte meine Math Lehrer nach dieser Aufgabe.lol xd

Verwandte Themen