Geo-Geos

 view release on metacpan or  search on metacpan

Geos.xs  view on Meta::CPAN

using namespace geos::geom::prep;
using namespace geos::algorithm;
using namespace geos::noding;
using namespace geos::noding::snapround;
using namespace geos::io;
using namespace geos::index::chain;
using namespace geos::index;
using namespace geos::precision;
using namespace geos::operation::buffer;
using namespace geos::operation::distance;
using namespace geos::operation::overlay;
using namespace geos::operation::valid;
using namespace geos::operation::relate;
using namespace geos::operation::linemerge;
using namespace geos::triangulate;
using namespace xs;
using namespace Geo::Geos;
using namespace panda;

struct IntersectionFinderAdder_payload {
    using vector_t = std::vector<::geos::geom::Coordinate>;

lib/Geo/Geos/Operation.pod  view on Meta::CPAN


    use Geo::Geos::Coordinate;
    use Geo::Geos::Geometry qw/TYPE_CAP_ROUND/;
    use Geo::Geos::GeometryFactory;
    # imports constants:
    # TYPE_OP_INTERSECTION, TYPE_OP_UNION, TYPE_OP_DIFFERENCE, TYPE_OP_SYMDIFFERENCE,
    # TYPE_BOUNDARY_NODE_RULE_MOD2, TYPE_BOUNDARY_ENDPOINT, TYPE_BOUNDARY_MULTIVALENT_ENDPOINT
    # TYPE_BOUNDARY_MONOVALENT_ENDPOINT, TYPE_BOUNDARY_OGCSFS

    use Geo::Geos::Operation;
    use Geo::Geos::Operation qw/buffer distance nearestPoints closestPoints overlayOp relate
                           isValid mergeLines isSequenced sequence/;

    my $gf = Geo::Geos::GeometryFactory::create();
    my $c1 = Geo::Geos::Coordinate->new(1,2);
    my $c2 = Geo::Geos::Coordinate->new(5,2);
    my $in = $gf->createMultiPoint([$c1, $c2], 2);

    my $distance = 1.0;
    my $quadrantSegments = 1;
    my $capStyle = TYPE_CAP_ROUND;

lib/Geo/Geos/Operation.pod  view on Meta::CPAN

    my $g0 = $gf->createMultiPoint([$c11, $c12], 2);

    my $c21 = Geo::Geos::Coordinate->new(1,3);
    my $c22 = Geo::Geos::Coordinate->new(5,3);
    my $g1 = $gf->createMultiPoint([$c21, $c21], 2);

    distance($g0, $g1);        # => 1
    nearestPoints($g0, $g1);   # => is_deeply [Geo::Geos::Coordinate->new(1,2), Geo::Geos::Coordinate->new(1,3)]
    closestPoints($g0, $g1);   # => is_deeply [Geo::Geos::Coordinate->new(1,2), Geo::Geos::Coordinate->new(1,3)]

    # overlay
    overlayOp($g0, $g1, TYPE_OP_INTERSECTION);  # => isa 'Geo::Geos::Geometry'

    # valid
    isValid($g0);      # => successs

    # relate
    relate($g0, $g1);                          # => isa 'Geo::Geos::IntersectionMatrix'
    relate($g0, $g1, TYPE_BOUNDARY_OGCSFS);    # => isa 'Geo::Geos::IntersectionMatrix'

    # merge lines
    my $c_11 = Geo::Geos::Coordinate->new(1,2);

lib/Geo/Geos/Operation.pod  view on Meta::CPAN

=head1 SEE ALSO (C++ classes docs)

L<GEOS C++ Library|https://trac.osgeo.org/geos>

geos::algorithm::BoundaryNodeRule

geos::operation::buffer::BufferOp

geos::operation::distance::DistanceOp

geos::operation::overlay::OverlayOp

geos::operation::valid::IsValidOp

geos::operation::relate::RelateOp

geos::operation::linemerge::LineMerger

geos::operation::linemerge::LineSequencer

=head1 EXPORTS CONSTANTS

src/xs/geos/operation.h  view on Meta::CPAN

#pragma once

#include "geos/operation/buffer/BufferOp.h"
#include "geos/operation/buffer/BufferParameters.h"
#include "geos/operation/distance/DistanceOp.h"
#include "geos/operation/overlay/OverlayOp.h"
#include "geos/operation/valid/IsValidOp.h"
#include "geos/algorithm/BoundaryNodeRule.h"
#include "geos/operation/relate/RelateOp.h"
#include "geos/operation/linemerge/LineMerger.h"
#include "geos/operation/linemerge/LineSequencer.h"

t/62-Operation-Overlay.t  view on Meta::CPAN

use 5.012;
use warnings;
use Test::More;
use Test::Warnings;

use Geo::Geos::Coordinate;
use Geo::Geos::Geometry;
use Geo::Geos::GeometryFactory;
use Geo::Geos::Operation;
use Geo::Geos::Operation qw/overlayOp/;


my $gf = Geo::Geos::GeometryFactory::create();

subtest "OverlayOp::overlayOp" => sub {
    my $c11 = Geo::Geos::Coordinate->new(1,2);
    my $c12 = Geo::Geos::Coordinate->new(5,2);
    my $g0 = $gf->createMultiPoint([$c11, $c12], 2);

    my $c21 = Geo::Geos::Coordinate->new(1,3);
    my $c22 = Geo::Geos::Coordinate->new(5,3);
    my $g1 = $gf->createMultiPoint([$c21, $c21], 2);

    my $g = overlayOp($g0, $g1, TYPE_OP_INTERSECTION);
    ok $g;
    like( $g->toString, qr/GEOMETRYCOLLECTION EMPTY/);
};

done_testing;

xsi/operation.xsi  view on Meta::CPAN

Array closestPoints(Geometry& g0, Geometry& g1) {
    Array r;
    auto seq = DistanceOp::closestPoints(&g0, &g1);
    if(seq) {
        auto seq_ptr = std::unique_ptr<CoordinateSequence>(seq);
        r = Helper::convert_copy(seq);
    }
    RETVAL = r;
}

Sv overlayOp(Geometry& g0, Geometry& g1, int opCode) {
    if (opCode > 4) throw "wrong opCode";
    OverlayOp::OpCode code = static_cast<OverlayOp::OpCode>(opCode);
    Geometry* g = OverlayOp::overlayOp(&g0, &g1, code);
    RETVAL = Helper::uplift(g);
}

bool isValid(Object obj) {
    if (obj.stash().name() == "Geo::Geos::Coordinate") {
        auto& c = xs::in<Coordinate&>(obj);
        RETVAL = IsValidOp::isValid(c);
    }
    else {
        auto& g = xs::in<Geometry&>(obj);



( run in 1.115 second using v1.01-cache-2.11-cpan-49f99fa48dc )