1
Ich versuche den Teil einer Linienfolge innerhalb eines Polygons zu finden. Ich habe versucht, die intersection
Funktion, aber es scheint nur die tatsächlichen Schnittpunkte und nicht den Teil der Linienfolge, die das Polygon überlappt. Gibt es eine Möglichkeit, dieses Objekt zu bekommen?Schnittpunkt von boost :: geometry :: model :: linestring mit boost :: geometry :: model :: polygon
Hier ist eine Demo-Situation:
#include <iostream>
#include <fstream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/io/svg/svg_mapper.hpp>
#include <boost/geometry/geometries/linestring.hpp>
using point_type = boost::geometry::model::d2::point_xy<double>;
using polygon_type = boost::geometry::model::polygon<point_type>;
using linestring_type = boost::geometry::model::linestring<point_type>;
int main()
{
polygon_type polygon;
polygon.outer().push_back(point_type{10,10});
polygon.outer().push_back(point_type{12,10});
polygon.outer().push_back(point_type{12,12});
polygon.outer().push_back(point_type{10,12});
polygon.outer().push_back(point_type{10,10});
linestring_type linestring;
linestring.push_back(point_type{11,9});
linestring.push_back(point_type{11,11});
linestring.push_back(point_type{13,11});
// Expected intersections at (11, 10) and (12, 11)
std::ofstream svg("both.svg");
linestring_type output;
boost::geometry::intersection(polygon, linestring, output);
for(auto iter = output.begin(); iter != output.end(); ++iter) {
std::cout << boost::geometry::get<0>(*iter) << " " << boost::geometry::get<1>(*iter) << std::endl;
}
// The output is:
// 11 10
// 12 11
// But I want it to be:
// 11 10
// 11 11
// 12 11
return 0;
}
Es ist nicht "erscheinen" so. Sie zitieren im Grunde die Dokumentation hier. – sehe
@sehe Es ist überhaupt nicht offensichtlich von http://www.boost.org/doc/libs/1_61_0/libs/geometry/doc/html/geometry/reference/algorithms/intersection.html welche Typen erwartet werden sollten Tonnen von Kombinationen von möglichen Eingabearten. Der erste Weg, den ich versucht habe, ich denke, ich hätte die richtige Antwort erwartet, wenn in diesem Fall eine Linienfolge als Ausgabe erzeugt wird, da es keine getrennte (Mehrfach-) Linienfolge ist. Wie auch immer, das Beispiel ist jetzt hier für diejenigen, die das wollen :) –
Von diesem Link: _ "GeometryOut & Sammlung von Geometrien: (zB Std :: Vektor, Std :: Deque, Boost :: Geometrie :: Multi *) von denen der value_type ein Point-, LineString- oder Polygon-Konzept erfüllt, oder es ist die Ausgabe-Geometrie (zB für eine Box) "_ Ich frage mich wirklich, welche Informationen hinzugefügt werden könnten. Außerdem ist das Beispiel bereits auf der gleichen Dokumentationsseite vorhanden. – sehe