Geo::Geos - Perl interface for GEOS C++ library
use Geo::Geos::Coordinate; use Geo::Geos::PrecisionModel qw/TYPE_FLOATING/; use Geo::Geos::GeometryFactory; my $srid = 3857; # coordinate system my $pm = Geo::Geos::PrecisionModel->new(TYPE_FLOATING); my $gf = Geo::Geos::GeometryFactory::create($pm, 3857); my $lr = $gf->createLinearRing([ Geo::Geos::Coordinate->new(1,2), Geo::Geos::Coordinate->new(5,2), Geo::Geos::Coordinate->new(5,0), Geo::Geos::Coordinate->new(1,0), Geo::Geos::Coordinate->new(1,2), ], 2); my $polygon = $gf->createPolygon($lr); my $point = $gf->createPoint(Geo::Geos::Coordinate->new(5,4)); # query $polygon->getArea; # => is 8 $polygon->getLength; # => is 12 $polygon->distance($point); # => is 2 $polygon->getCentroid; # => is 'POINT (3.0000000000000000 1.0000000000000000)' # operations $polygon->symDifference($polygon); # => is 'GEOMETRYCOLLECTION EMPTY' $polygon->intersection($point); # => is 'GEOMETRYCOLLECTION EMPTY' # relations $polygon->within($point); # => '' $polygon->contains($point); # => '' $polygon->covers($point); # => '' $polygon->touches($point); # => '' $polygon->intersects($point); # => '' $polygon->isValid; # => success # Well-Known Text (WKT) I/O use Geo::Geos::WKTWriter; use Geo::Geos::WKTReader; my $string0 = Geo::Geos::WKTWriter->new->write($point); # => 'POINT (5.0000000000000000 4.0000000000000000)' my $g0 = Geo::Geos::WKTReader::read($string0); # => isa 'Geo::Geos::Geometry' # Well-Known Binary (WKB) I/O use Geo::Geos::WKBReader; use Geo::Geos::WKBWriter; my $writer = Geo::Geos::WKBWriter->new; my $string1 = $writer->write($point); my $string2 = $writer->writeHEX($point); my $g1 = Geo::Geos::WKBReader::read($string1); # => isa 'Geo::Geos::Geometry' my $g2 = Geo::Geos::WKBReader::readHEX($string2); # => isa 'Geo::Geos::Geometry'
This is Perl interface for GEOS C++ library. It is build around C++ API, which is a bit more convenient, but without stability guarantees.
Capabilities include:
The GEOS C++ is used by PostGIS project.
It is not possible or there is no need to have perl interface for all C++ classes of the library, partly because it is not possible to have perlish interface (safe, without memory leaks, without explicit dispose calls), partly because classes are not documented and/or buggy and some classes are seems internal to the library and no need to export them.
dispose
Here is a list of C++ classes, without Perl interface:
geos::geom::CoordinateFilter
geos::geom::CoordinateLessThen
geos::geom::CoordinateSequence (use Array of Coordinate*)
geos::geom::CoordinateSequenceFactory
geos::geom::CoordinateSequenceFilter
geos::geom::CoordinateArraySequence (use Array of Coordinate*)
geos::geom::GeometryFilter
geos::geom::GeometryComponentFilter
geos::geom::Location
geos::algorithm::RayCrossingCounter (duplicates methods in CGAlgorithms)
geos::noding::SegmentNodeList
geos::noding::snapround::HotPixel
geos::noding::MCIndexNoder
geos::noding::MCIndexSegmentSetMutualIntersector
geos::noding::SegmentSetMutualIntersector
geos::index::chain::MonotoneChainSelectAction
geos::index::bintree::* (Buggy interface)
geos::index::quadtree::* (See high-level wrapper Geo::Geos::Index::Quadtree)
geos::index::strtree::* (See high-level wrapper Geo::Geos::Index::STRtree)
geos::index::ItemVisitor (use CODEREF instead)
geos::index::sweepline::SweepLineIndex
geos::index::intervalrtree::SortedPackedIntervalRTree
geos::planargraph::* (Safe interface is not possible)
geos::geomgraph::* (Safe interface is not possible)
geos::operation::* (All main operations are wrapped as methods of Geo::Geos::Operation)
Ivan Baidakou <i.baydakov@crazypanda.ru>, Crazy Panda, CP Decision LTD
GEOS C++ Library
PostGIS
Geo::Geos::Algorithm
Geo::Geos::Algorithm::HCoordinate
Geo::Geos::Algorithm::LineIntersector
Geo::Geos::Algorithm::MinimumDiameter
Geo::Geos::Coordinate
Geo::Geos::Dimension
Geo::Geos::Envelope
Geo::Geos::Geometry
Geo::Geos::GeometryCollection
Geo::Geos::GeometryFactory
Geo::Geos::Index::MonotoneChain
Geo::Geos::Index::MonotoneChainOverlapAction
Geo::Geos::Index::Quadtree
Geo::Geos::Index::SpatialIndex
Geo::Geos::Index::STRtree
Geo::Geos::IntersectionMatrix
Geo::Geos::LinearRing
Geo::Geos::LineSegment
Geo::Geos::LineString
Geo::Geos::MultiLineString
Geo::Geos::MultiPoint
Geo::Geos::MultiPolygon
Geo::Geos::Noding
Geo::Geos::Noding::BasicSegmentString
Geo::Geos::Noding::IntersectionAdder
Geo::Geos::Noding::IntersectionFinderAdder
Geo::Geos::Noding::IteratedNoder
Geo::Geos::Noding::NodedSegmentString
Geo::Geos::Noding::Noder
Geo::Geos::Noding::ScaledNoder
Geo::Geos::Noding::SegmentIntersectionDetector
Geo::Geos::Noding::SegmentIntersector
Geo::Geos::Noding::SegmentNode
Geo::Geos::Noding::SegmentString
Geo::Geos::Noding::SimpleNoder
Geo::Geos::Noding::SimpleSnapRounder
Geo::Geos::Noding::SingleInteriorIntersectionFinder
Geo::Geos::Noding::SinglePassNoder
Geo::Geos::Operation
Geo::Geos::Point
Geo::Geos::Polygon
Geo::Geos::Precision
Geo::Geos::Precision::GeometryPrecisionReducer
Geo::Geos::Precision::SimpleGeometryPrecisionReducer
Geo::Geos::PrecisionModel
Geo::Geos::Prep::Geometry
Geo::Geos::Prep::GeometryFactory
Geo::Geos::Triangle
Geo::Geos::Triangulate::DelaunayTriangulationBuilder
Geo::Geos::Triangulate::VoronoiDiagramBuilder
Geo::Geos::WKBConstants
Geo::Geos::WKBReader
Geo::Geos::WKBWriter
Geo::Geos::WKTReader
Geo::Geos::WKTWriter
You may distribute this code under the same terms as Perl itself.
To install Geo::Geos, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Geo::Geos
CPAN shell
perl -MCPAN -e shell install Geo::Geos
For more information on module installation, please visit the detailed CPAN module installation guide.