[geos-devel] lbgeos intersect skips first coordinates

Hector Nunez hndiaz at yahoo.com
Wed Jul 14 14:07:10 PDT 2021


 Hi,
it is consistent this different which causes different results.
Thanks
    On Wednesday, July 14, 2021, 11:55:28 a.m. EDT, Martin Davis <mtnclimb at gmail.com> wrote:  
 
 The overlay operations do not necessarily preserve the exact sequence of input vertices.  This is the case for both GEOS and JTS.  If you are seeing a different, preferred order in JTS it's just by chance.
On Wed, Jul 14, 2021 at 7:46 AM Hector Nunez <hndiaz at yahoo.com> wrote:

Hi,
I found that the I use intersects the result shows that the first coordinates is not used.Here is a sample that I did using two same geometries that shows the issue.I tested similar code in Java using JTS and I don't have this issue.

        // SIMPLE SIMULATION OF THE PROBLEM USING INTERSECTION using GEOS 3.9.1        geos::geom::GeometryFactory::Ptr Factory= geos::geom::GeometryFactory::create();        geos::geom::CoordinateSequence::Ptr coord_seq = Factory->getCoordinateSequenceFactory()->create((size_t)5, (size_t)0);
        coord_seq->setAt(geos::geom::Coordinate(-180, 85.0), 0);        coord_seq->setAt(geos::geom::Coordinate(180, 85.0), 1);        coord_seq->setAt(geos::geom::Coordinate(180, -85.0), 2);        coord_seq->setAt(geos::geom::Coordinate(-180, -85.0), 3);        coord_seq->setAt(geos::geom::Coordinate(-180, 85.0), 4);
        geos::geom::LinearRing * shell_test = Factory->createLinearRing(coord_seq.release());        geos::geom::Geometry::Ptr geom = std::unique_ptr<geos::geom::Geometry>(Factory->createPolygon(shell_test, NULL));
        const geos::geom::Geometry::Ptr other = geom->clone();
        for (size_t i = 0; i<geom->getNumPoints(); i++)          printf( "geom %d [x=%f,y=%f]\n", i+1, geom->getCoordinates()->getX(i), geom->getCoordinates()->getY(i));
        if (geom->intersects(other.get()))        {          std::cout << "GEOMETRIES INTERSECTS !!!!!"<< std::endl;
          const geos::geom::Geometry::Ptr geom_intersected = geom->intersection(other.get());
          for (size_t i = 0; i<geom_intersected->getNumPoints(); i++)            printf( "geom_intersected %d [x=%f,y=%f]\n", i+1, geom_intersected->getCoordinates()->getX(i), geom_intersected->getCoordinates()->getY(i));
          if (geom->compareTo(geom_intersected.get()))            std::cout << "GEOMETRIES AFTER INTERSECTION ARE NOT THE SAME !!!!!"<< std::endl;        }        /*        geom 1 [x=-150.000000,y=22.000000]        geom 2 [x=150.000000,y=22.000000]        geom 3 [x=150.000000,y=-22.000000]        geom 4 [x=-150.000000,y=-22.000000]        geom 5 [x=-150.000000,y=22.000000]        // it should start with -150        geom_intersected 1 [x=150.000000,y=22.000000]        geom_intersected 2 [x=150.000000,y=-22.000000]        geom_intersected 3 [x=-150.000000,y=-22.000000]        geom_intersected 4 [x=-150.000000,y=22.000000]        geom_intersected 5 [x=150.000000,y=22.000000]        */
Thanks
_______________________________________________
geos-devel mailing list
geos-devel at lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/geos-devel

_______________________________________________
geos-devel mailing list
geos-devel at lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/geos-devel
  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geos-devel/attachments/20210714/88c8ecec/attachment-0001.html>


More information about the geos-devel mailing list