@@ -4596,67 +4596,15 @@ GEOSGeometry* QgsGeometry::linePointDifference( GEOSGeometry* GEOSsplitPoint )
45964596 line = multiLine[i];
45974597 // For each segment
45984598 newline = QgsPolyline ();
4599- for ( int j = 1 ; j < line.size () ; ++j )
4600- {
4601- p1 = line[j-1 ];
4602- p2 = line[j];
4603- g = QgsGeometry::fromPolyline ( QgsPolyline () << p1 << p2 );
4604- QgsDebugMsg ( g->exportToWkt () );
4605- QgsDebugMsg ( splitPoint.toString () );
4606-
4607- newline.append ( p1 );
4608-
4609- double x1 = p1.x ();
4610- double y1 = p1.y ();
4611- double x2 = p2.x ();
4612- double y2 = p2.y ();
4613- double xt = splitPoint.x ();
4614- double yt = splitPoint.y ();
4615- double k;
4616- double diff;
4617- if ( x2 == x1 )
4618- {
4619- if ( y2 == y1 )
4620- {
4621- k = -1 ;
4622- diff = 1e50 ;
4623- }
4624- else
4625- {
4626- k = ( yt - y1 ) / ( y2 - y1 );
4627- diff = k * ( x2 - x1 ) - ( xt - x1 );
4628- }
4629- }
4630- else
4631- {
4632- k = ( xt - x1 ) / ( x2 - x1 );
4633- diff = k * ( y2 - y1 ) - ( yt - y1 );
4634- }
4635- if ( abs ( diff ) < 1e-7 )
4599+ newline.append (line[0 ]);
4600+ for ( int j = 1 ; j < line.size ()-1 ; ++j )
4601+ {
4602+ newline.append ( line[j] );
4603+ if ( line[j] == splitPoint )
46364604 {
4637- if ( k == 0 )
4638- {
4639- lines.append ( newline );
4640- newline = QgsPolyline ();
4641- newline.append ( p1 );
4642- }
4643- if ( k == 1 )
4644- {
4645- newline.append ( p2 );
4646- lines.append ( newline );
4647- newline = QgsPolyline ();
4648- }
4649- if ( k > 0 && k < 1 )
4650- {
4651- newline.append ( splitPoint );
4652- lines.append ( newline );
4653- newline = QgsPolyline ();
4654- newline.append ( splitPoint );
4655- }
4656- if ( k < 0 || k > 1 )
4657- {
4658- // Nothing happens, we are on the line but not the segment
4659- }
4605+ lines.append ( newline );
4606+ newline = QgsPolyline ();
4607+ newline.append ( line[j] );
46604608 }
46614609 }
46624610 newline.append ( line.last () );
0 commit comments