Um dies zu beschleunigen, führt eine Datenbank wie PostGIS zunächst einen Index- und Begrenzungsrahmenvergleich durch. Zunächst werden alle Polygone gefunden, deren Begrenzungsrahmen sich mit dem Begrenzungsrahmen der Linie überschneiden. Das Problem in Ihrem Fall könnte sein, dass der Linienstreifen lang ist und einen sehr großen Begrenzungsrahmen aufweist, der viele Polygone schneidet, was nicht von Interesse ist.
Wenn die Linien sehr lang sind, müssen Sie wahrscheinlich auch mit geodätischen Funktionen arbeiten, die viel komplexer und langsamer sind als planare Funktionen.
Es kann ziemlich komplex sein, einen reibungslosen Ablauf zu gewährleisten.
Warum möchten Sie sich nicht auf eine Datenbank verlassen? Das wird nicht alle Ihre Probleme lösen, aber es gibt zum Beispiel viele eingebaute Optimierungen in PostGIS. Dort haben Sie auch die geodätischen Schnittberechnungen, wenn Sie diese benötigen.
Update:
Ich habe Ihre Frage erneut gelesen und festgestellt, dass Sie nicht den Linestring der Trac-Formulare verwenden, sondern jeden Scheitelpunkt.
Ich denke, Sie befinden sich auf der falschen Spur;)
Sowohl, weil Sie nicht prüfen können, ob die Kante zwischen den Scheitelpunkten das Polygon schneidet, als auch weil Sie die Iteration zwischen den Scheitelpunkten nach Python verschieben, anstatt nach einer C-Implementierung, die meiner Meinung nach viel schneller ist . Dann haben Sie dieses Problem mit Indizes. Um die Dinge schneller zu machen, müssen Sie eine Art räumlichen Index erstellen und verarbeiten.
Auf der anderen Seite, wenn Sie so viel Arbeit in Ihrem eigenen Code erledigen, warum machen Sie nicht auch den Kreuzungstest? Dieser Test ist nur ein Punkt im Polygontest, wenn Sie sich mit den Scheitelpunkten befassen. Google für "Punkt im Polygon" und Sie finden mehrere Algorithmen.
Aber ich würde mich für einen datenbankgesteuerten Ansatz entscheiden. Dadurch haben Sie die Möglichkeit, räumliche Indizes zu verwenden.
/ Nicklas