2016-11-21 4 views
1

Ich versuche, eine Polylinie zu zeichnen, um eine Route innerhalb eines Polygons anzuzeigen. Die Polylinien müssen parallel zueinander sein und nicht außerhalb des Polygons liegen.Berechnen Sie Punkte für eine Polylinie in einem Polygon

Meine Erklärung war schrecklich, ich möchte etwas tun:

map example

Alle Tipps, wo man beginnen würde sehr geschätzt werden!

Ich brauche etwas für CäsiumJS in Angular 2 mit Typescript, aber jede Hilfe ist nützlich.

Antwort

1

In dem Beispiel, das Sie gezeigt haben, würde Ihre Polylinie keine tatsächlichen inneren Punkte benötigen, um spezifiziert zu werden. Sie können eine Kopie dieses Bildes erstellen, indem Sie nur die Punkte entlang des Umfangs des Rechtecks ​​in der Reihenfolge der Linie angeben (beginnend mit dem angegebenen Startpunkt). Der Algorithmus würde etwa so aussehen:

  1. Definieren Sie ein Rechteck von Interesse.

  2. Definieren Sie eine Linie, die die diagonale Neigung des Pfads innerhalb des Rechtecks ​​beschreibt.

  3. Generieren Sie eine Reihe von parallelen Linien, die das Rechteck vollständig abdecken und über seine Kanten hinausragen. Dies geschieht durch wiederholtes Hinzufügen oder Entfernen eines festen X- oder Y-Versatzes zu beiden Endpunkten der ursprünglichen Linie, sodass Sie eine Reihe paralleler Linien haben, die sich in alle Richtungen über das Rechteck hinaus erstrecken.

  4. Iterieren Sie die Reihe der Linien in der Reihenfolge (beginnend von jeder Seite und auf der gegenüberliegenden Seite), und suchen Sie nach Punkten, wo die Linie das Rechteck schneidet. Möglicherweise müssen Sie eine algorithm to find intersection points nachschlagen.

    a. Für jede Linie, die das Rechteck NICHT genau zweimal schneidet, verwerfen Sie die Linie.

    b. Für die übrigen Linien, die das Rechteck genau zweimal schneiden, fügen Sie beide Schnittpunkte zur Polylinie hinzu, aber geben Sie alternativ die Reihenfolge ein, in der sie hinzugefügt werden. Mit anderen Worten, wenn die vorherige Linie den Nord- und dann den Süd-Schnittpunkt hinzugefügt hat, sollte die aktuelle Linie ihren Süd-Schnittpunkt vor dem Nord-Schnittpunkt hinzufügen und umgekehrt.

  5. Nachdem nun alle Schnittpunkte zur Polylinie hinzugefügt wurden, können Sie diese Polylinie zu Ihrer Szene hinzufügen und rendern.

+0

So kam ich schließlich dazu, dies zu lösen. Ich benutze jetzt eine andere Bibliothek in Kombination mit Cäsium - https://github.com/chrisveness/geodesy. Die Berechnung der Kreuzung war der schwierigste Teil, und hier ist ein RunKit beschreibt, wie es geht - https://runkit.com/hnipps/calculate-geodesic-intersection – HNipps

Verwandte Themen