rgeos/0000755000176200001440000000000014455547166011412 5ustar liggesusersrgeos/NAMESPACE0000644000176200001440000001774314345703723012634 0ustar liggesusersuseDynLib(rgeos) import(methods) import(sp) importFrom(utils, packageVersion) importFrom(stats, optim) importFrom(graphics, par, lines, strwidth, strheight, text) # packages using exported rgeos functions 2022-08-11 and 2022-12-06 # moved after deprecation date if no longer present at latest pkgapi check export( createPolygonsComment, # leaflet maptools (gone 2212 rangeBuilder) (new 2212 occTest) sp createSPComment, # ggOceanMaps (gone 2212 inlmisc) rgdal set_do_poly_check, # get_do_poly_check # ) export( rgeos_extSoftVersion # ) export( poly_findInBoxGEOS, # gUnarySTRtreeQuery, # maptools (new 2212 occTest) (gone 2212 prioritizr) (gone 2212 rangeBuilder) gBinarySTRtreeQuery # waver ) # sp extension classes exportClasses(Ring,SpatialRings, SpatialRingsDataFrame) export( Ring, # SpatialRings, # SpatialRingsDataFrame # ) exportClasses(SpatialLinesNULL, SpatialPointsNULL, SpatialPolygonsNULL, SpatialRingsNULL) exportClasses(SpatialCollections) export( SpatialCollections # ) exportMethods(row.names) # Utility Functions export( getScale, # cleangeo (gone 2212 plotdap) setScale, # translate, # checkP4S # ) export( version_GEOS, # (gone 2212 raster) version_GEOS0 # maptools (gone 2212 raster) ) export( set_RGEOS_dropSlivers, # get_RGEOS_dropSlivers, # set_RGEOS_warnSlivers, # get_RGEOS_warnSlivers, # set_RGEOS_polyThreshold, # get_RGEOS_polyThreshold, # get_RGEOS_CheckValidity, # (gone 2212 raster) set_RGEOS_CheckValidity # (gone 2212 raster) ) # WKT Functions export( readWKT, # bfsMaps BIEN ConR crestr expp MBNMAdose MBNMAtime postGIStools rgbif rpostgis ursa writeWKT # BIEN mregions postGIStools rpostgis sharpshootR ) # GEOS unary predicate functions export(RGEOSisEmpty, RGEOSisValid, RGEOSisSimple, RGEOSisRing)#, RGEOSHasZ) export( gIsEmpty, # animalEKF ShapePattern gIsValid, # bcmaps cleangeo GeoFIS ggOceanMaps inlmisc leastcostpath maptools (gone 2212 raster) (gone 2212 sharpshootR) ursa gIsSimple, # gIsRing # ) # GEOS binary predicate functions export( RGEOSRelate, RGEOSDisjoint, RGEOSTouches, RGEOSIntersects, RGEOSCrosses, RGEOSWithin, RGEOSContains, RGEOSOverlaps, RGEOSEquals, RGEOSEqualsExact) export( gRelate, # gDisjoint, # lgcp gTouches, # expp gDefrag gfcanalysis HCV lgcp rcage (gone 2212 spatialEco) gIntersects, # amt birdring cartograflow dsims eechidna gfcanalysis (gone 2212 inlmisc) lakemorpho lgcp lingtypology (new 2212 occTest) (gone 2212 MazamaSpatialUtils) quickPlot (gone 2212 rangeBuilder) (gone 2212 raster) rcage shadow (gone 2212 spatialEco) spatsoc stampr (gone 2212 TileManager) Watersheds waver (gone 2212 wildlifeDI) gCrosses, # cleangeo lakemorpho Watersheds gWithin, # lakemorpho quickmapr gContains, # animalEKF eechidna GmAMisc lakemorpho letsR maptools (new 2212 occTest) (gone 2212 rangeBuilder) rcage (gone 2212 SpaDES.tools) (gone 2212 spatialEco) (gone 2212 voluModel) (gone 2212 wildlifeDI) gOverlaps, # lakemorpho letsR gEquals, # maptools (new 2212 occTest) (gone 2212 rangeBuilder) gEqualsExact, # gContainsProperly, # amt maptools (new 2212 occTest) (gone 2212 rangeBuilder) (gone 2212 sharpshootR) gCovers, # rcage (gone 2212 spatialEco) (gone 2212 wildlifeDI) gCoveredBy # ) # GEOS misc functions export( RGEOSArea, RGEOSLength, RGEOSDistance, RGEOSisWithinDistance, RGEOSHausdorffDistance) export( gArea, # bivariatemaps eechidna ForestTools gDefrag (new 2212 geocmeans) GmAMisc itcSegment LabourMarketAreas lakemorpho leastcostpath letsR MBNMAdose MBNMAtime movecost psda ptools quickmapr quickPlot raptr rcage redlistr (gone 2212 RSurvey) (gone 2212 rTLS) ShapePattern (gone 2212 spatialEco) spatsoc stampr surveillance uavRmp (gone 2212 wildlifeDI) wux gLength, # bfsMaps (gone 2212 geocmeans) lakemorpho leastcostpath movecost OasisR quickmapr (gone 2212 raster) recurse shadow ShapePattern stampr streamDepletr ursa gDistance, # antaresViz (gone 2212 contact) fieldRS FLightR gDefrag ggOceanMaps GmAMisc (gone 2212 inlabru) (gone 2212 inlmisc) maptools OasisR quickmapr (gone 2212 rangeBuilder) (gone 2212 raster) SegEnvIneq shadow (gone 2212 spatialEco) SpatialGraph stampr Watersheds waver gWithinDistance, # FLightR quickmapr (gone 2212 spatialEco) SpatialGraph gNearestPoints # ) export( bbox2SP # ) # GEOS topology functions export( RGEOSEnvelope, RGEOSConvexHull, RGEOSBoundary, RGEOSGetCentroid, RGEOSPointOnSurface, RGEOSLineMerge, RGEOSUnionCascaded) export( gEnvelope, # stampr gConvexHull, # amt GeoFIS gfcanalysis GmAMisc ipdw itcSegment mapmisc (gone 2212 rangeBuilder) rcage shadow stampr gBoundary, # leastcostpath Watersheds (gone 2212 wildlifeDI) gCentroid, # atakrig biosurvey ForestTools geogrid gfcanalysis hierarchicalDS hypergate letsR (gone 2212 MazamaSpatialUtils) MetaLandSim (new 2212 micromapST) OasisR rangemap raptr rcage SegEnvIneq shadow stampr SurfaceTortoise (gone 2212 TileManager) Watersheds gPointOnSurface, # gDefrag (gone 2212 MazamaSpatialUtils) gLineMerge, # gDefrag shadow sp gUnionCascaded, # adehabitatHR birdring briskaR cleangeo expp maptools (gone 2212 raster) gUnaryUnion, # amt ENMTools excursions ForestTools gDefrag HDSpatialScan hypergate (gone 2212 inlmisc) leastcostpath lgcp lingtypology maptools rangemap (gone 2212 raster) shadow sp stampr surveillance (gone 2212 TileManager) uavRmp ursa waver gCoverageUnion, # gMinumumRotatedRectangle, # gMaximumInscribedCircle # ) export( gSimplify, # eechidna FLightR (gone 2212 GADMTools) ggOceanMaps (gone 2212 inlmisc) mapmisc maptools oceanic rangemap red SeuratObject stampr trajectories ursa gPolygonize, # hypergate leastcostpath gDelaunayTriangulation, # gNode # hypergate leastcostpath ) export( gMakeValid # ) # GEOS binary topology functions export( gDifference, # birdring briskaR cleangeo excursions FRK gDefrag (gone 2212 inlmisc) lakemorpho leastcostpath mapmisc (new 2212 micromapST) (gone 2212 rangeBuilder) (gone 2212 raster) (gone 2212 rTLS) Rtrack (gone 2212 spatialEco) stampr SurfaceTortoise ursa (gone 2212 voluModel) (gone 2212 wildlifeDI) # deprecated 2022-12-12 gSymdifference, # ursa # deprecated 2022-12-12 gIntersection, # animalEKF AQuadtree birdring bRacatus (new 2212 changeRangeR) cleangeo DivE (gone 2212 DSsim) eechidna expp (gone 2212 FedData) FRK gDefrag ggOceanMaps (gone 2212 inlmisc) LabourMarketAreas lakemorpho leastcostpath lgcp mapmisc mapsRinteractive maptools Momocs OasisR osmplotr psda ptools (gone 2212 rangeBuilder) rangemap (gone 2212 raster) recurse red rtop secrlinear shadow sp SpatialGraph spatsoc stampr SubgrPlots SurfaceTortoise surveillance ursa (gone 2212 voluModel) waver (gone 2212 wildlifeDI) wux # deprecated 2022-12-12 gUnion # FLightR gDefrag (gone 2212 inlmisc) (gone 2212 RSurvey) (gone 2212 rTLS) shadow ursa (gone 2212 voluModel) # deprecated 2022-12-12 )# RSB FIXME # GEOS buffer functions export( RGEOSBuffer, gBuffer # amt bcmaps BiodiversityR biosurvey bRacatus briskaR (new 2212 changeRangeR) cleangeo ConR CoordinateCleaner (gone 2212 DSsim) (gone 2212 dynatopGIS) envi expp FLightR FRK geoviz (new 2212 ggvoronoi) GmAMisc hero hypervolume (gone 2212 inlmisc) itcSegment lakemorpho leastcostpath lingtypology mapmisc (gone 2212 MazamaSpatialUtils) (new 2212 micromapST) (gone 2212 NetLogoR) phyloregion (gone 2212 rangeBuilder) rangemap (gone 2212 raster) secrlinear shadow ShapePattern sharpshootR (gone 2212 spatialEco) spatsoc spatsurv stampr uavRmp ursa Watersheds # deprecated 2022-12-12 ) # GEOS linearref functions export( gProject, # gInterpolate # mapmisc ) # gpclib shadows #importFrom(graphics, plot) exportClasses("gpc.poly", "gpc.poly.nohole") exportMethods( "show", "get.bbox", "plot", # SubgrPlots "intersect", # (new 2212 ggvoronoi) muHVT "union", "symdiff", "setdiff", "[", "append.poly", "scale.poly", "area.poly", "get.pts", # (gone 2212 RSurvey) "coerce", "tristrip", "triangulate" ) export( "read.polyfile", # (gone 2212 RSurvey) "write.polyfile" # (gone 2212 RSurvey) ) export( polygonsLabel # ) export( overGeomGeom # sp ) # needed by sp::overMultiPoints export( overGeomGeomDF # sp ) # needed by sp::overMultiPoints rgeos/LICENSE.note0000644000176200001440000000125314025150745013346 0ustar liggesusersThe rgeos source package is licensed GPL (>= 2). Because the CRAN Windows and OSX binaries are static linked to GEOS binaries, this file is included to record the GEOS license conditions. Martin Davis (JTS) and Sandro Santilli (GEOS, OSGeo GEOS PSC chair) are included in DESCRIPTION as copyright holders and contributors to rgeos. JTS (Java Topology Suite http://www.tsusiatsoftware.net/jts/main.html) is provided under LGPL 2.1 found at: https://sourceforge.net/p/jts-topo-suite/code/HEAD/tree/trunk/doc/LICENSE.txt. GEOS is available under the terms of GNU Lesser General Public License (LGPL), with roles described in https://github.com/OSGeo/geos/blob/master/AUTHORS. rgeos/tools/0000755000176200001440000000000014116411637012535 5ustar liggesusersrgeos/tools/winlibs.R0000644000176200001440000000137014025150745014327 0ustar liggesusersif(getRversion() < "3.3.0") { stop("Your version of R is too old. This package requires R-3.3.0 or newer on Windows.") } # Download gdal-2.2.* from rwinlib VERSION <- commandArgs(TRUE) #if(!file.exists(sprintf("../windows/gdal2-%s/include/gdal/gdal.h", VERSION))){ testfile <- sprintf("../windows/gdal3-%s/include/gdal-%s/gdal.h", VERSION, VERSION) if(!file.exists(testfile)){ if(getRversion() < "3.3.0") setInternet2() # download.file(sprintf("https://github.com/rwinlib/gdal2/archive/v%s.zip", VERSION), "lib.zip", quiet = TRUE) download.file(sprintf("https://github.com/rwinlib/gdal3/archive/v%s.zip", VERSION), "lib.zip", quiet = TRUE) dir.create("../windows", showWarnings = FALSE) unzip("lib.zip", exdir = "../windows") unlink("lib.zip") } rgeos/ChangeLog0000644000176200001440000026251214217056744013165 0ustar liggesusers2022-03-24 11:59 rsbivand * [r685] DESCRIPTION, NEWS.md, src/Makevars.win: https://github.com/r-spatial/sf/pull/1919 2021-12-14 14:02 rsbivand * [r684] ChangeLog, NEWS.md, inst/ChangeLog: tidy 2021-12-14 13:40 rsbivand * [r683] DESCRIPTION, NEWS.md, src/Makevars.ucrt: R4.2 devel Windows UCRT 2021-11-17 11:35 rsbivand * [r682] DESCRIPTION: fixing https://github.com/r-spatial/sf/issues/1843 (partly) 2021-10-07 11:40 rsbivand * [r681] DESCRIPTION, NEWS.md, configure: tidy 2021-10-02 11:47 rsbivand * [r680] tests/leak_by_exception.Rout.save: tidy 2021-09-21 20:28 rsbivand * [r679] ChangeLog, NEWS.md, configure, inst/ChangeLog: tidy 2021-09-14 10:27 rsbivand * [r678] DESCRIPTION, configure.ac: run autoupdate 2021-09-07 13:14 rsbivand * [r677] DESCRIPTION: tidy 2021-09-07 10:37 rsbivand * [r676] NEWS.md: update docs 2021-09-07 10:27 rsbivand * [r675] configure: tidy 2021-09-07 10:26 rsbivand * [r674] ChangeLog, inst/ChangeLog: tidy 2021-09-07 10:26 rsbivand * [r673] ChangeLog, DESCRIPTION, NEWS.md, R/AAA.R: tidy 2021-07-23 15:39 rsbivand * [r672] DESCRIPTION, src/Makevars.ucrt, src/Makevars.win: add UCRT tweak 2021-04-27 18:13 rsbivand * [r670] R/rgeos_util.R: test OverlayNG only >= 3.9.0 2021-04-27 07:39 rsbivand * [r668] inst/wkts/nc34.wkt, tests/DP_simplify.R, tests/DP_simplify.Rout.save: revert after GEOS DP regression fixed 2021-04-27 07:38 rsbivand * [r667] NEWS.md, R/rgeos_topology.R, man/topo-unary-gSimplify.Rd: revert after GEOS DP regression fixed 2021-04-25 16:58 rsbivand * [r665] NEWS.md: gSimplify() use topologyPreserving by defaulr >= 3.10 2021-04-25 16:55 rsbivand * [r664] R/rgeos_topology.R, man/topo-unary-gSimplify.Rd: gSimplify() use topologyPreserving by defaulr >= 3.10 2021-04-24 13:51 rsbivand * [r662] NEWS.md, man/topo-unary-gMakeValid.Rd: use make valid name changes 2021-04-24 13:30 rsbivand * [r661] NEWS.md, man/topo-unary-gMakeValid.Rd: use make valid name changes 2021-04-24 13:22 rsbivand * [r659] R/rgeos_topology.R, man/topo-unary-gMakeValid.Rd, src/rgeos_topology.c: use make valid name changes 2021-04-23 13:02 rsbivand * [r657] man/topo-unary-gMakeValid.Rd: update for www9 2021-04-23 12:24 rsbivand * [r655] R/rgeos_topology.R, man/topo-unary-gMakeValid.Rd: add keep collapsed env-var 2021-04-23 09:48 rsbivand * [r653] NEWS.md, R/rgeos_topology.R, configure, man/topo-unary-gMakeValid.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c: add MakeValidWithParams update 2021-04-21 15:47 rsbivand * [r652] DESCRIPTION, NEWS.md, R/AAA.R, configure, configure.ac: adapt for GEOS 3.10.0 version number 2021-02-16 10:09 rsbivand * [r651] R/rgeos_util.R: fix mistake in OverlayNG detection 2021-02-09 09:18 rsbivand * [r650] NEWS.md, man/topo-unary-gMaximumInscribedCircle.Rd, man/topo-unary-gMinumumRotatedRectangle.Rd: tidy 2021-02-09 09:03 rsbivand * [r649] ChangeLog, inst/ChangeLog: tidy 2021-02-09 09:03 rsbivand * [r648] NAMESPACE, NEWS.md, R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_R2geosMP.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_linearref.c, src/rgeos_poly2nb.c, src/rgeos_topology.c, src/rgeos_topology_binary.c, src/rgeos_wkt.c: adapt for GEOS 3.9.0 2021-01-30 13:22 rsbivand * [r647] NEWS.md: tidy 2021-01-30 13:21 rsbivand * [r646] ChangeLog, DESCRIPTION, NEWS.md, inst/ChangeLog, src/Makevars.win: update Windows static GEOS to 3.9.0 2020-12-10 10:17 rsbivand * [r645] DESCRIPTION, R/rgeos_util.R, inst/test_cases/OverlayNG_test_c.rds: GEOS 3.9.0 beta2 2020-10-20 10:56 rsbivand * [r644] ChangeLog, inst/ChangeLog: tidy 2020-10-20 09:54 rsbivand * [r643] R/AAA.R, R/rgeos_util.R, inst/test_cases/OverlayNG_test_a.rds, inst/test_cases/OverlayNG_test_b.rds, src/rgeos_geos2R.c: add test for OverlayNG 2020-10-08 14:01 rsbivand * [r642] ChangeLog, inst/ChangeLog: tidy 2020-10-08 14:00 rsbivand * [r641] DESCRIPTION, configure, tests/leak_by_exception.Rout.save: tidy 2020-09-02 08:50 rsbivand * [r640] man/topo-unary-gCoverageUnion.Rd: tidy 2020-09-01 12:39 rsbivand * [r639] ChangeLog, inst/ChangeLog: tidy 2020-09-01 12:38 rsbivand * [r638] man/labelpt.Rd, man/misc-gDistance.Rd, man/topo-unary-gDelaunayTriangulation.Rd, man/topo-unary-gSimplify.Rd, man/wkt-functions.Rd: tidy 2020-09-01 11:38 rsbivand * [r637] DESCRIPTION, configure, configure.ac: add stdlib.h declaration to configure.ac where missing 2020-08-06 09:57 rsbivand * [r636] DESCRIPTION, NAMESPACE, R/rgeos_topology.R, configure, src/init.c, src/rgeos.h, src/rgeos_topology.c: add CoverageUnion 2020-05-08 13:18 rsbivand * [r634] ChangeLog, inst/ChangeLog: tidy 2020-05-08 13:17 rsbivand * [r633] DESCRIPTION: tidy 2020-05-08 13:04 rsbivand * [r632] ChangeLog, inst/ChangeLog: tidy 2020-05-08 13:03 rsbivand * [r631] src/Makevars.win, tools/winlibs.R: shift Windows binary to GEOS 3.8 2020-05-08 12:44 rsbivand * [r630] inst/ChangeLog: tidy 2020-05-08 12:44 rsbivand * [r629] ChangeLog: tidy 2020-05-08 12:43 rsbivand * [r628] man/topo-unary-gMakeValid.Rd: add gMakeValid for GEOS >= 3.8.0 2020-05-08 12:17 rsbivand * [r627] ChangeLog, inst/ChangeLog, man/topo-unary-gMakeValid.Rd: tidy 2020-05-08 12:13 rsbivand * [r626] DESCRIPTION, NAMESPACE, R/rgeos_linearref.R, R/rgeos_topology.R, configure, man/linref-gInterpolate.Rd, man/linref-gProject.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c, tests/leak_by_exception.Rout.save: add gMakeValid for GEOS >= 3.8.0 2020-03-28 10:46 rsbivand * [r625] ChangeLog, inst/ChangeLog: tidy 2019-11-13 08:04 rsbivand * [r623] DESCRIPTION, man/comment-functions.Rd: add page number to comment help page 2019-10-03 07:49 rsbivand * [r621] configure, configure.ac: tidy 2019-10-03 07:39 rsbivand * [r620] DESCRIPTION: tidy 2019-10-02 10:42 rsbivand * [r619] ChangeLog, inst/ChangeLog: tidy 2019-10-02 10:41 rsbivand * [r618] DESCRIPTION: tidy 2019-09-03 11:41 rsbivand * [r617] configure, configure.ac: remove R CMD config CPP 2019-08-16 09:49 rsbivand * [r616] DESCRIPTION, R/rgeos_predicate_binary.R, man/pred-binary-gIntersects.Rd: bug in dense binary predicate matrix row names 2019-08-05 08:42 rsbivand * [r614] ChangeLog, inst/ChangeLog: tidy 2019-08-05 08:21 rsbivand * [r613] DESCRIPTION: tidy 2019-08-05 07:47 rsbivand * [r612] ChangeLog, inst/ChangeLog: tidy 2019-08-05 07:35 rsbivand * [r610] ChangeLog, inst/ChangeLog: tidy 2019-08-05 07:34 rsbivand * [r609] DESCRIPTION: tidy 2019-08-05 06:55 rsbivand * [r608] ChangeLog, inst/ChangeLog: tidy 2019-08-05 06:55 rsbivand * [r607] man/topo-bin-gUnion.Rd: tidy 2019-08-04 15:37 rsbivand * [r606] ChangeLog, inst/ChangeLog: changing checkValidity for GEOS > 3.7.1 2019-08-04 15:35 rsbivand * [r605] tests/leak_by_exception.Rout.save: changing checkValidity for GEOS > 3.7.1 2019-08-04 14:55 rsbivand * [r604] R/rgeos_topology.R, R/rgeos_topology_binary.R, src/rgeos_R2geos.c: changing checkValidity for GEOS > 3.7.1 2019-08-03 16:06 rsbivand * [r603] R/rgeos_topology.R, man/topo-bin-gIntersection.Rd, man/topo-bin-gUnion.Rd, man/utility-functions.Rd: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:37 rsbivand * [r602] R/rgeos_topology_binary.R: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:28 rsbivand * [r601] R/rgeos_topology_binary.R: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:18 rsbivand * [r600] NAMESPACE, man/utility-functions.Rd: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:02 rsbivand * [r599] configure: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:01 rsbivand * [r598] ChangeLog, inst/ChangeLog: changing checkValidity for GEOS > 3.7.1 2019-08-03 14:59 rsbivand * [r597] DESCRIPTION, R/AAA.R, R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/utility-functions.Rd, tests/leak_by_exception.Rout.save: changing checkValidity for GEOS > 3.7.1 2019-07-31 18:28 rsbivand * [r596] DESCRIPTION: add pkgdown link 2019-04-24 09:17 rsbivand * [r595] ChangeLog, inst/ChangeLog: tidy 2019-04-24 09:16 rsbivand * [r594] man/misc-gBuffer.Rd: tidy 2019-04-24 09:09 rsbivand * [r593] DESCRIPTION, man/bbox2SP.Rd, man/bbox2SP.rd: tidy 2019-04-23 13:15 rsbivand * [r592] .Rbuildignore, DESCRIPTION, _pkgdown.yml, man/bbox2SP.rd, man/linref-gInterpolate.Rd, man/linref-gProject.Rd, man/misc-gBuffer.Rd, man/misc-gNearestPoints.Rd, man/pred-unary-gIsValid.Rd: start pkgdown 2019-04-23 12:12 rsbivand * [r591] ChangeLog, inst/ChangeLog: tidy 2019-04-23 12:11 rsbivand * [r590] DESCRIPTION, R/rgeos_buffer.R: tidy 2019-03-06 15:02 rsbivand * [r589] src/Makevars.win, tools/winlibs.R: update Makevars.win and winlibs.R 2018-12-21 12:35 rsbivand * [r588] DESCRIPTION, configure, configure.ac: guard against invalid versions 2018-12-15 12:36 rsbivand * [r587] ChangeLog, inst/ChangeLog: tidy 2018-12-15 12:36 rsbivand * [r586] configure: tidy 2018-12-15 00:30 edzer * [r585] configure, configure.ac: configure stuff for OSX 2018-12-15 00:04 edzer * [r584] configure, configure.ac: try with static libs 2018-12-13 11:18 rsbivand * [r583] ChangeLog, inst/ChangeLog: tidy 2018-12-13 11:17 rsbivand * [r582] DESCRIPTION, configure, configure.ac: ubuntu mess - changes in ./configure 2018-11-07 13:31 rsbivand * [r581] ChangeLog, inst/ChangeLog: tidy 2018-10-22 07:10 rsbivand * [r580] DESCRIPTION, configure, configure.ac: Debian stretch GEOS version configure issue 2018-10-18 11:38 rsbivand * [r579] man/utility-functions.Rd: tidy 2018-10-18 11:34 rsbivand * [r578] DESCRIPTION: tidy 2018-10-18 11:30 rsbivand * [r577] ChangeLog, inst/ChangeLog: tidy 2018-09-13 11:00 rsbivand * [r576] R/AAA.R, src/init.c, src/rgeos.c, src/rgeos.h: attempted version check 2018-09-12 18:16 rsbivand * [r575] src/rgeos.c, src/rgeos_R2geos.c: tidy after -Wall 2018-09-12 08:49 rsbivand * [r574] configure, configure.ac: switch geos-config to cclibs from libs 2018-08-30 15:48 rsbivand * [r573] DESCRIPTION, configure, configure.ac, src/rgeos.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c, src/rgeos_topology.c, src/rgeos_topology_binary.c, tests/leak_by_exception.R, tests/leak_by_exception.Rout.save: testing leaks by exceptions 2018-06-08 06:48 rsbivand * [r572] ChangeLog, inst/ChangeLog: tidy 2018-06-08 06:47 rsbivand * [r571] ChangeLog, configure: tidy 2018-06-03 21:05 rsbivand * [r570] DESCRIPTION, src/rgeos.c, src/rgeos_geos2R.c: rchk fixes, mostly MAKE_CLASS 2018-06-01 11:39 rsbivand * [r569] ChangeLog, inst/ChangeLog: tidy 2018-06-01 11:38 rsbivand * [r568] DESCRIPTION, LICENSE.note: add LICENSE.note 2018-05-29 18:13 rsbivand * [r567] DESCRIPTION: tidy 2018-05-29 17:40 rsbivand * [r566] NAMESPACE, R/bbox2SP.R: tidy 2018-05-28 12:14 rsbivand * [r565] src/rgeos.c, src/rgeos_validate.c: trying to fix rchk and valgrind issues 2018-05-21 17:57 rsbivand * [r564] R/bbox2SP.R, man/bbox2SP.rd: corrected bbox2SP 2018-04-27 12:36 rsbivand * [r563] DESCRIPTION, NAMESPACE, R/bbox2SP.R, man/bbox2SP.rd: add bbox2SP 2018-04-08 13:34 rsbivand * [r562] DESCRIPTION, configure: gcc 8 correction 2018-04-07 21:25 edzer * [r561] src/rgeos.c: see https://github.com/r-spatial/sf/issues/694 2017-10-30 12:01 rsbivand * [r560] configure: tidy 2017-10-30 12:00 rsbivand * [r559] DESCRIPTION: tidy 2017-10-24 13:42 rsbivand * [r558] man/utility-functions.Rd: tidy 2017-10-23 18:57 rsbivand * [r557] DESCRIPTION, NAMESPACE, R/AAA.R: add extSoftVersion 2017-09-25 10:53 rsbivand * [r556] ChangeLog, inst/ChangeLog: tidy 2017-09-25 10:51 rsbivand * [r555] configure: updating for stricter autoconf 2017-09-25 10:50 rsbivand * [r554] DESCRIPTION: updating for stricter autoconf 2017-09-25 10:49 rsbivand * [r553] configure, configure.ac: updating for stricter autoconf 2017-09-25 10:46 rsbivand * [r552] configure, configure.ac: updating for stricter autoconf 2017-09-18 08:59 rsbivand * [r551] DESCRIPTION: tidy 2017-09-18 08:27 rsbivand * [r550] ChangeLog, configure, inst/ChangeLog: tidy 2017-09-18 08:26 rsbivand * [r549] DESCRIPTION, tools, tools/winlibs.R: transition to winlibs 2017-09-15 13:09 rsbivand * [r548] DESCRIPTION, src/Makevars.win: migrate to winlib/gdal 2017-04-05 12:05 rsbivand * [r547] ChangeLog, inst/ChangeLog: tidy 2017-04-05 12:04 rsbivand * [r546] configure: tidy 2017-04-05 12:03 rsbivand * [r545] DESCRIPTION, src/rgeos.c, src/rgeos_validate.c: PROTECT issues 2017-01-08 19:11 rsbivand * [r544] ChangeLog, inst/ChangeLog: tidy 2016-12-10 10:02 rsbivand * [r543] configure: omitted trap in init.c 2016-12-10 10:00 rsbivand * [r542] DESCRIPTION, src/init.c: omitted trap in init.c 2016-10-19 11:45 rsbivand * [r541] ChangeLog, inst/ChangeLog: tidy 2016-10-11 03:24 rsbivand * [r540] ChangeLog, R/rgeos_misc.R, man/misc-gNearestPoints.Rd, src/rgeos.h, src/rgeos_misc.c: checking NearestPoint dependency on >= 3.4 2016-10-10 07:28 rcs * [r539] ChangeLog, DESCRIPTION, NAMESPACE, R/rgeos_misc.R, configure, inst/ChangeLog, man/misc-gNearestPoints.Rd, src/init.c, src/rgeos.h, src/rgeos_misc.c, tests/testthat/test-misc.R: add gNearestPoints 2016-10-08 08:14 rcs * [r538] tests/testthat/test-linearref.R: fix linearref tests 2016-10-07 21:53 rcs * [r537] tests/testthat/test-linearref.R: fix linearref tests 2016-09-14 11:18 rcs * [r536] R/rgeos_spExtensions_Methods.R, R/rgeos_topology.R: fix partial argument match 2016-09-07 13:10 rsbivand * [r535] ChangeLog, inst/ChangeLog: tidy 2016-09-07 13:09 rsbivand * [r534] src/rgeos_predicate_binary.c: block list output from gRelate 2016-09-07 10:03 rsbivand * [r533] inst/ChangeLog: tidy 2016-09-07 09:50 rcs * [r532] ChangeLog, man/topo-unary-gEnvelope.Rd: fix typo 2016-09-07 09:48 rcs * [r531] ChangeLog, src/rgeos_geos2R.c: fix stack imbalance in rgeos_geosring2SpatialRings() 2016-09-06 13:13 rcs * [r530] ChangeLog, R/rgeos_linearref.R, man/linref-gProject.Rd, src/rgeos_linearref.c: update Rd; fix typo 2016-09-06 11:41 rsbivand * [r529] ChangeLog, inst/ChangeLog: tidy 2016-09-06 11:40 rsbivand * [r528] configure: tidy 2016-09-06 11:38 rsbivand * [r527] inst/tests, tests/test-all.R, tests/testthat: moved tests folder 2016-09-06 10:50 rcs * [r526] ChangeLog, DESCRIPTION, NAMESPACE, R/rgeos_linearref.R, inst/tests/test-linearref.R, man/linref-gInterpolate.Rd, man/linref-gProject.Rd, src/init.c, src/rgeos.h, src/rgeos_linearref.c: added linear referencing functions (gInterpolate/gProject) 2016-08-30 17:36 rsbivand * [r525] DESCRIPTION, src/rgeos_coord.c: protect s in src/rgeos_coord.c 2016-04-04 11:37 rsbivand * [r524] ChangeLog, configure, inst/ChangeLog: tidy 2016-04-04 11:35 rsbivand * [r523] DESCRIPTION, src/Makevars.win: update to win-4.9.3 2016-02-15 07:38 rsbivand * [r522] DESCRIPTION, R/rgeos_buffer.R: gBuffer NULL case 2016-02-13 11:26 rsbivand * [r521] ChangeLog, inst/ChangeLog: tidy 2016-02-12 20:31 rsbivand * [r520] DESCRIPTION, R/rgeos_buffer.R: buffer byid to FALSE if single feature 2016-02-12 18:58 rsbivand * [r519] R/rgeos_buffer.R: buffer byid to FALSE if single feature 2016-02-09 12:53 rsbivand * [r518] ChangeLog, inst/ChangeLog: buffer byid to FALSE if single feature 2016-02-09 12:52 rsbivand * [r517] DESCRIPTION, R/rgeos_buffer.R, configure, src/rgeos_buffer.c: buffer byid to FALSE if single feature 2016-01-23 19:12 rsbivand * [r516] DESCRIPTION, R/rgeos_misc.R: rev 66 oddity partial workaround 2015-11-04 12:46 rsbivand * [r515] configure: tidy 2015-11-04 12:43 rsbivand * [r514] ChangeLog, inst/ChangeLog: tidy 2015-11-04 11:10 rsbivand * [r513] DESCRIPTION, src/rgeos_buffer.c: rgeos_buffer id overrun bug fix 2015-10-26 14:28 rsbivand * [r512] ChangeLog, inst/ChangeLog: tidy 2015-10-25 10:38 rsbivand * [r511] man/topo-bin-gIntersection.Rd: fix td bug 2015-10-25 10:28 rsbivand * [r510] ChangeLog, DESCRIPTION, inst/ChangeLog, man/topo-bin-gIntersection.Rd, src/rgeos_topology_binary.c: fix td bug 2015-09-29 07:07 rsbivand * [r509] man/topo-bin-gIntersection.Rd: extra intersection example 2015-09-28 15:51 rsbivand * [r508] ChangeLog, configure, inst/tests/testxml/general/TestFunctionLLPrec.xml, inst/tests/testxml/validate/TestRelateLL.xml, inst/tests/testxml/validate/TestRelatePA.xml, inst/tests/testxml/validate/TestRelatePL.xml, inst/tests/testxml/validate/TestRelatePP.xml: tidy 2015-09-28 09:49 rsbivand * [r507] src/rgeos_geos2R.c: SpatialRings stack unbalance 2015-09-26 17:45 rsbivand * [r506] man/labelpt.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd: tidy 2015-09-26 17:27 rsbivand * [r505] DESCRIPTION: adding unaryUnion to topo-bin if FALSE byid 2015-09-26 17:27 rsbivand * [r504] R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, src/rgeos_topology_binary.c: adding unaryUnion to topo-bin if FALSE byid 2015-09-20 21:23 rsbivand * [r503] man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd: note on 0-based indices 2015-09-18 12:13 rsbivand * [r502] R/rgeos_predicate_binary.R, R/rgeos_topology_binary.R: add optional validity checking to binary predicates and operations 2015-09-18 12:09 rsbivand * [r501] DESCRIPTION, R/rgeos_predicate_binary.R, R/rgeos_topology_binary.R, man/misc-over.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd: add optional validity checking to binary predicates and operations 2015-09-10 14:06 edzer * [r500] DESCRIPTION, R/over.R: version bump; let overGeomGeomDF absorb & pass on minDimension to overGeomGeom 2015-09-01 10:27 rsbivand * [r499] ChangeLog, inst/ChangeLog: tidy 2015-08-31 19:59 edzer * [r498] R/over.R: pass on colnames(x) if x is matrix 2015-08-31 16:49 edzer * [r497] R/over.R: pass names on to returned list 2015-08-31 16:13 edzer * [r496] R/over.R, man/misc-over.Rd: complete documentation, clean up code. 2015-08-31 11:49 rsbivand * [r495] configure, configure.ac: strip dev from version 2015-08-25 11:48 rsbivand * [r494] DESCRIPTION, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gTouches.Rd, src/rgeos_predicate_binary.c: block assigning too large matrix 2015-08-25 09:15 edzer * [r493] R/over.R: default to gIntersects(), because of the performance penalty 2015-08-22 13:33 edzer * [r492] R/over.R: move constant check outside loop 2015-08-21 22:13 edzer * [r491] R/over.R: increase over sanity 2015-08-21 15:03 edzer * [r490] R/over.R: catch omission on unrealistic dimension requirements 2015-08-20 20:45 edzer * [r489] R/over.R: clean up over stuff, order by dimension from gRelate 2015-08-20 09:23 edzer * [r488] R/over.R: some more tweeks for SpatialMultiPoints 2015-08-19 14:52 edzer * [r487] man/misc-over.Rd: add overGeomGeom doc 2015-08-19 14:11 edzer * [r486] NAMESPACE: export overGeomGeomDF and overGeomGeom 2015-08-13 09:22 edzer * [r485] src/rgeos_R2geos.c: clean up 2015-06-28 20:36 rsbivand * [r484] DESCRIPTION, NAMESPACE, R/AAA.R, man/pred-binary-gRelate.Rd: CRAN _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_=true NAMESPACE tidy 2015-06-23 07:56 rsbivand * [r483] R/AAA.R: add utils:: to packageVersion() 2015-06-05 07:54 rsbivand * [r482] ChangeLog, inst/ChangeLog: tidy 2015-06-05 07:53 rsbivand * [r481] ChangeLog, inst/ChangeLog: tidy 2015-06-05 07:52 rsbivand * [r480] DESCRIPTION: tidy 2015-05-29 13:49 rsbivand * [r479] ChangeLog, inst/ChangeLog: tidy 2015-05-29 13:47 rsbivand * [r478] DESCRIPTION: tidy 2015-05-05 17:02 rsbivand * [r477] DESCRIPTION, man/comment-functions.Rd, man/experimental-functions.Rd, man/labelpt.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gDelaunayTriangulation.Rd: dontrun require issues 2015-04-23 22:19 edzer * [r476] man/topo-bin-gIntersection.Rd: typo 2015-04-23 21:45 edzer * [r475] src/rgeos_validate.c: add const declarations for SEXPs 2015-04-23 21:43 edzer * [r474] R/over.R: fix bug for SpatialPolygons,SpatialPolygonsDataFrame 2015-04-13 15:59 rsbivand * [r473] .Rbuildignore, R/labelpt.R, configure.ac, svn2cl.xsl: fix polygonsLabel 2015-04-09 13:59 rsbivand * [r472] DESCRIPTION, R/AAA.R, src/init.c, src/rgeos.c, src/rgeos.h: add linking to version 2015-03-11 13:09 rsbivand * [r471] ChangeLog, inst/ChangeLog: tidy 2015-03-11 13:08 rsbivand * [r470] R/labelpt.R, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd: tidy 2015-03-11 12:48 rsbivand * [r469] ChangeLog, inst/ChangeLog: tidy 2015-03-10 08:30 rsbivand * [r468] inst/README, inst/README.windows: OSX install note 2015-03-09 07:37 edzer * [r467] NAMESPACE, man/class-SpatialCollections.Rd: exportClass Spatial*NULL classes 2015-03-08 16:04 rsbivand * [r466] src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c, src/rgeos_topology.c, src/rgeos_topology_binary.c: added extra geos-config checks 2015-03-08 12:35 rsbivand * [r465] DESCRIPTION: added extra geos-config checks 2015-03-08 12:34 rsbivand * [r464] configure, configure.ac: added extra geos-config checks 2015-03-07 17:30 rsbivand * [r463] configure, configure.ac: added extra geos-config checks 2015-01-29 08:19 edzer * [r462] R/over.R, man/pred-binary-gIntersects.Rd: improve readability overGeomGeom 2015-01-28 22:58 edzer * [r461] R/over.R: fix overGeomGeom for length(x) == 1 2014-09-21 14:09 rsbivand * [r460] ChangeLog, inst/ChangeLog: tidy 2014-09-21 14:09 rsbivand * [r459] DESCRIPTION, R/rgeos_topology_binary.R, man/topo-bin-gIntersection.Rd: deprecate drop_not_poly 2014-09-21 11:19 rsbivand * [r458] ChangeLog, inst/ChangeLog: tidy 2014-09-21 11:18 rsbivand * [r457] DESCRIPTION, NAMESPACE, R/AAA.R, man/topo-bin-gIntersection.Rd, man/utility-functions.Rd, src/rgeos_geos2R.c: conditionally drop slivers 2014-09-20 18:50 rsbivand * [r456] inst/test_cases, inst/test_cases/polys.RData: drop topological dimension 2014-09-20 18:35 rsbivand * [r455] src/rgeos_geos2R.c: drop topological dimension 2014-09-19 20:17 rsbivand * [r454] R/Rgpc_funcs.R, R/rgeos_misc.R, R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, src/rgeos_topology_binary.c: drop topological dimension 2014-09-11 13:08 rsbivand * [r453] src/rgeos_geos2R.c: slivers 2014-09-06 22:07 rsbivand * [r452] R/AAA.R, src/rgeos_geos2R.c: drop_not_poly adjustment 2014-09-04 18:30 rsbivand * [r451] DESCRIPTION, R/AAA.R, R/rgeos_topology_binary.R, src/rgeos_topology_binary.c: drop_not_poly adjustment 2014-07-08 08:53 rsbivand * [r450] ChangeLog, inst/ChangeLog: tidy 2014-07-07 22:26 rsbivand * [r449] DESCRIPTION, R/Rgpc_funcs.R: constrain gpc to polygons 2014-06-05 19:08 rsbivand * [r448] ChangeLog, inst/ChangeLog: tidy 2014-06-05 19:01 rsbivand * [r447] ChangeLog, inst/ChangeLog: tidy 2014-06-05 18:59 rsbivand * [r446] man/pred-binary-gContains.Rd, man/pred-binary-gIntersects.Rd, src/rgeos_poly2nb.c: tidt 2014-06-05 18:33 rsbivand * [r445] ChangeLog, inst/ChangeLog: tidy 2014-06-05 18:32 rsbivand * [r444] DESCRIPTION, R/AAA.R, R/rgeos_predicate_binary.R, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c: tidy 2014-03-31 19:58 rsbivand * [r443] src/rgeos_predicate_binary.c: permit binary predicates to return lists 2014-03-31 19:46 rsbivand * [r442] src/rgeos_predicate_binary.c: permit binary predicates to return lists 2014-03-31 17:15 rsbivand * [r441] DESCRIPTION, R/AAA.R, R/rgeos_predicate_binary.R, R/rgeos_util.R, man/experimental-functions.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gTouches.Rd, src/rgeos_R2geos.c, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c: permit binary predicates to return lists 2014-03-25 14:00 rsbivand * [r440] configure: tidy 2014-03-25 13:55 rsbivand * [r439] ChangeLog, inst/ChangeLog: tidy 2014-03-23 09:22 rsbivand * [r438] DESCRIPTION, NAMESPACE, R/Rgpc_funcs.R, R/rgeos_topology.R, inst/wkts/sppsp.wkt, man/topo-unary-gDelaunayTriangulation.Rd, man/topo-unary-gNode.Rd, man/topo-unary-gPolygonize.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c: exposing noding 2014-02-13 15:30 rsbivand * [r437] ChangeLog, inst/ChangeLog: tidy 2014-02-13 15:28 rsbivand * [r436] src/rgeos_topology_binary.c: cast to remove warnings 2014-02-13 08:52 rsbivand * [r435] ChangeLog, inst/ChangeLog: tidy 2014-02-13 08:51 rsbivand * [r434] DESCRIPTION, src/rgeos_coord.c, src/rgeos_geos2R.c: changed PROTECT code for crdMAT 2014-02-08 15:50 rsbivand * [r433] DESCRIPTION, R/AAA.R, R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, src/rgeos_topology_binary.c: drop not poly intersections if both poly 2014-01-27 19:35 rsbivand * [r432] src/rgeos_geos2R.c: added id report on GC in GC 2014-01-27 19:06 rsbivand * [r431] src/rgeos_geos2R.c, src/rgeos_topology_binary.c: added id report on GC in GC 2014-01-22 12:13 rsbivand * [r430] src/rgeos_predicate_binary.c: fix over-generous symmetry in binar predicates 2014-01-22 12:09 rsbivand * [r429] DESCRIPTION, src/rgeos.h, src/rgeos_predicate_binary.c: fix over-generous symmetry in binar predicates 2013-12-06 23:34 crundel * [r428] R/rgeos_predicate_binary.R: Fix for an edge case of predicates with multipoint geometries There is an issue if some points share in a SpatialPoints object share an ID since there will be a mismatch between the number of output IDs 2013-10-06 13:29 rsbivand * [r427] ChangeLog, inst/ChangeLog: tidy 2013-10-06 13:28 rsbivand * [r426] R/rgeos_buffer.R, man/misc-gBuffer.Rd: blocking EMPTY 2013-10-05 14:46 rsbivand * [r425] ChangeLog, inst/ChangeLog: tidy 2013-10-05 14:35 rsbivand * [r424] inst/tests/test-translate-empty.R, inst/tests/testxml/general/TestBoundary.xml, inst/tests/testxml/general/TestFunctionLA.xml, inst/tests/testxml/general/TestFunctionLL.xml, inst/tests/testxml/general/TestFunctionPP.xml, inst/tests/testxml/general/TestSimple.xml, inst/tests/testxml/general/TestValid.xml, inst/tests/testxml/general/TestValid2.xml, inst/tests/testxml/robust/ExternalRobustness.xml, man/misc-gBuffer.Rd, man/pred-unary-gIsEmpty.Rd, man/wkt-functions.Rd, src/rgeos_geos2R.c: blocking EMPTY 2013-10-04 19:04 rsbivand * [r423] R/rgeos_buffer.R, man/misc-gBuffer.Rd, src/rgeos_buffer.c: adding buffer widths either 1 or n 2013-10-04 12:08 rsbivand * [r422] DESCRIPTION: removing empty polygons 2013-10-04 12:05 rsbivand * [r421] DESCRIPTION, R/rgeos_buffer.R, src/rgeos_buffer.c, src/rgeos_geos2R.c: removing empty polygons 2013-09-16 12:23 rsbivand * [r420] ChangeLog, inst/ChangeLog: tidy 2013-09-16 12:22 rsbivand * [r419] man/topo-unary-gDelaunayTriangulation.Rd: tidy 2013-09-16 11:15 rsbivand * [r418] man/topo-unary-gDelaunayTriangulation.Rd: tidy 2013-09-16 11:01 rsbivand * [r417] ChangeLog, inst/ChangeLog: tidy 2013-09-03 10:17 rsbivand * [r416] NAMESPACE, R/rgeos_topology.R, man/topo-unary-gDelaunayTriangulation.Rd, src/rgeos_topology.c: Delaunay triangulation 2013-09-02 21:14 rsbivand * [r415] R/rgeos_topology.R: start incorporating triangulation 2013-09-02 19:18 rsbivand * [r414] DESCRIPTION, R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_topology.c: start incorporating triangulation 2013-09-02 12:29 rsbivand * [r413] ChangeLog, inst/ChangeLog: tidy 2013-09-02 12:28 rsbivand * [r412] inst/tests/testxml/general/TestInteriorPoint.xml: revert xml tests to pass GEOS 3.2.0 2013-09-01 17:47 rsbivand * [r411] ChangeLog, inst/ChangeLog: tidy 2013-09-01 17:22 rsbivand * [r410] ChangeLog, inst/ChangeLog: tidy 2013-09-01 17:20 rsbivand * [r409] DESCRIPTION, cleanup, man/topo-unary-gPointOnSurface.Rd: add cleanup 2013-09-01 16:40 rsbivand * [r408] inst/tests/testxml/general/TestInteriorPoint.xml: revert two changes in gPointOnSurface test to match GEOS 3.4.* to suit < 3.4 2013-09-01 10:31 rsbivand * [r407] inst/tests/testxml/general/TestInteriorPoint.xml, man/topo-unary-gPointOnSurface.Rd: change gPointOnSurface test to match GEOS 3.4.* 2013-08-30 16:52 edzer * [r406] DESCRIPTION, R/over.R, man/comment-functions.Rd, man/labelpt.Rd, man/topo-unary-gPolygonize.Rd, man/utility-functions.Rd: moved sp and methods from Depends: to Imports: added library(sp) to the examples, where needed removed the ::: using the exported overDF_for_rgeos from sp 1.0-12 increased sp dependency to 1.0-12 2013-07-18 10:30 rsbivand * [r405] DESCRIPTION, src/rgeos_R2geos.c: check comment length against Polygons slot 2013-07-17 13:57 rsbivand * [r404] man/pred-binary-gContains.Rd: tidy 2013-07-02 20:17 rhijmans * [r403] R/rgeos_buffer.R: 2013-07-02 20:15 rhijmans * [r402] man/misc-gBuffer.Rd: 2013-07-02 20:12 rhijmans * [r401] R/rgeos_buffer.R: 2013-06-22 14:17 rsbivand * [r400] ChangeLog, inst/ChangeLog: tidy 2013-06-22 14:16 rsbivand * [r399] DESCRIPTION, NAMESPACE, R/labelpt.R, man/labelpt.Rd: update patched to polygonsLabel 2013-06-22 13:40 rsbivand * [r398] ChangeLog, inst/ChangeLog: more symbol check issues 2013-06-22 13:39 rsbivand * [r397] R/AAA.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R: tidy 2013-06-22 12:23 rsbivand * [r396] ChangeLog, inst/ChangeLog: tidy 2013-06-22 12:23 rsbivand * [r395] man/comment-functions.Rd, man/constructor-SpatialCollections.Rd, man/misc-gBuffer.Rd, man/misc-gDistance.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-unary-gIsValid.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd, man/topo-unary-gSimplify.Rd: more symbol check issues 2013-06-21 11:44 rsbivand * [r394] DESCRIPTION, R/AAA.R: tidy 2013-05-05 08:03 rsbivand * [r393] configure, configure.ac: add Unversioned directory to svn revision 2013-04-26 09:26 rsbivand * [r392] ChangeLog, inst/ChangeLog: tidy 2013-04-26 09:26 rsbivand * [r391] DESCRIPTION: Kirill Müller's reversion to GEOS 3.2.0 2013-04-26 09:25 rsbivand * [r390] DESCRIPTION, configure, configure.ac: Kirill Müller's reversion to GEOS 3.2.0 2013-04-09 16:47 rsbivand * [r389] ChangeLog, inst/ChangeLog: tidy 2013-04-09 13:47 rsbivand * [r388] src/rgeos_geos2R.c: length of IDs guard 2013-04-08 17:30 rsbivand * [r387] R/rgeos_topology.R, man/topo-unary-gPolygonize.Rd: fix bug in gPolygonize ids 2013-04-06 08:05 rsbivand * [r386] ChangeLog, inst/ChangeLog: tidy 2013-04-06 08:04 rsbivand * [r385] configure, configure.ac: checking with clang++ in configure 2013-04-05 21:05 rsbivand * [r384] ChangeLog, inst/ChangeLog: tidy 2013-04-05 20:02 rsbivand * [r383] configure: update configure.ac to force C++ test linking 2013-04-05 19:58 rsbivand * [r382] ChangeLog, inst/ChangeLog: tidy 2013-04-05 19:53 rsbivand * [r381] DESCRIPTION, configure, configure.ac: update configure.ac to force C++ test linking 2013-03-29 11:00 rsbivand * [r380] ChangeLog, inst/ChangeLog: tidy 2013-03-29 10:59 rsbivand * [r379] ChangeLog, DESCRIPTION, inst/ChangeLog, src/rgeos_R2geos.c, src/rgeos_R2geosMP.c, src/rgeos_bbox.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_topology.c, src/rgeos_topology_binary.c: remove clang warnings 2013-03-04 09:53 rsbivand * [r378] configure: tidy 2013-02-23 11:39 rsbivand * [r377] DESCRIPTION, R/rgeos_buffer.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, R/rgeos_wkt.R: enforce logical byid 2013-02-06 16:58 rsbivand * [r376] ChangeLog, inst/ChangeLog: tidy 2013-02-06 09:18 rsbivand * [r375] DESCRIPTION, R/rgeos_topology.R, man/topo-unary-gPolygonize.Rd: fix bug in gPolygonize for > 2 output objects 2013-01-31 16:46 rsbivand * [r374] inst/tests/testxml/general, inst/tests/testxml/general/TestBoundary.xml, inst/tests/testxml/general/TestCentroid.xml, inst/tests/testxml/general/TestConvexHull-big.xml, inst/tests/testxml/general/TestConvexHull.xml, inst/tests/testxml/general/TestFunctionAA.xml, inst/tests/testxml/general/TestFunctionAAPrec.xml, inst/tests/testxml/general/TestFunctionLA.xml, inst/tests/testxml/general/TestFunctionLAPrec.xml, inst/tests/testxml/general/TestFunctionLL.xml, inst/tests/testxml/general/TestFunctionLLPrec.xml, inst/tests/testxml/general/TestFunctionPA.xml, inst/tests/testxml/general/TestFunctionPL.xml, inst/tests/testxml/general/TestFunctionPLPrec.xml, inst/tests/testxml/general/TestFunctionPP.xml, inst/tests/testxml/general/TestInteriorPoint.xml, inst/tests/testxml/general/TestRectanglePredicate.xml, inst/tests/testxml/general/TestRelateAA.xml, inst/tests/testxml/general/TestRelateAC.xml, inst/tests/testxml/general/TestRelateLA.xml, inst/tests/testxml/general/TestRelateLC.xml, inst/tests/testxml/general/TestRelateLL.xml, inst/tests/testxml/general/TestRelatePA.xml, inst/tests/testxml/general/TestRelatePL.xml, inst/tests/testxml/general/TestRelatePP.xml, inst/tests/testxml/general/TestSimple.xml, inst/tests/testxml/general/TestValid.xml, inst/tests/testxml/general/TestValid2-big.xml, inst/tests/testxml/general/TestValid2.xml, inst/tests/testxml/general/TestWithinDistance.xml: tidy 2013-01-31 16:45 rsbivand * [r373] inst/tests/testxml/general: tidy 2013-01-16 09:03 rsbivand * [r372] ChangeLog, inst/ChangeLog: tidy 2013-01-16 09:02 rsbivand * [r371] DESCRIPTION, R/AAA.R: move startup message to .onAttach 2012-12-18 14:10 rsbivand * [r370] ChangeLog, inst/ChangeLog: tidy 2012-12-18 14:09 rsbivand * [r369] DESCRIPTION: tidy 2012-12-08 17:29 rsbivand * [r368] ChangeLog, inst/ChangeLog: tidy 2012-12-08 16:53 rsbivand * [r367] R/AAA.R: versions in startup messages 2012-12-08 16:50 rsbivand * [r366] R/AAA.R: versions in startup messages 2012-12-08 16:47 rsbivand * [r365] configure, configure.ac: versions in configure 2012-12-03 20:27 rsbivand * [r364] R/AAA.R: tidy 2012-11-20 20:13 rsbivand * [r363] ChangeLog, inst/ChangeLog: tidy 2012-11-20 20:09 rsbivand * [r362] DESCRIPTION: cumulation change in rgeos_binarytopologyfunc to avoid collection in collection error 2012-11-20 19:21 rsbivand * [r361] src/rgeos_topology_binary.c: cumulation change in rgeos_binarytopologyfunc to avoid collection in collection error 2012-11-12 09:30 rsbivand * [r360] ChangeLog, inst/ChangeLog: tidy 2012-11-12 08:00 rsbivand * [r359] R/gpc_geos.R: adding conversion of a NULL to gpc.poly 2012-11-11 19:01 rsbivand * [r358] DESCRIPTION, R/Rgpc_funcs.R: adding conversion of a NULL to gpc.poly 2012-11-05 17:30 rsbivand * [r357] ChangeLog, inst/ChangeLog: tidy 2012-11-05 17:30 rsbivand * [r356] man/comment-functions.Rd: dontrun part of check holes example 2012-11-05 08:56 rsbivand * [r355] ChangeLog, inst/ChangeLog: tidy 2012-11-05 08:55 rsbivand * [r354] DESCRIPTION: tidy 2012-09-30 18:05 edzer * [r353] DESCRIPTION, NAMESPACE, R/rgeos_wkt.R: removed dependency on stringr and plyr, replaced two str_ function calls with the equivalent ones in base R. 2012-09-06 09:30 rsbivand * [r352] inst/wkts, inst/wkts/sline1.wkt, inst/wkts/sline2.wkt, man/utility-functions.Rd: setScale example from Mao-Gui Hu 2012-08-19 13:07 edzer * [r351] NAMESPACE, R/labelpt.R, man/labelpt.Rd: update function name; cosmetics. 2012-08-17 20:20 edzer * [r350] DESCRIPTION, NAMESPACE, R/labelpt.R, man/labelpt.Rd: added first attempt to label points functions, that evolved from https://stat.ethz.ch/pipermail/r-sig-geo/2012-July/015693.html ; edited author@R section to DESCRIPTION. 2012-06-24 14:41 rsbivand * [r349] DESCRIPTION, src/rgeos.c, src/rgeos.h, src/rgeos_R2geosMP.c, src/rgeos_coord.c, src/rgeos_poly2nb.c: remove some -Wall warnings 2012-06-24 13:28 rsbivand * [r348] ChangeLog, inst/ChangeLog: tidy 2012-06-24 13:27 rsbivand * [r347] DESCRIPTION, src/dummy.cc, src/local_stubs.c: adding src/dummy.cc 2012-05-07 16:48 rsbivand * [r346] DESCRIPTION, src/rgeos_misc.c: fixed single geometry bug in gDistance 2012-05-02 09:58 rsbivand * [r345] ChangeLog, inst/ChangeLog: more configure updates 2012-05-02 09:58 rsbivand * [r344] configure, configure.ac: more configure updates 2012-04-24 10:56 rsbivand * [r343] ChangeLog, inst/ChangeLog: tidy 2012-04-24 10:54 rsbivand * [r342] configure, configure.ac: tidying configure.ac 2012-04-22 11:42 rsbivand * [r341] ChangeLog, inst/ChangeLog: tidy 2012-04-22 11:42 rsbivand * [r340] DESCRIPTION: add plyr dependency 2012-04-20 08:32 rsbivand * [r339] configure, configure.ac: tidy 2012-04-20 07:06 rsbivand * [r338] R/AAA.R: tidy 2012-04-20 07:01 rsbivand * [r337] DESCRIPTION: tidy 2012-04-20 07:01 rsbivand * [r336] ChangeLog, inst/ChangeLog: tidy 2012-04-20 07:00 rsbivand * [r335] configure, configure.ac, configure.in, src/Makevars.in: upgrading configure 2012-04-19 13:20 rsbivand * [r334] inst/tests/test-translate-polygon-collection.R, src/rgeos_geos2R.c: fixed broken tests 2012-04-17 13:38 rsbivand * [r333] DESCRIPTION, inst/tests/test-translate-polygons.R, src/rgeos_geos2R.c: broken tests 2012-04-16 13:21 rsbivand * [r332] R/rgeos_util.R: using top-level comment to SpatialPolygons for all member Polygons commented with OGC SFS kludge 2012-04-16 13:13 rsbivand * [r331] DESCRIPTION, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, R/rgeos_util.R: using top-level comment to SpatialPolygons for all member Polygons commented with OGC SFS kludge 2012-03-17 15:08 rsbivand * [r330] ChangeLog, DESCRIPTION, inst/ChangeLog: tidy 2012-03-16 18:53 crundel * [r329] src/rgeos_R2geos.c: Fixed crashing bug when ignoring holes with unknown parent poly 2012-03-16 14:46 rsbivand * [r328] ChangeLog, inst/ChangeLog: tidy 2012-03-16 11:54 rsbivand * [r327] DESCRIPTION, R/rgeos_misc.R: added createSPComment to RGEOSMiscFunc 2012-02-22 17:00 rsbivand * [r326] ChangeLog, inst/ChangeLog: tidy 2012-02-22 16:59 rsbivand * [r325] DESCRIPTION: tidy 2012-01-30 10:44 rsbivand * [r324] DESCRIPTION, R/rgeos_topology.R: revise gLineMerge 2012-01-27 12:31 rsbivand * [r323] man/topo-bin-gUnion.Rd: fix documentation 2012-01-20 10:12 rsbivand * [r322] ChangeLog, inst/ChangeLog: tidy 2012-01-19 19:25 rsbivand * [r321] src/rgeos_poly2nb.c: fixing gBinarySTRtreeQuery 2012-01-19 19:08 rsbivand * [r320] man/experimental-functions.Rd, src/rgeos_poly2nb.c: fixing gBinarySTRtreeQuery 2012-01-18 19:11 rsbivand * [r319] DESCRIPTION, src/rgeos_poly2nb.c: fixing gBinarySTRtreeQuery 2012-01-15 13:12 rsbivand * [r318] ChangeLog, DESCRIPTION, inst/ChangeLog: tidy 2012-01-15 11:37 edzer * [r317] DESCRIPTION, src/rgeos_predicate_binary.c: added r-forge URL to DESCRIPTION added type casts to remove compilation warnings 2012-01-15 09:58 crundel * [r316] src/rgeos_geos2R.c: Cleanup 2012-01-15 09:58 crundel * [r315] src/rgeos_topology.c, src/rgeos_topology_binary.c: Cleanup and memory leak 2012-01-15 09:58 crundel * [r314] src/rgeos_R2geos.c: memory leak 2012-01-15 09:58 crundel * [r313] src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: cleanup 2012-01-15 09:58 crundel * [r312] src/rgeos_geos2R.c: Small memory leak 2012-01-15 09:58 crundel * [r311] src/rgeos_bbox.c: Fixing what I broke 2012-01-15 09:58 crundel * [r310] src/rgeos_geos2R.c: Cleanup 2012-01-15 09:58 crundel * [r309] src/rgeos_R2geos.c, src/rgeos_R2geosMP.c: Cleanup and moved multipoint functions to new source file 2012-01-15 09:58 crundel * [r308] inst/tests/process_testxml.R, inst/tests/test-jts-xml.R: Break up XML test runner to allow for separate testing 2012-01-15 09:58 crundel * [r307] src/rgeos_bbox.c: Should function for all geometry types now 2012-01-15 09:58 crundel * [r306] src/rgeos.h, src/rgeos_coord.c: Fixed const correctness for coordSequence 2012-01-15 09:58 crundel * [r305] src/gpc_geos.c, src/init.c, src/rgeos.h: Removed gpc_geos functions since we arn't using them 2012-01-15 09:58 crundel * [r304] src/rgeos.h: cleanup 2012-01-15 09:58 crundel * [r303] src/gpc_geos.c, src/rgeos.h: Lots of cleaning and minor refactoring, changes have not been tested since we don't currently use any of this functionality 2012-01-15 09:58 crundel * [r302] src/rgeos_coord.c: cleanup 2012-01-15 09:58 crundel * [r301] src/rgeos_geos2R.c: cleanup 2012-01-15 09:57 crundel * [r300] src/rgeos_R2geos.c: cleanup 2012-01-15 09:57 crundel * [r299] src/rgeos_R2geos.c: Don't use the handle here 2012-01-15 09:57 crundel * [r298] src/rgeos_R2geos.c: Removed unused scale variable 2012-01-15 09:57 crundel * [r297] src/rgeos_R2geos.c: Cleaned tabs 2012-01-15 09:57 crundel * [r296] src/rgeos_topology.c: More cleanup, removed unused curtype 2012-01-15 09:57 crundel * [r295] src/rgeos_topology.c: Cleanup and switch to use just one call to GEOSGeomTypeId_r 2012-01-15 09:57 crundel * [r294] src/rgeos_geos2R.c: Cleaning tabs 2012-01-13 00:02 crundel * [r293] src/rgeos_geos2R.c: Cleanup and memory leak fix 2012-01-13 00:02 crundel * [r292] src/rgeos_geos2R.c: Cleanup 2012-01-13 00:02 crundel * [r291] inst/tests/test-translate-lines.R, inst/tests/test-translate-points.R, inst/tests/test-translate-polygon-collection.R, inst/tests/test-translate-polygons.R, inst/tests/test-translate-rings.R, inst/tests/test-translate.R: Break up translate tests into separate files 2012-01-09 07:59 rsbivand * [r290] ChangeLog, inst/ChangeLog: tidy 2012-01-08 21:42 edzer * [r289] src/rgeos_geos2R.c: one more memory leak fixed. 2012-01-08 19:46 edzer * [r288] DESCRIPTION, src/rgeos_bbox.c, src/rgeos_poly2nb.c, src/rgeos_validate.c: version bump; fixed more memory leaks. 2012-01-07 13:22 rsbivand * [r287] ChangeLog, inst/ChangeLog: tidy 2012-01-06 23:20 edzer * [r286] src/rgeos_buffer.c, src/rgeos_geos2R.c: further memory release hunting... 2012-01-06 18:31 edzer * [r285] DESCRIPTION, src/rgeos_R2geos.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_topology.c, src/rgeos_wkt.c: version bump; hunt for memory leaks. 2012-01-05 22:07 edzer * [r284] src/rgeos_buffer.c: un-commented the GEOS_destroy_r() commands in buffer, after adding conditions. 2012-01-02 09:06 rsbivand * [r283] ChangeLog, inst/ChangeLog: avoid gpclib suggest via maptools 2012-01-02 09:05 rsbivand * [r282] DESCRIPTION, man/gpc-new-generics.Rd: avoid gpclib suggest via maptools 2011-12-14 09:11 rsbivand * [r281] ChangeLog, inst/ChangeLog: revert destroy in R2geos.c 2011-12-14 09:10 rsbivand * [r280] DESCRIPTION, src/rgeos_R2geos.c: revert destroy in R2geos.c 2011-12-10 11:37 rsbivand * [r279] ChangeLog, inst/ChangeLog: clear stringr 0.6 mess 2011-12-10 11:36 rsbivand * [r278] DESCRIPTION, src/rgeos_R2geos.c: clear stringr 0.6 mess 2011-12-10 07:44 crundel * [r277] R/rgeos_wkt.R: Changed str_match_all to str_extract_all 2011-12-09 22:04 crundel * [r276] tests/test-all.R: use test_package from testthat instead of test_file 2011-12-09 22:04 crundel * [r275] R/rgeos_wkt.R: Fix to address small change in return type from stringr str_match_all function 2011-11-28 14:55 rsbivand * [r274] src/rgeos_buffer.c: moved curgeom inside loop 2011-11-18 03:57 crundel * [r273] src/rgeos_topology_binary.c: Fix returned id for binary topology operations 2011-11-14 18:39 rsbivand * [r272] ChangeLog, inst/ChangeLog: tidy 2011-11-14 18:38 rsbivand * [r271] DESCRIPTION, configure, configure.in, src/init.c, src/rgeos.h, src/rgeos_topology.c: move HAVE_UNARYUNION to rgeos.h 2011-11-14 10:55 rsbivand * [r270] ChangeLog, inst/ChangeLog: tidy 2011-11-10 07:43 rsbivand * [r269] ChangeLog, inst/ChangeLog: tidy 2011-11-09 10:51 rsbivand * [r268] DESCRIPTION, src/rgeos_topology_binary.c: drop empty objects before building Geometry Collection in binary topology ops 2011-10-30 18:59 rsbivand * [r267] DESCRIPTION, man/topo-unary-gSimplify.Rd, src/gpc_geos.c, src/rgeos_buffer.c, src/rgeos_geos2R.c: tickling destroy 2011-10-25 21:22 crundel * [r266] DESCRIPTION: Require stringr >= 0.5 2011-10-19 19:20 rsbivand * [r265] src/gpc_geos.c, src/rgeos_geos2R.c: add space character for safety in comment 2011-10-19 18:52 rsbivand * [r264] ChangeLog, inst/ChangeLog: tidy 2011-10-19 18:51 rsbivand * [r263] DESCRIPTION, src/gpc_geos.c, src/local_stubs.c, src/rgeos_geos2R.c: fix comment string length 2011-09-16 07:24 rsbivand * [r262] ChangeLog, inst/ChangeLog: tidy 2011-09-16 07:22 rsbivand * [r261] DESCRIPTION: tidy 2011-09-05 12:35 rsbivand * [r260] src/rgeos_poly2nb.c: STRtree loop simplification (strcmp before loop) 2011-09-05 08:07 rsbivand * [r259] src/rgeos_poly2nb.c: STRtree loop simplification (strcmp before loop) 2011-09-04 18:29 rsbivand * [r258] R/rgeos_util.R, src/rgeos_poly2nb.c: callback corrections 2011-09-03 14:34 rsbivand * [r257] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_spExtensions_Classes.R, src/rgeos_buffer.c, src/rgeos_wkt.c: changed dependency load syntax 2011-09-03 03:32 crundel * [r256] src/rgeos_poly2nb.c: Cleanup of build warnings from using callback pointer 2011-09-03 03:32 crundel * [r255] src/rgeos.h, src/rgeos_misc.c, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c, src/rgeos_topology.c, src/rgeos_topology_binary.c: Cleanup of build warnings from function pointers 2011-06-11 06:59 rsbivand * [r254] ChangeLog, inst/ChangeLog: touch local_stubs.c 2011-06-11 06:59 rsbivand * [r253] src/local_stubs.c: touch local_stubs.c 2011-06-11 05:26 rsbivand * [r252] ChangeLog, inst/ChangeLog: permit NA IDs in union 2011-06-11 05:25 rsbivand * [r251] R/rgeos_topology.R: permit NA IDs in union 2011-06-10 22:06 rsbivand * [r250] DESCRIPTION, R/rgeos_topology.R, configure.in, man/topo-bin-gUnion.Rd, src/gpc_geos.c, src/rgeos_geos2R.c: sp comment buffer overflow fix 2011-06-09 14:04 rsbivand * [r249] ChangeLog, inst/ChangeLog: tidy 2011-06-09 13:55 rsbivand * [r248] DESCRIPTION: update sp version 2011-06-09 08:23 rsbivand * [r247] R/rgeos_topology.R, man/topo-bin-gUnion.Rd: gUnionCascaded suggestion 2011-06-09 06:21 rsbivand * [r246] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_topology.R, configure, configure.in, man/pred-binary-gTouches.Rd, man/topo-bin-gUnion.Rd, man/utility-functions.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c: adding UnaryUnion for GEOS 3.3.0 2011-05-24 16:15 rsbivand * [r244] DESCRIPTION: added version to GEOS required 2011-05-24 11:27 edzer * [r243] DESCRIPTION: increased dependency on sp 0.9-73, which has over defined as generic. 2011-05-18 21:07 rsbivand * [r242] ChangeLog, inst/ChangeLog: RGEOSBinPredFunc single argument fix 2011-05-18 21:06 rsbivand * [r241] R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R: RGEOSBinPredFunc single argument fix 2011-05-18 20:53 rsbivand * [r240] ChangeLog, inst/ChangeLog: RGEOSBinPredFunc single argument fix 2011-05-18 20:49 rsbivand * [r239] DESCRIPTION, R/rgeos_predicate_binary.R: RGEOSBinPredFunc single argument fix 2011-05-11 12:49 edzer * [r238] R/over.R: improved over methods for gridded objects 2011-05-09 20:31 edzer * [r237] R/over.R: added the lines & (grids / pixels) methods for "over" overlay. 2011-05-09 16:50 edzer * [r236] DESCRIPTION, R/over.R: added 18 overlay methods for "over" (from sp) 2011-03-30 14:42 rsbivand * [r235] ChangeLog, inst/ChangeLog: attempts to limit memory hunger 2011-03-30 14:40 rsbivand * [r234] R/AAA.R, R/rgeos_util.R, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: attempts to limit memory hunger 2011-03-29 08:25 rsbivand * [r233] DESCRIPTION, R/rgeos_util.R, man/experimental-functions.Rd, man/topo-bin-gIntersection.Rd, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_poly2nb.c: STRtree for Polygons 2011-03-28 09:40 rsbivand * [r232] ChangeLog, inst/ChangeLog: documenting hole checking for Polygons objects 2011-03-28 09:39 rsbivand * [r231] R/AAA.R: documenting hole checking for Polygons objects 2011-03-28 09:29 rsbivand * [r230] ChangeLog, inst/ChangeLog: documenting hole checking for Polygons objects 2011-03-28 09:28 rsbivand * [r229] DESCRIPTION, configure, configure.in, man/comment-functions.Rd: documenting hole checking for Polygons objects 2011-03-26 19:41 rsbivand * [r228] R/rgeos_buffer.R, R/rgeos_misc.R: adding projection check for buffer and misc 2011-03-26 19:29 rsbivand * [r227] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_buffer.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, R/rgeos_util.R, man/comment-functions.Rd, src/rgeos_geos2R.c, tests/test-all.R: imposing polygon checking unless option set 2011-03-21 10:13 rsbivand * [r226] ChangeLog, inst/ChangeLog: prerelease 2011-03-21 09:04 rsbivand * [r225] ChangeLog, inst/ChangeLog: prerelease 2011-03-21 09:03 rsbivand * [r224] DESCRIPTION: prerelease 2011-02-26 23:03 rsbivand * [r223] inst/tests/test-jts-xml.R: xml file reading wrapper for 32-bit libxml2 on F14 in tests 2011-02-06 14:58 rsbivand * [r222] R/AAA.R: suppress startup messages 2010-11-30 17:38 rsbivand * [r221] ChangeLog, inst/ChangeLog: tidy 2010-11-24 12:31 rsbivand * [r220] R/rgeos_topology.R, R/rgeos_util.R, man/topo-bin-gUnion.Rd: g*STRtreeQuery added to experimental 2010-11-24 10:44 rsbivand * [r219] man/experimental-functions.Rd: g*STRtreeQuery added to experimental 2010-11-24 10:39 rsbivand * [r218] ChangeLog, inst/ChangeLog: g*STRtreeQuery added to experimental 2010-11-24 10:39 rsbivand * [r217] DESCRIPTION, NAMESPACE, R/rgeos_util.R, man/experimental-functions.Rd, src/rgeos_poly2nb.c: g*STRtreeQuery added to experimental 2010-11-19 21:56 rsbivand * [r216] .Rbuildignore: add rgeos_unary_STRtree_query and rgeos_binary_STRtree_query 2010-11-19 21:54 rsbivand * [r215] src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_poly2nb.c: add rgeos_unary_STRtree_query and rgeos_binary_STRtree_query 2010-11-19 13:18 rsbivand * [r214] src/rgeos_poly2nb.c: STRtree attempts 2010-11-18 23:07 crundel * [r213] inst/tests/testxml/vivid: Removing empty folder 2010-11-08 20:43 rsbivand * [r212] ChangeLog, inst/ChangeLog: tidy 2010-11-08 20:42 rsbivand * [r211] DESCRIPTION: tidy 2010-11-08 20:39 rsbivand * [r210] ChangeLog, inst/ChangeLog: tidy 2010-11-08 20:05 crundel * [r209] inst/poly-ex-gpc, inst/poly-ex-gpc/ex-poly1.txt, inst/poly-ex-gpc/ex-poly2.txt, inst/poly-ex-gpc/hole-poly.txt: Added gpc polygon example data files 2010-11-08 20:02 crundel * [r208] data, man/class-gpc.poly.Rd, man/experimental-functions.Rd: More clean up 2010-11-08 19:44 crundel * [r207] DESCRIPTION, inst/tests/test-jts-xml.R, man, man/class-gpc.poly.Rd, tests, tests/test-all.R: Package clean up for release 2010-11-07 19:38 rsbivand * [r206] ChangeLog, inst/ChangeLog: tidy 2010-11-07 19:18 rsbivand * [r205] configure.win, src/Makevars.win: Windows static build 2010-11-01 18:02 crundel * [r204] R/rgeos_misc.R, src/rgeos_R2geos.c: Fixed a bug in handling polygons with holes but no comment. 2010-09-29 17:51 crundel * [r203] NAMESPACE, R/rgeos_util.R: 2010-09-26 20:29 crundel * [r202] R/rgeos_util.R, src/rgeos_R2geos.c, tests/test-all.R: Small fixes to get CHECK to work 2010-09-09 20:47 crundel * [r201] src/rgeos_R2geos.c: Changed translate functions so that unassigned holes are ignored and a warning reported. 2010-09-09 19:56 crundel * [r200] NAMESPACE, R/gpc_geos.R, R/rgeos.R, R/rgeos_util.R, man/checkHolesGPC.Rd, man/checkPolygonsGEOS.Rd, man/comment-functions.Rd, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_validate.c: Removed checkPolygonsGEOS and checkHolesGPC functions and replaced then with createPolygonsComment and createSPComment functions. Similar functionality, but removes guessing of hole status for polygons and focuses on assign ownership via comment attributes. 2010-08-16 12:36 crundel * [r199] src/rgeos_predicate_binary.c: Added const to prepared geometry to deal with compiler warning 2010-08-16 12:34 crundel * [r198] man/pred-binary-gEquals.Rd, man/pred-binary-gRelate.Rd: Small docs typo fix 2010-08-16 12:31 crundel * [r197] inst/tests/test-jts-xml.R, tests/test-all.R: Small test fixes Some of the tests in the JTS xml files are skipped due to compatibility issues, see descSkip 2010-08-16 12:27 crundel * [r196] R/rgeos_predicate_binary.R, man/pred-binary-gEquals.Rd, man/pred-binary-gRelate.Rd, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-unary-gSimplify.Rd: Small documentation fixes Put tol and pattern as 3rd arguments in gEquals and gRelate 2010-08-16 11:46 crundel * [r195] man/misc-gDistance.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd, man/topo-unary-gPolygonize.Rd, man/topo-unary-gSimplify.Rd: Documentation update 2010-08-16 11:45 crundel * [r194] NAMESPACE: Commented out poly_findInBoxGEOS 2010-08-16 10:25 crundel * [r193] R/rgeos_topology.R: Simplified function arguments for gSimplify since byid doesnt really matter. 2010-08-16 09:10 crundel * [r192] R/rgeos_spExtensions_Methods.R: Added isGenerics checks for row.names and row.names<- 2010-08-16 09:09 crundel * [r191] NAMESPACE, R/rgeos_predicate_binary.R: Separated Equals and EqualsExact back into different functions, had misunderstood how they worked. Removed groupID from NAMESPACE for the time being, probably needs to be reimplemented in C. 2010-08-15 13:46 crundel * [r190] man/misc-gArea.Rd, man/misc-gBuffer.Rd, man/misc-gDistance.Rd, man/misc-gLength.Rd, man/pred-unary-gIsEmpty.Rd, man/pred-unary-gIsRing.Rd, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd: Documentation update 2010-08-15 13:44 crundel * [r189] NAMESPACE, R/rgeos_buffer.R, R/rgeos_predicate_binary.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c: Fixed bug with gRelate when pattern was specified Combined gEquals and gEqualsExact functions by adding tol argument to gEquals Changed default of byid in gBuffer to FALSE for consistency 2010-08-15 10:07 crundel * [r188] R/rgeos_misc.R: Fixed bug, GEOSArea_r was being called by both gLength and gArea 2010-08-15 10:06 crundel * [r187] NAMESPACE: Removed reference for gHasZ, no use for the function currently as 3d geometries are not supported 2010-08-15 10:05 crundel * [r186] src/rgeos_predicate_unary.c: Cleaned up code / variable declarations 2010-08-14 11:47 crundel * [r185] man/pred-unary-gIsValid.Rd: Fixed extra line in example, and linearring example 2010-08-14 10:51 crundel * [r184] man/gpc-new-generics.Rd: Added alias to symdiff function 2010-08-14 10:51 crundel * [r183] NAMESPACE, R/rgeos_predicate_unary.R, inst/tests/test-jts-xml.R: Unary Predicate functions renamed 2010-08-14 10:50 crundel * [r182] man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd, man/wkt-functions.Rd: Documentation update 2010-08-11 13:41 crundel * [r181] R/rgeos_util.R, man/utility-functions.Rd: Small bugfix / typo fix 2010-08-11 12:46 crundel * [r180] NAMESPACE, R/rgeos_util.R, man/utility-functions.Rd: Utility function documentation Renamed argument in checkP4S to p4s for the sake of brevity 2010-08-11 12:19 crundel * [r179] NAMESPACE, R/rgeos_util.R, inst/tests/test-translate-empty.R, inst/tests/test-translate.R: Renamed function doubletranslate to translate 2010-08-11 12:18 crundel * [r178] man/checkHolesGPC.Rd: Removed empty documentation sections 2010-08-11 12:14 crundel * [r177] NAMESPACE, R/rgeos.R: Removed unused intersection functions 2010-08-11 12:14 crundel * [r176] man/gpc.poly-class.Rd, man/gpc.poly.nohole-class.Rd, man/new-generics.Rd, man/polyfile.Rd: Files renamed 2010-08-11 12:13 crundel * [r175] man/class-Ring.Rd, man/class-SpatialCollections.Rd, man/class-SpatialRings.Rd, man/class-SpatialRingsDataFrame.Rd, man/class-gpc.poly.Rd, man/class-gpc.poly.nohole.Rd, man/constructor-SpatialCollections.Rd, man/constructor-SpatialRings.Rd, man/gpc-new-generics.Rd, man/gpc-polyfile.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd: Documentation update, changed naming convention to keep things clear 2010-08-10 18:04 crundel * [r174] man/topo-bin-gUnion.Rd: Fixed function argument ordering in gLineMerge usage. 2010-08-10 18:02 crundel * [r173] man/topo-unary-gBoundary.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd: Fixed incorrect function names in usage section 2010-08-10 17:57 crundel * [r172] tests/test-all.R: Fixed test path 2010-08-10 17:56 crundel * [r171] man/gpc.poly-class.Rd: Removed triangulate example 2010-08-10 17:49 crundel * [r170] man/gIntersection.Rd, man/gUnion.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd: Preliminary documentation for all topology functions along with examples. Changed Rd file naming scheme for clarity 2010-08-10 17:48 crundel * [r169] R/rgeos_topology.R: Changed argument order for topology functions for the sake of consistency. 2010-08-10 13:26 crundel * [r168] R/rgeos_topology.R: Fixed bug in gPolygonizer 2010-08-10 13:24 crundel * [r167] man/gpc.poly-class.Rd, man/gpc.poly.nohole-class.Rd, man/new-generics.Rd, man/polyfile.Rd: Updated documentation files for gpcpoly functions 2010-07-27 06:08 crundel * [r166] inst/tests/test-jts-xml.R: Fixed (working) version of jts xml test processing 2010-07-27 05:15 crundel * [r165] inst/tests/test-translate-empty.R, inst/tests/test-translate.R: Added setScale() call to begin of each set of tests to reset scale option (changed by some of the JTS tests) 2010-07-27 05:14 crundel * [r164] NAMESPACE, R/rgeos_predicate_binary.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c: Added prepared geometry functions - gContainsProperly, gCovers, gCoveredBy and prepared variants of gIntersects and gContains specified by a flag. 2010-07-27 05:04 crundel * [r163] R/rgeos_util.R: Fixed bug, extra ) in double translate 2010-07-27 03:44 crundel * [r162] inst/tests/test-empty-geom.R, inst/tests/test-translate-empty.R, inst/tests/test-translate.R: Changed phrasing of some of the tests in translate to make it easier to distinguish between similar tests. Renamed test-empty-geom.R to test-translate-empty.R 2010-07-25 09:15 crundel * [r161] R/rgeos_util.R, R/rgeos_wkt.R, src/rgeos_R2geos.c, src/rgeos_geos2R.c: Fixed bug in passing ids during translation 2010-07-25 08:08 crundel * [r160] R/rgeos_predicate_binary.R: Removed more leftover debug messaging 2010-07-25 07:56 crundel * [r159] R/rgeos_predicate_binary.R: Fixed bug in gRelate, still called RGEOSRelate and passed byid instead of pattern as 3rd argument 2010-07-25 06:31 crundel * [r158] src/rgeos_geos2R.c: Removed leftover debug messages 2010-07-25 06:24 crundel * [r157] inst/tests/test-empty-geom.R: Added test for GEOMETRYCOLLECTION EMPTY 2010-07-25 06:23 crundel * [r156] R/rgeos_wkt.R: Fixed bug to handle null geometries 2010-07-25 06:22 crundel * [r155] src/rgeos_R2geos.c, src/rgeos_geos2R.c: Fixed bugs handling empty geometries, collections were getting turned into nulls. Now only GEOMETRYCOLLECTION EMPTY returns null. 2010-07-24 07:03 crundel * [r154] NAMESPACE, R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_topology.c: Added gSimplify and gPolygonize functionality, no idea how the latter works 2010-07-24 03:19 crundel * [r153] src/rgeos_R2geos.c: Fixed bug in R2geos translate function for SpatialPoints object without row names. 2010-07-19 18:17 crundel * [r152] NAMESPACE, R/rgeos_spExtensions_Methods.R, R/rgeos_util.R, R/rgeos_wkt.R: Small fixes for handling SpatialCollections 2010-07-19 06:28 crundel * [r151] src/rgeos_R2geos.c, src/rgeos_geos2R.c: Initial implementation of translation of SpatialCollections classes to and from geos. 2010-07-19 04:58 crundel * [r150] R/rgeos_spExtensions_Methods.R: Fixed bug in SpatialCollections print method to use NA as default polygon color if col is not specified. 2010-07-19 04:27 crundel * [r149] R/rgeos_spExtensions_Methods.R: Fixed bug in SpatialCollections print method to have the proper range 2010-07-19 04:17 crundel * [r148] NAMESPACE: Export SpatialCollections classes and constructor 2010-07-19 04:16 crundel * [r147] R/rgeos_SpatialCollections.R, R/rgeos_SpatialRings.R, R/rgeos_SpatialRingsDataFrame.R, R/rgeos_spExtensions_Classes.R, R/rgeos_spExtensions_Methods.R: Combined SpatialCollections and SpatialRings extension classes into the same file (SpatialCollections depends on SpatialRings this way we can be sure that the latter is defined first) 2010-07-19 01:46 crundel * [r146] R/rgeos_SpatialCollections.R: Initial implementation of SpatialCollections with plot method missing additional helper methods 2010-07-17 04:56 crundel * [r145] R/Rgpc_funcs.R, R/gpc_geos.R, src/gpc_geos.c: Updated gpc replacement functions, added translation functions to and from gpc and sp 2010-07-17 04:54 crundel * [r144] man/LinesIntersections.Rd, man/gIntersection.Rd, man/gUnion.Rd, man/gpc.poly-class.Rd, man/thinnedSpatialPolyGEOS.Rd, man/unionSpatialPolygonsGEOS.Rd: Documentation update -removed thinnedSpatialPolyGEOS.Rd -replaced LinesIntersections.Rd with gIntersections.Rd -replaced unionSpatialPolygons.Rd with gUnion.Rd -removed unnecessary example from gpc.poly-class.Rd 2010-07-17 04:51 crundel * [r143] NAMESPACE, R/rgeos_buffer.R, R/rgeos_linearref.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, src/init.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_misc.c, src/rgeos_predicate_binary.c, src/rgeos_topology_binary.c: Major Update switched from RGEOS prefix on functions to gFunction style. Old function names retained but with Deprecated warning. Removed "is" prefix from relevant functions Added binary topology functions (gUnion, gDifference, etc) Combined related functions (hausdorffdistance with distance etc) 2010-07-12 19:00 rsbivand * [r142] R/AAA.R, configure, configure.in: version 2010-07-12 18:55 rsbivand * [r141] inst/SVN_VERSION: version 2010-07-12 18:32 rsbivand * [r140] inst/SVN_VERSION: version 2010-07-12 18:32 rsbivand * [r139] inst/SVN_VERSION: version 2010-07-12 18:29 rsbivand * [r138] configure, configure.in: version 2010-07-12 18:24 rsbivand * [r137] R/AAA.R, configure, configure.in: version 2010-07-10 17:57 rsbivand * [r136] NAMESPACE: fixed NAMESPACE 2010-07-10 07:05 crundel * [r135] R/rgeos_wkt.R, src/rgeos_geos2R.c: Fixes for handling GEOMETRYCOLLECTION EMPTY, now returns NULL 2010-07-08 21:24 crundel * [r134] inst/tests/test-empty-geom.R: Bug fix - misnamed variabel 2010-07-08 21:19 crundel * [r133] R/rgeos_buffer.R, R/rgeos_topology.R, R/rgeos_wkt.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_buffer.c, src/rgeos_geos2R.c, src/rgeos_topology.c, src/rgeos_wkt.c: Removed all references to threshold in geos2R translate functions and calling functions 2010-07-08 21:17 crundel * [r132] man/LinesIntersections.Rd, man/thinnedSpatialPolyGEOS.Rd: Commented out current broken function calls 2010-07-08 21:05 crundel * [r131] R/rgeos_SpatialRingsDataFrame.R: Small bug fix in chFIDsSpatialRingsDataFrame 2010-07-08 20:52 crundel * [r130] R/rgeos_simplify.R, R/rgeos_union.R, src/rgeos_sp.c: Removed files, functionality will be replicated elsewhere 2010-07-08 20:17 crundel * [r129] inst/tests/test-empty-geom.R: Updated unit tests for handling empty geometries (added polygons and a few small fixes) 2010-07-08 20:16 crundel * [r128] src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_sp.c: Renamed functions for parsing polygons to and from geos and R to be more consistent Added handling for empty polygons to translate functions Removed thresholding from R2geos polygon translation functions. Will re-implement as a separate function. FIXME - remove threshold parameter from function calls Added rgeos_Pt2xy coordinate function for getting x and y coordinates from a geos point Added rgeos_crdMatFixDir which ensures coordinate direction is correct in a coordinate matrix depending of if it is a hole or not 2010-07-08 20:10 crundel * [r127] R/rgeos_SpatialRings.R: Fixed Ring class constructor to check the direction of points, if not CW then reverses them. 2010-06-27 22:25 crundel * [r126] inst/tests/test-empty-geom.R: Unit tests for empty geometries and their translations 2010-06-27 07:49 crundel * [r125] src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c: Separated LinearRing translate functions from Linestring functions Fixed R2geos translation of empty geometries 2010-06-26 22:24 crundel * [r124] NAMESPACE: Export class constructor functions 2010-06-26 22:23 crundel * [r123] inst/tests/test-translate.R, src/rgeos_R2geos.c, src/rgeos_geos2R.c: Translate functions for SpatialRings, fixed translate unit tests to use the proper class. 2010-06-26 22:23 crundel * [r122] R/rgeos_buffer.R, R/rgeos_misc.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_util.R: Removed extractIDs function, uses row.names instead 2010-06-26 18:54 crundel * [r121] src/rgeos_geos2R.c: Initial handling of empty points and empty linestrings proof of concept (probably doesn't play well with existing sp methods) 2010-06-26 18:50 crundel * [r120] src/rgeos_coord.c: Cleaned code 2010-06-26 18:44 crundel * [r119] src/rgeos_bbox.c: Cleaned code 2010-06-26 18:42 crundel * [r118] NAMESPACE, R/rgeos_SpatialRings.R, R/rgeos_SpatialRingsDataFrame.R: Initial implementation of SpatialRings and SpatialRingsDataFrame classes based on SpatialLines 2010-06-26 18:41 crundel * [r117] R/rgeos_wkt.R: changed readWKT, let GEOS do all parsing/checking of WKTs instead of trying to sort it out in R. 2010-06-26 02:04 crundel * [r116] src/rgeos_R2geos.c: Cleaned up c code, no changes in functionality 2010-06-21 02:36 crundel * [r115] tests/.Rhistory: Removed .Rhistory 2010-06-15 17:13 rsbivand * [r114] R/AAA.R: keyword on load 2010-06-15 17:10 rsbivand * [r113] ChangeLog, inst/ChangeLog: keyword on load 2010-06-15 17:09 rsbivand * [r112] R/AAA.R: keyword on load 2010-06-14 05:30 crundel * [r111] src/rgeos_bbox.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_misc.c, src/rgeos_wkt.c: Cleaned c code formatting 2010-06-12 20:38 crundel * [r110] src/rgeos_area.c, src/rgeos_geos2R.c: Cleaned code in rgeos_LinearRingPolygon removed dependence on rgeos_csArea. Uses GEOSArea_r now. Should be slightly faster. Removed rgeos_area.c (rgeos_csArea only referenced in rgeos_LinearRingPolygon) 2010-06-12 19:48 crundel * [r109] src/rgeos.c, src/rgeos.h: Cleaned code in rgeos.c 2010-06-10 00:50 crundel * [r107] R/rgeos_misc.R, R/rgeos_predicate_binary.R, src/rgeos_misc.c, src/rgeos_predicate_binary.c: Modified Binary predicate functions and distance functions to allow byid to be of length 2 to indicate if one geometry should be processed by id and the other not. 2010-06-09 23:25 crundel * [r106] NAMESPACE: Forgot to add groupID to NAMESPACE 2010-06-09 23:22 crundel * [r105] NAMESPACE, R/rgeos_topology.R, R/rgeos_util.R, man/unionSpatialPolygonsGEOS.Rd, src/init.c, src/rgeos.h, src/rgeos_sp.c, src/rgeos_topology.c: Added RGEOSUnionCascaded, replicates unionSpatialPolygonsGEOS functionality but is currently slower. Added groupID utility function which restructures a SP object based on newly assigned IDs, subobjects with the same ID are grouped together. General solution to the need to flatten SpatialPolygons for use with RGEOSUnionCascaded, but may be too slow for practical use. 2010-06-07 09:02 rsbivand * [r104] inst/ChangeLog: update changelog 2010-06-07 08:54 rsbivand * [r103] ChangeLog: update changelog 2010-06-07 08:28 rsbivand * [r102] DESCRIPTION, NAMESPACE, src/gpc_geos.c, src/init.c, src/rgeos_coord.c, src/rgeos_sp.c: tidying up to run CMD check 2010-06-07 05:01 crundel * [r101] src/rgeos_topology_binary.c: 2010-06-07 04:28 crundel * [r100] src/rgeos_R2geos.c: Handles Spatial DataFrame classes, currently just ignores the data frame 2010-06-07 02:51 crundel * [r99] R/rgeos_topology_binary.R, R/rgeos_topology_relation.R: Renamed rgeos_topology_relation to rgeos_topology_binary 2010-06-06 05:48 crundel * [r98] src/rgeos_topology.c: Fixed error message typos (referred to wrong parent function) 2010-06-06 05:37 crundel * [r97] R/rgeos_predicate_binary.R, R/rgeos_topology_relation.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: Fixed issue with argument number mismatch in binary predicate function. Binary predicate functions take into account when the result is symmetric and perform only the necessary calculations. RGEOSRelate and RGEOSRelatePattern moved to rgeos_binary_ predicate 2010-06-05 21:33 crundel * [r96] R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_relation.R, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: Fixed issues with binary predicate issue (temporarily remove rgeos_relatepattern) Added Unary Predicate Functions 2010-06-03 22:46 crundel * [r95] src/rgeos.h, src/rgeos_misc.c, src/rgeos_predicate_binary.c, src/rgeos_topology.c: Removed the enum for each function and just passing a function pointer directly now. 2010-06-02 03:44 crundel * [r94] R/rgeos_misc.R, R/rgeos_predicate_binary.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c: Added binary predicate functions: RGEOSDisjoint, RGEOSTouches, RGEOSIntersects, RGEOSCrosses, RGEOSWithin, RGEOSContains, RGEOSOverlaps, RGEOSEquals Generalized functions in rgeos_misc 2010-06-02 00:35 crundel * [r93] R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_misc.c, src/rgeos_topology.c: Added RGEOSLineMerge Generalized function calls in topology and misc, functions with the same type of parameters and differ only in the GEOS function used are processed by the same function. Small bug fixes in coord and geos2R 2010-05-31 03:05 crundel * [r92] R/rgeos_misc.R, src/init.c, src/rgeos.h, src/rgeos_misc.c: Added RGEOSHausdorffDistance, combined underlying C code with rgeosdistance since everything is the same except for the geos function call. FIXME - currently uses function pointers which are causing gcc warnings, but code appears to work. 2010-05-30 21:53 crundel * [r91] R/rgeos_misc.R, src/init.c, src/rgeos.h, src/rgeos_misc.c: Added RGEOSDistance and RGEOSisWithinDistance in rgeos_misc 2010-05-30 21:14 crundel * [r90] R/rgeos_misc.R, src/init.c, src/rgeos.h, src/rgeos_misc.c: Added RGEOSArea and RGEOSLength in rgeos_misc 2010-05-30 20:40 crundel * [r89] src/rgeos.h: More cleaning of rgeos.h 2010-05-30 20:38 crundel * [r88] src/rgeos_contains.c, src/rgeos_distance.c, src/rgeos_length.c: Removed rgeos_contains.c, rgeos_distance.c, rgeos_length.c functionality will be covered by rgeos_misc.c 2010-05-30 20:37 crundel * [r87] src/init.c, src/rgeos.h: Removed rgeos_contains.c, rgeos_distance.c, rgeos_length.c functionality will be covered by rgeos_misc.c Cleaned up init.c and rgeos.h 2010-05-30 20:15 crundel * [r86] R/rgeos_buffer.R, src/rgeos_buffer.c: Added RGEOSBuffer 2010-05-30 20:11 crundel * [r85] R/rgeos_util.R: Added default value for setScale 2010-05-30 20:10 crundel * [r84] src/rgeos_poly2nb.c, src/rgeos_sp.c, src/rgeos_validate.c: Updated function names 2010-05-29 09:38 crundel * [r83] NAMESPACE, R/rgeos_wkt.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_geos2R.c, src/rgeos_wkt.c: Added writeWKT, small fixes to translate functions 2010-05-27 19:47 crundel * [r82] NAMESPACE, R/rgeos_buffer.R, R/rgeos_linearref.R, R/rgeos_topology.R, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_buffer.c, src/rgeos_predicate_unary.c, src/rgeos_topology.c: Added RGEOSBoundary, RGEOSGetCentroid, RGEOSPointOnSurface, RGEOSBuffer which mostly work 2010-05-26 17:59 rsbivand * [r81] ChangeLog, inst/ChangeLog: changelogs 2010-05-26 06:06 crundel * [r80] src/init.c: 2010-05-26 06:06 crundel * [r79] R/rgeos_topology.R, inst/tests/test-translate.R, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_geos2R.c, src/rgeos_sp.c, src/rgeos_topology.c: Small fixes to translation functions, everything should be working Updated test-translate.R with polygon unit tests Added RGEOSConvexHull (untested) 2010-05-24 04:40 crundel * [r78] R/rgeos_topology.R, R/rgeos_util.R, src/rgeos_topology.c: Added rgeos_envelope and RGEOSEnvelope functions 2010-05-24 04:25 crundel * [r77] src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_bbox.c, src/rgeos_geos2R.c: Unified bounding box functions, geom2bbox should work for all geometry types now 2010-05-23 08:03 crundel * [r76] NAMESPACE, R/rgeos_util.R, R/rgeos_wkt.R, inst/tests, inst/tests/test-jts-xml.R, inst/tests/test-translate.R, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c, src/rgeos_geos2R.c: Added proper ID handling to translation functions and readWKT. Currently point ids are stored as row names which is a design decision that should be revisited later (current implementation works, but probably doesn't integrate well with existing sp tools) Added fixes to test-translate.R, mostly related to IDs Removed SP2WKT (which never worked) and WKT2SP in favor of readWKT - revisit naming convention? 2010-05-21 22:00 crundel * [r75] NAMESPACE: 2010-05-21 22:00 crundel * [r74] R/rgeos_util.R, R/rgeos_wkt.R, inst/tests/test-translate.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_geos2R.c, src/rgeos_sp.c, tests/test-all.R: Added rgeos_convert_R2geos - generic function to translate R sp objects to geos geometries Moved rgeos_Polygons_i_2Polygon to rgeos_R2geos.c Added rgeos_double_translate which translates R->geos->R for testing purposes Added test-translate.R with unit tests for translations - currently tests Points, Lines, and Rings readWKT fix - if the result is only one object return it and not a list of objects 2010-05-21 00:59 crundel * [r73] src/rgeos_coord.c: Broke the geospoint2crdMat in the last commit, fixes POINT and MULTIPOINT cases 2010-05-20 22:46 crundel * [r72] src/rgeos_coord.c, src/rgeos_geos2R.c: Cleaned up / clarified point and line handling code 2010-05-20 21:25 crundel * [r71] src/rgeos_geos2R.c: Added handling of geometry collections of Lines and Multilines and Linear Rings 2010-05-20 20:40 rsbivand * [r70] src/rgeos_sp.c: temp FIXME in Line Intersection 2010-05-19 04:37 crundel * [r69] src/init.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_sp.c: Updated handling conversion of geos points to R to handle geometry collections of points and multipoints 2010-05-17 21:51 crundel * [r68] src/rgeos_geos2R.c: Fix to rgeos_multiline2SpatialLines, SpatialLines class was being built incorrectly, Lines class is now added to a list before being attached 2010-05-17 02:33 crundel * [r67] R/rgeos_util.R, R/rgeos_wkt.R, src/init.c, src/rgeos.h, src/rgeos_bbox.c, src/rgeos_geos2R.c, src/rgeos_wkt.c: Added rgeos_multiline2SpatialLines function to covert LINESTRING and MULTILINESTRING to SpatialLines Added rgeos_convert_geos2R function which is geometry type agnostic and calls other conversion functions based on geometry type Fixed rgeos_crdMat2bbox function to make updates to an existing bbox, added rgeos_initbbox and rgeos_formatbbox helper functions Added checkP4S for basic proj4string checking and initialization, should now be handled in R and an initialized CRS class passed to conversion functions Other small code cleanups 2010-05-15 05:41 crundel * [r66] src/init.c, src/rgeos_R2geos.c: More merge fixes 2010-05-15 05:39 crundel * [r65] src/rgeos.h: Broke rgeos.h somehow while merging. 2010-05-15 05:28 crundel * [r64] ., NAMESPACE, R, R/AAA.R, R/rgeos_wkt.R, inst/tests, inst/tests/test-jts-xml.R, inst/tests/testxml, inst/tests/testxml/general, inst/tests/testxml/general/TestBoundary.xml, inst/tests/testxml/general/TestCentroid.xml, inst/tests/testxml/general/TestConvexHull-big.xml, inst/tests/testxml/general/TestConvexHull.xml, inst/tests/testxml/general/TestFunctionAA.xml, inst/tests/testxml/general/TestFunctionAAPrec.xml, inst/tests/testxml/general/TestFunctionLA.xml, inst/tests/testxml/general/TestFunctionLAPrec.xml, inst/tests/testxml/general/TestFunctionLL.xml, inst/tests/testxml/general/TestFunctionLLPrec.xml, inst/tests/testxml/general/TestFunctionPA.xml, inst/tests/testxml/general/TestFunctionPL.xml, inst/tests/testxml/general/TestFunctionPLPrec.xml, inst/tests/testxml/general/TestFunctionPP.xml, inst/tests/testxml/general/TestInteriorPoint.xml, inst/tests/testxml/general/TestRectanglePredicate.xml, inst/tests/testxml/general/TestRelateAA.xml, inst/tests/testxml/general/TestRelateAC.xml, inst/tests/testxml/general/TestRelateLA.xml, inst/tests/testxml/general/TestRelateLC.xml, inst/tests/testxml/general/TestRelateLL.xml, inst/tests/testxml/general/TestRelatePA.xml, inst/tests/testxml/general/TestRelatePL.xml, inst/tests/testxml/general/TestRelatePP.xml, inst/tests/testxml/general/TestSimple.xml, inst/tests/testxml/general/TestValid.xml, inst/tests/testxml/general/TestValid2-big.xml, inst/tests/testxml/general/TestValid2.xml, inst/tests/testxml/general/TestWithinDistance.xml, inst/tests/testxml/robust, inst/tests/testxml/robust/ExternalRobustness.xml, inst/tests/testxml/robust/TestRobustOverlayFixed.xml, inst/tests/testxml/robust/TestRobustOverlayFloat.xml, inst/tests/testxml/robust/TestRobustRelate.xml, inst/tests/testxml/validate, inst/tests/testxml/validate/TestRelateAA-big.xml, inst/tests/testxml/validate/TestRelateAA.xml, inst/tests/testxml/validate/TestRelateAC.xml, inst/tests/testxml/validate/TestRelateLA.xml, inst/tests/testxml/validate/TestRelateLC.xml, inst/tests/testxml/validate/TestRelateLL.xml, inst/tests/testxml/validate/TestRelatePA.xml, inst/tests/testxml/validate/TestRelatePL.xml, inst/tests/testxml/validate/TestRelatePP.xml, inst/tests/testxml/vivid, src, src/gpc_geos.c, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_bbox.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_length.c, src/rgeos_sp.c, src/rgeos_wkt.c, tests, tests/.Rhistory, tests/test-all.R: Fixed issue where CoordSeq were not being destroyed Added some initial work on UnitTests using testthat package, testxml folder contains xml test files from JTS General cleaning and reorganization of C code. Added functions to convert point and multipoint geos geometries Added readWKT functions that are geometry agnostic 2010-05-13 20:10 crundel * [r63] R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_relation.R: Created new files with basic rgeos functions organized by task, each file contains empty function definitions. 2010-05-06 16:19 rsbivand * [r62] ChangeLog, inst/ChangeLog: use points not polygons for b-box intersection envelope in poly2nb 2010-05-06 16:19 rsbivand * [r61] R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_poly2nb.c: use points not polygons for b-box intersection envelope in poly2nb 2010-05-05 08:42 rsbivand * [r60] ChangeLog, inst/ChangeLog: bounding box intersections 2010-05-05 08:41 rsbivand * [r59] NAMESPACE, R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_poly2nb.c: bounding box intersections 2010-05-03 17:19 rsbivand * [r58] DESCRIPTION: increment DESCRIPTION version # 2010-05-03 16:35 rsbivand * [r57] DESCRIPTION, R/AAA.R, R/rgeos.R: increment DESCRIPTION version # 2010-05-03 14:04 rsbivand * [r56] src/rgeos.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_validate.c, src/rgeos_wkt.c: removing inline declaration in rgeos.h - see comment 2010-05-03 13:33 rsbivand * [r55] src/Makevars: removing pkg/src/Makevars - auto-generated from Makevars.in 2010-05-03 05:24 crundel * [r54] NAMESPACE, R/AAA.R, R/rgeos.R, R/rgeos_util.R, R/rgeos_wkt.R, src/Makevars, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_area.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_sp.c, src/rgeos_validate.c, src/rgeos_wkt.c: Tidying existing functions, roughly grouped into files by task. Added functions for WKT output. Fixed precision issue leading to small polygons not being joined. Added functionality to get, set, and use a scale variable that determines min precision with appropriate rounding functions from GEOS. 2010-04-29 14:35 rsbivand * [r53] R/rgeos.R, man/LinesIntersections.Rd: fix poly2nb framework (non-operational) 2010-04-28 08:44 rsbivand * [r52] R/AAA.R, R/rgeos.R, R/rgeos_simplify.R, R/rgeos_union.R, src/gpc_geos.c, src/rgeos.c, src/rgeos.h, src/rgeos_distance.c, src/rgeos_length.c, src/rgeos_sp.c: tidy 2010-04-26 08:32 rsbivand * [r51] R/rgeos.R: starting poly2nb 2010-02-12 12:27 rsbivand * [r50] DESCRIPTION, NAMESPACE, R/AAA.R, R/Rgpc_funcs.R, R/gpc_geos.R, R/rgeos.R, R/rgeos_simplify.R, R/rgeos_union.R, data, data/poly_ex.rda, man/checkHolesGPC.Rd, man/gpc.poly-class.Rd, man/new-generics.Rd, man/unionSpatialPolygonsGEOS.Rd, src/gpc_geos.c, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_contains.c, src/rgeos_distance.c, src/rgeos_length.c, src/rgeos_sp.c: adding gpc.poly <-> GEOS interface 2010-02-08 14:55 rsbivand * [r49] configure.win, src/Makevars.win: Windows DLL to static 2010-02-01 18:01 rsbivand * [r48] R/Rgpc_funcs.R: Rgpc functions 2010-02-01 12:21 rsbivand * [r47] configure.win: Win binaries to 320 2010-01-31 19:22 rsbivand * [r46] ChangeLog, inst/ChangeLog: union buffer scale problem 2010-01-31 19:21 rsbivand * [r45] man/checkHolesGPC.Rd: union buffer scale problem 2010-01-31 19:19 rsbivand * [r44] R/gpc_geos.R, R/rgeos.R, R/rgeos_union.R, man/checkPolygonsGEOS.Rd, man/unionSpatialPolygonsGEOS.Rd, src/gpc_geos.c, src/init.c, src/rgeos.h, src/rgeos_sp.c: union buffer scale problem 2010-01-27 10:53 rsbivand * [r43] R/gpc_geos.R, src/gpc_geos.c: refactoring for gpcpoly objects 2010-01-27 10:20 rsbivand * [r42] DESCRIPTION, NAMESPACE, R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_sp.c: refactoring for gpcpoly objects 2010-01-14 07:41 rsbivand * [r41] ChangeLog, inst/ChangeLog: declaration for Windows binary 2010-01-14 07:41 rsbivand * [r40] inst/README.windows: declaration for Windows binary 2010-01-13 19:37 rsbivand * [r39] ChangeLog, inst/ChangeLog: rgeos_finish declaration in init.c 2010-01-13 19:37 rsbivand * [r38] src/init.c: rgeos_finish declaration in init.c 2010-01-10 19:01 rsbivand * [r37] ChangeLog, inst/ChangeLog: hole verification fix 2010-01-10 19:00 rsbivand * [r36] DESCRIPTION, R/rgeos.R, man/checkPolygonsGEOS.Rd: hole verification fix 2010-01-07 18:50 rsbivand * [r35] ChangeLog, inst/ChangeLog: union dim fix 2010-01-07 18:49 rsbivand * [r34] ChangeLog, inst/ChangeLog: union dim fix 2010-01-07 18:49 rsbivand * [r33] R/rgeos_union.R: union dim fix 2010-01-07 18:14 rsbivand * [r32] ChangeLog, inst/ChangeLog: missing man file 2010-01-07 18:11 rsbivand * [r31] man/LinesIntersections.Rd: missing man file 2010-01-07 12:08 rsbivand * [r30] DESCRIPTION, NAMESPACE, R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_sp.c: maptools integration 2010-01-04 09:35 rsbivand * [r29] configure.win: prepare for Windows binary 2010-01-04 07:48 rsbivand * [r28] configure.win: preparing for Windows build 2010-01-04 07:21 rsbivand * [r27] configure.win, src/Makevars.win, src/init.c, src/rgeos.h, src/rgeos_sp.c: preparing for Windows build 2010-01-03 16:41 rsbivand * [r26] src/init.c: tightening sp dependence 2010-01-03 16:36 rsbivand * [r25] DESCRIPTION, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_sp.c, src/sp_rgeos.c: tightening sp dependence 2009-12-17 18:46 rsbivand * [r24] ChangeLog, inst/ChangeLog: C API tidy 2009-12-17 18:44 rsbivand * [r23] src/init.c, src/local_stubs.c: C API tidy 2009-12-17 18:42 rsbivand * [r22] DESCRIPTION, R/AAA.R, src/rgeos.h, src/rgeos_sp.c: C API tidy 2009-12-04 09:11 rsbivand * [r21] ChangeLog, inst/ChangeLog: small fixes from sp transition 2009-12-04 09:10 rsbivand * [r20] DESCRIPTION: small fixes from sp transition 2009-12-04 09:08 rsbivand * [r19] src/rgeos_sp.c: small fixes from sp transition 2009-12-03 08:50 rsbivand * [r18] svn2cl.xsl: first release 2009-12-03 08:47 rsbivand * [r17] ChangeLog, inst/ChangeLog: first release 2009-12-03 08:47 rsbivand * [r16] src/sp_rgeos.c: first release 2009-12-03 08:42 rsbivand * [r15] ChangeLog, inst, inst/ChangeLog: first release 2009-12-03 08:39 rsbivand * [r14] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_simplify.R, R/rgeos_union.R, configure, configure.in, man, man/checkPolygonsGEOS.Rd, man/thinnedSpatialPolyGEOS.Rd, man/unionSpatialPolygonsGEOS.Rd, src/Makevars.in, src/rgeos_length.c: first release 2009-12-02 21:03 rsbivand * [r13] R/rgeos.R, src/rgeos.h, src/rgeos_sp.c: status 2009-11-30 15:55 rsbivand * [r12] src/rgeos.h, src/rgeos_sp.c: simplify in and out 2009-11-29 20:52 rsbivand * [r11] src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: simplify in and out 2009-11-28 20:34 rsbivand * [r10] src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: simplify in and out 2009-11-25 20:52 rsbivand * [r9] src/rgeos.h, src/rgeos_sp.c: parse comment in C 2009-11-25 17:43 rsbivand * [r8] R/rgeos.R, src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: parse comment in C 2009-11-24 20:53 rsbivand * [r7] R/rgeos.R, src/rgeos.h, src/rgeos_sp.c: contains 2009-11-21 14:52 rsbivand * [r6] R/rgeos.R, src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: after Oslo 2009-11-15 13:56 rsbivand * [r5] src/rgeos_sp.c: graphs and relations 2009-11-15 11:08 rsbivand * [r4] R/rgeos.R, src/rgeos.h, src/rgeos_sp.c: graphs and relations 2009-11-14 12:22 rsbivand * [r2] R, src, src/rgeos.c, src/rgeos.h, src/rgeos_contains.c, src/rgeos_distance.c, src/rgeos_length.c, src/rgeos_sp.c: initial C files 2009-05-28 12:17 stefan7th * [r1] .: R-Forge: updated repository structure rgeos/man/0000755000176200001440000000000014455462114012152 5ustar liggesusersrgeos/man/topo-bin-gUnion.Rd0000644000176200001440000000664214345704612015435 0ustar liggesusers\name{gUnion} \alias{gUnaryUnion} \alias{gUnionCascaded} \alias{RGEOSUnionCascaded} \alias{gLineMerge} \alias{RGEOSLineMerge} \title{Geometry Union} \description{Functions for joining intersecting geometries.} \usage{ gUnionCascaded(spgeom, id = NULL) gUnaryUnion(spgeom, id = NULL, checkValidity=NULL) gLineMerge(spgeom, byid=FALSE, id = NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels; it may contain NA values for input objects not included in the union; it should define the memberships of the output Polygons objects} \item{spgeom}{sp Polygon(s) or Line(s) depending on the function used} \item{checkValidity}{default NULL, integer 0L (no action), 1L (check), 2L (check and try to buffer by zero distance to repair). If NULL, a value set to 0L for GEOS < 3.7.2, 1L for GEOS >= 3.7.2 is read from values assigned on load. Error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is > 0L, \code{gIsValid} is run on each in turn} } \details{gUnionCascaded expects a single sp object of class SpatialPolygons with subgeometries which it unions together. gUnionCascaded can only dissolve MultiPolygon objects, so GeometryCollection objects to be dissolved, here a SpatialPolygons object, must be flattened a Polygons object; if GEOS version 3.3.0 is available, use gUnaryUnion. gUnaryUnion expects a single sp object of class SpatialPolygons with subgeometries which it unions together; introduced in GEOS version 3.3.0, and handles GeometryCollection objects. If the id argument is used, it should be a character vector defining the memberships of the output Polygons objects, equal in length to the length of the polygons slot of spgeom. gLineMerge is similar to gUnionCascaded but is written to work with lines, specifically it joins line segments with intersecting end points. } \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gDifference}} \code{\link{gIntersection}} \code{\link{gSymdifference}} } \examples{ if (require(maptools)) { nc1 <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], proj4string=CRS("+proj=longlat +datum=NAD27")) lps <- coordinates(nc1) ID <- cut(lps[,1], quantile(lps[,1]), include.lowest=TRUE) if (version_GEOS0() < "3.3.0") { reg4 <- gUnionCascaded(nc1, ID) } else { reg4 <- gUnaryUnion(nc1, ID) } row.names(reg4) par(mfrow=c(2,1)) plot(nc1) plot(reg4) par(mfrow=c(1,1)) } gt <- GridTopology(c(0.05,0.05), c(0.1,0.1), c(2,2)) set.seed(1) xv <- rnorm(length(coordinates(gt)[,1])) xvs <- ifelse(xv > 0.2,1,0) grd <- SpatialGridDataFrame(gt, data.frame(xvs)) spix <- as(grd, "SpatialPixelsDataFrame") spol <- as(spix, "SpatialPolygonsDataFrame") image(grd, axes=TRUE) if (version_GEOS0() < "3.3.0") { spol1 <- gUnionCascaded(spol, as.character(spol$xvs)) } else { spol1 <- gUnaryUnion(spol, as.character(spol$xvs)) } plot(spol1, add=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/misc-gNearestPoints.Rd0000644000176200001440000000147414025150745016342 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/rgeos_misc.R \name{gNearestPoints} \alias{gNearestPoints} \title{Closest Points of two Geometries} \usage{ gNearestPoints(spgeom1, spgeom2) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp.} } \value{ The closest points of the two geometries or NULL on exception. The first point comes from spgeom1 geometry and the second point comes from spgeom2. } \description{ Return closest points of two geometries. } \examples{ g1 <- readWKT("MULTILINESTRING((34 54, 60 34), (0 10, 50 10, 100 50))") g2 <- readWKT("MULTIPOINT(30 0, 100 30)") plot(g1, pch=4, axes=TRUE) plot(g2, add=TRUE) plot(gNearestPoints(g1, g2), add=TRUE, col="red", pch=7) gDistance(g1, g2) } \seealso{ gDistance } \author{ Rainer Stuetz } \keyword{spatial} rgeos/man/misc-over.Rd0000644000176200001440000000240214025150745014340 0ustar liggesusers\name{over} \alias{overGeomGeom} \alias{overGeomGeomDF} \title{Find spatial join or intersections} \description{Find spatial join or intersections} \usage{ overGeomGeom(x, y, returnList = FALSE, fn = NULL, ..., minDimension = -1) overGeomGeomDF(x, y, returnList = FALSE, fn = NULL, ..., minDimension = -1) } \arguments{ \item{x}{see \link[sp]{over}} \item{y}{see \link[sp]{over}} \item{returnList}{see \link[sp]{over}} \item{fn}{see \link[sp]{over}} \item{...}{see \link[sp]{over}} \item{minDimension}{integer; if \code{-1}, \link{gIntersects} is used to find geometry intersections; if \code{0}, \code{1} or \code{2}, \link{gRelate} is used. if \link{gRelate} is used, intersecting geometries are ordered by the dimension of the intersection (2: area overlap; 1: line in common; 0: point in common), and \code{minDimension} determines the mininum dimension of intersection required. } } \value{see \link[sp]{over}} \note{\link{gRelate} (\code{minDimension} > -1) is likely to be substantially slower than \link{gIntersects}.} \author{Edzer Pebesma} \examples{ p1 = readWKT("POLYGON((0 1,0.95 0.31,0.59 -0.81,-0.59 -0.81,-0.95 0.31,0 1))") p2 = readWKT("POLYGON((2 2,-2 2,-2 -2,2 -2,2 2),(1 1,-1 1,-1 -1,1 -1,1 1))") overGeomGeom(p1,p2) } \keyword{spatial} rgeos/man/linref-gProject.Rd0000644000176200001440000000172614025150745015476 0ustar liggesusers\name{gProject} \alias{gProject} \title{Project Points to Line Geometry} \usage{ gProject(spgeom, sppoint, normalized = FALSE) } \arguments{ \item{spgeom}{SpatialLines or SpatialLinesDataFrame object} \item{sppoint}{SpatialPoints or SpatialPointsDataFrame object} \item{normalized}{Logical determining if normalized distances should be used} } \value{ a numeric vector containing the distances along the line to points nearest to the specified points } \description{ Return distances along geometry to points nearest the specified points. } \details{ If \code{normalized=TRUE}, distances normalized to the length of the geometry are returned, i.e., values between 0 and 1. } \examples{ l <- readWKT("LINESTRING(0 1, 3 4, 5 6)") p1 <- readWKT("MULTIPOINT(3 2, 3 5)") frac <- gProject(l, p1) p2 <- gInterpolate(l, frac) plot(l, axes=TRUE) plot(p1, col = "blue", add = TRUE) plot(p2, col = "red", add = TRUE) } \seealso{ gInterpolate } \author{ Rainer Stuetz } \keyword{spatial} rgeos/man/pred-unary-gIsSimple.Rd0000644000176200001440000000514014025150745016416 0ustar liggesusers\name{gIsSimple} \alias{gIsSimple} \alias{RGEOSisSimple} \title{Is Geometry Simple?} \description{Function tests if the given geometry is simple} \usage{ gIsSimple(spgeom, byid = FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} } \value{Returns TRUE if the given geometry does not contain anomalous points, such as self intersection or self tangency.} \details{Simplicity is used in reference to 0 and 1-dimensional geometries ([MULTI]POINT and [MULTI]LINESTRING) whereas Validity (\code{\link{gIsValid}}) is used in reference to 2-dimensional geometries ([MULTI]POLYGON). A POINT is always simple. A MULTIPOINT is simple if no two points are identical. A LINESTRING is simple if it does not pass through the same point twice (self intersection) except at the end points, in which case it is a ring (\code{\link{gIsRing}}). A MULTILINESTRING is simple if all of its subgeometries are simple and none of the subgeometries intersect except at end points. A [MULTI]POLYGON is simple by definition. Many of the functions in rgeos expect simple/valid geometries and may exhibit unpredictable behavior if given an invalid geometry. Checking of validity/simplicity can be computationally expensive for complex geometries and so is not done by default, any new geometries should be checked. } \references{ Validity Details: \url{http://postgis.net/docs/manual-2.0/using_postgis_dbmanagement.html#OGC_Validity} } \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gIsEmpty}} \code{\link{gIsRing}} \code{\link{gIsValid}} } \examples{ # MULTIPOINT examples gIsSimple(readWKT("MULTIPOINT(1 1,2 2,3 3)")) gIsSimple(readWKT("MULTIPOINT(1 1,2 2,1 1)")) # LINESTRING examples l1 = readWKT("LINESTRING(0 5,3 4,2 3,5 2)") l2 = readWKT("LINESTRING(0 5,4 2,5 4,0 1)") l3 = readWKT("LINESTRING(3 5,0 4,0 2,2 0,5 1,4 4,4 5,3 5)") l4 = readWKT("LINESTRING(3 5,0 4,4 3,5 2,3 0,1 2,4 5,3 5)") par(mfrow=c(2,2)) plot(l1);title(paste("Simple:",gIsSimple(l1))) plot(l2);title(paste("Simple:",gIsSimple(l2))) plot(l3);title(paste("Simple:",gIsSimple(l3))) plot(l4);title(paste("Simple:",gIsSimple(l4))) # MULTILINESTRING examples ml1 = readWKT("MULTILINESTRING((0 5,1 2,5 0),(3 5,5 4,4 1))") ml2 = readWKT("MULTILINESTRING((0 5,1 2,5 0),(0 5,5 4,4 1))") ml3 = readWKT("MULTILINESTRING((0 5,1 2,5 0),(3 5,5 4,2 0))") par(mfrow=c(1,3)) plot(ml1);title(paste("Simple:",gIsSimple(ml1))) plot(ml2);title(paste("Simple:",gIsSimple(ml2))) plot(ml3);title(paste("Simple:",gIsSimple(ml3))) } \keyword{spatial} rgeos/man/labelpt.Rd0000644000176200001440000002055414025150745014067 0ustar liggesusers\encoding{UTF-8} \name{polygonsLabel} \alias{polygonsLabel} \title{Compute optimal label positions for polygons} \description{Compute optimal positions for placing labels inside polygons, and optionally plot the labels. Various algorithms for finding the ‘optimal’ label positions are supported.} \usage{ polygonsLabel(pols, labels = NULL, method = c("maxdist", "buffer", "centroid", "random", "inpolygon")[1], gridpoints = 60, polypart = c("all", "largest")[1], cex = 1, doPlot = TRUE, ...) } \arguments{ \item{pols}{ Object of class, or deriving from, \code{SpatialPolygons}.} \item{labels}{ Character vector of labels. Will be recycled to have the same number of elements as the number of polygons in \code{pols}. If \code{labels} is \code{NULL} or empty, the label box is taken as a square with sides equal to the current line height (see the \code{cex} argument).} \item{method}{ The method(s) to use when finding label positions. Will be recycled. Valid methods are \code{maxdist} (currently the default), \code{buffer}, \code{centroid}, \code{random} and \code{inpolygon}.} \item{gridpoints}{ Number of grid points to use for the initial grid search in the \code{maxdist} method.} \item{polypart}{ Should \code{all} (default) or only the \code{largest} polygon part of each polygon in \code{pols} be used for the calculations? Will be recycled. Setting this to \code{largest} is very useful when labelling detailed coastlines of a country, consisting of a large polygon (where the label should be placed) and very many tiny islands, as it will greatly speed up the search for an optimal label position. But do note that this also removes any holes (e.g., lakes) before calculating the label position, so the labels are no longer guaranteed not to overlap a hole.} \item{cex}{ Magnification factor for text labels. Is used both when plotting the labels and when calculating the label positions.} \item{doPlot}{ Plot the labels on the current graphics device. Calls the \code{text} function internally.} \item{...}{ Further arguments to be passed to \code{text} (e.g., \code{col}).} } \details{There are no perfect definitions of ‘optimal’ label positions, but any such position should at least satisfy a few requirements: The label should be positioned wholly inside the polygon. It should also be far from any polygon edges. And, though more difficult to quantify, it should be positioned in the visual centre (or bulk) of the polygon. The algorithms implemented here seems to generally do a very good job of finding optimal (or at least ‘good’) label positions. The \code{maxdist} method is currently the default, and tries to find the label position with a maximal distance from the polygon edges. More precisely, it finds a position where the minimal distance of any point on the (rectangular) label box to the polygon boundary is maximised. It does this by first trying a grid search, using \code{gridpoints} regular grid points on the polygon, and then doing local optimisation on the best grid point. The default grid is quite coarse, but usually gives good results in a short amount of time. But for very complicated (and narrow) polygons, it may help increasing \code{gridpoints}. Note that while this method gives good results for most natural polygons, e.g., country outlines, the theoretical optimal position is not necessarily unique, and this is sometimes seen when applying the method to regular polygons, like rectangles (see example below), where the resulting position may differ much from what one would judge to be the visual centre of the polygon. The \code{buffer} method works by shrinking the polygon (using negative buffering) until the convex hull of the shrunken polygon can fit wholly inside the original polygon. The label position is then taken as the centroid of the shrunken polygon. This method usually gives excellent results, is surprisingly fast, and seems to capture the ‘visual centre’ idea of an optimal label position well. However, it does not guarantee that the label can fit wholly inside the polygon. (However, if it does not fit, there are usually no other better position either.) The \code{centroid} method simply returns the centroid of each polygon. Note that although this is the geometrical/mathematical centre of the polygon, it may actually be positioned outside the polygon. For regular polygons (rectangles, hexagons), it gives perfect results. Internally, this method uses the \code{coordinates} function. There are three reasons this method is supported: To make it easy to find the centroid of the largest polygon part of a polygon (using the \code{polypart} argument), to make it easy to use the centroid algorithm along with other algorithms (using the vector nature of the \code{method} argument), and for completeness. The \code{random} method returns a random position guaranteed to be inside the polygon. This will rarely be an optimal label position! The \code{inpolygon} method finds an arbitrary position in the polygon. This position is usually quite similar to the centroid, but is guaranteed the be inside the polygon. Internally, the method uses the \code{gPointOnSurface} function. } \note{ Note that both the \code{labels}, \code{method} and \code{polypart} arguments are vectors, so it’s possible to use different options for each polygon in the \code{pols} object. } \value{ A two-colum matrix is returned, with each row containing the horizontal and vertical coordinates for the corresponding polygon. If \code{doPlot} is \code{TRUE} (the default), the labels are also plotted on the current graphics device, with the given value of \code{cex} (font size scaling).} \author{Karl Ove Hufthammer, \email{karl@huftis.org}.} \seealso{\code{\link[maptools]{pointLabel}}} \references{The \code{buffer} method was inspired by (but is slightly different from) the algorithm described in the paper \cite{Using Shape Analyses for Placement of Polygon Labels} by Hoseok Kang and Shoreh Elhami, available at \url{https://www.esri.com/training/} .} \examples{ # Simple example with a single polygon x = c(0, 1.8, 1.8, 1, 1, 3, 3, 2.2, 2.2, 4, 4, 6, 6, 14, 14, 6, 6, 4, 4, 0, 0) y = c(0, 0, -2, -2, -10, -10, -2, -2, 0, 0, 1.8, 1.8, 1, 1, 3, 3, 2.2, 2.2, 4, 4, 0) xy = data.frame(x,y) library(sp) xy.sp = SpatialPolygons(list(Polygons(list(Polygon(xy)), ID = "test"))) plot(xy.sp, col = "khaki") polygonsLabel(xy.sp, "Hi!") # Example with multiple polygons, text labels and colours x1 = c(0, 4, 4, 0, 0) y1 = c(0, 0, 4, 4, 0) x2 = c(1, 1, 3, 3, 1) y2 = c(-2, -10, -10, -2, -2) x3 = c(6, 14, 14, 6, 6) y3 = c(1, 1, 3, 3, 1) xy.sp = SpatialPolygons(list( Polygons(list(Polygon(cbind(x1,y1))), ID = "test1"), # box Polygons(list(Polygon(cbind(x3,y3))), ID = "test3"), # wide Polygons(list(Polygon(cbind(x2,y2))), ID = "test2") # high )) plot(xy.sp, col=terrain.colors(3)) labels=c("Hi!", "A very long text string", "N\na\nr\nr\no\nw") # Note that the label for the tall and narrow box is # not necessarily centred vertically in the box. # The reason is that method="maxdist" minimises the # maximum distance from the label box to the surrounding # polygon, and this distance is not changed by moving # the label vertically, as long the vertical distance # to the polygon boundary is less than the horizontal # distance. For regular polygons like this, the other # label positions (e.g., method="buffer") work better. polygonsLabel(xy.sp, labels, cex=.8, col = c('white', 'black', 'maroon')) \dontrun{ ## Example showing how bad the centroid ## position can be on real maps. # Needed libraries if (require(maps) && require(maptools) && require(rgdal)) { # Load map data and convert to spatial object nmap = map("world", c("Norway", "Sweden", "Finland"), exact = TRUE, fill = TRUE, col = "transparent", plot = FALSE) nmap.pol = map2SpatialPolygons(nmap, IDs = nmap$names, proj4string = CRS("+init=epsg:4326")) nmap.pol = spTransform(nmap.pol, CRS("+init=epsg:3035")) # Plot map, centroid positions (red dots) and optimal # label positions using the ‘buffer’ method. plot(nmap.pol, col = "khaki") nmap.centroids = polygonsLabel(nmap.pol, names(nmap.pol), method = "centroid", doPlot = FALSE) points(nmap.centroids, col = "red", pch=19) polygonsLabel(nmap.pol, names(nmap.pol), method = "buffer", cex=.8) } } } \keyword{spatial} rgeos/man/topo-unary-gCoverageUnion.Rd0000644000176200001440000000235414025150745017470 0ustar liggesusers\name{gCoverageUnion} \alias{gCoverageUnion} \title{Coverage Union} \description{GEOSCoverageUnion is an optimized union algorithm for polygonal inputs that are correctly noded and do not overlap. It will not generate an error (return NULL) for inputs that do not satisfy this constraint.} \usage{ gCoverageUnion(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \author{Roger Bivand} \seealso{ \code{\link{gUnaryUnion}} } \examples{ run <- FALSE if (require(maptools)) run <- TRUE if (run) { nc1 <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], proj4string=CRS("+proj=longlat +datum=NAD27")) } if (run) { print(system.time(oU <- gUnionCascaded(nc1))) if (version_GEOS0() >= "3.8.0") { print(system.time(oCU <- gCoverageUnion(nc1))) } } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/bbox2SP.Rd0000644000176200001440000000252414025150745013720 0ustar liggesusers\name{bbox2SP} \alias{bbox2SP} \title{Converts a bounding box into a SpatialPolygons object.} \description{Converts a bounding box into a SpatialPolygons object.} \usage{bbox2SP(n,s,w,e,bbox=NA,proj4string=CRS("+init=epsg:4326"))} \arguments{ \item{n}{the top north latitude} \item{s}{the bottom south latitude} \item{w}{the most western longitude} \item{e}{the most eastern longitude} \item{bbox}{a bounding box 2 x 2 matrix as produced by \code{\link[sp]{bbox}}} \item{proj4string}{a coordinate reference system as defined in \code{\link[sp]{CRS}}} } \details{ This function converts a set of coordinates limiting a bounding box into a SpatialPolygons. It can be used for instance to clip a subset of a larger spatial object (e.g. using \code{\link[rgeos]{gIntersection}}) } \value{ An object of \code{\link[sp]{SpatialPolygons}} class. } \examples{ library(sp) run <- FALSE if (require(rgdal, quietly=TRUE)) run <- TRUE if (run) { cities <- readOGR(dsn=system.file("vectors", package = "rgdal")[1], layer="cities") n<-75 s<-30 w<--40 e<-32 myPoly<-bbox2SP(n,s,e,w) } if (run) { plot(cities) plot(myPoly,border="red",add=TRUE) } if (run) { bb<-bbox(cities) myPoly<-bbox2SP(bbox=bb,proj4string=CRS(proj4string(cities))) plot(myPoly,add=TRUE,border="blue") } } \keyword{utilities} rgeos/man/constructor-SpatialCollections.Rd0000644000176200001440000000214514025150745020617 0ustar liggesusers\name{SpatialCollections} \alias{SpatialCollections} \title{ create SpatialCollections} \description{ create object of class \code{SpatialCollections} } \usage{ SpatialCollections(points=NULL, lines=NULL, rings=NULL, polygons=NULL, plotOrder=c(4,3,2,1), proj4string=CRS(as.character(NA))) } \arguments{ \item{points}{ list with objects of class \link{SpatialPoints-class}} \item{lines}{ list with objects of class \link{SpatialLines-class}} \item{rings}{ list with objects of class \link{SpatialRings-class}} \item{polygons}{ list with objects of class \link{SpatialPolygons-class}} \item{plotOrder}{ numeric vector of length 4 that determines the order in which the geometries will be plotted. By default polygons will be plotted followed by rings, then lines and finally points.} \item{proj4string}{Object of class \code{"CRS"} holding a valid proj4 string} } \value{ \code{SpatialCollections} returns object of class \code{SpatialCollections} } \seealso{ \link{SpatialCollections-class} \link{SpatialPoints-class} \link{SpatialLines-class} \link{SpatialRings-class} \link{SpatialPolygons-class} } \keyword{manip} rgeos/man/misc-gLength.Rd0000644000176200001440000000165214025150745014763 0ustar liggesusers\name{gLength} \alias{gLength} \alias{RGEOSLength} \title{Length of Geometry} \description{Calculates the length of the given geometry.} \usage{ gLength(spgeom, byid=FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} } \value{Returns the length of the geometry in the units of the current projection. By definition [MULTI]POINTs have a length of 0. The length of POLYGONs is the sum of the length of their shell and their hole(s).} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gArea}} } \examples{ gLength(readWKT("POINT(1 1)")) gLength(readWKT("LINESTRING(0 0,1 1,2 2)")) gLength(readWKT("LINESTRING(0 0,1 1,2 0,3 1)")) gLength(readWKT("POLYGON((0 0,3 0,3 3,0 3,0 0))")) gLength(readWKT("POLYGON((0 0,3 0,3 3,0 3,0 0),(1 1,2 1,2 2,1 2,1 1))")) } \keyword{spatial} rgeos/man/pred-binary-gRelate.Rd0000644000176200001440000001161414455462113016240 0ustar liggesusers\name{gRelate} \alias{gRelate} \alias{RGEOSRelate} \title{Geometry Relationships - Intersection Matrix Pattern (DE-9IM)} \description{Determines the relationships between two geometries by comparing the intersection of Interior, Boundary and Exterior of both geometries to each other. The results are summarized by the Dimensionally Extended 9-Intersection Matrix or DE-9IM.} \usage{ gRelate(spgeom1, spgeom2 = NULL, pattern = NULL, byid = FALSE, checkValidity=FALSE) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{pattern}{Character string containing intersection matrix pattern to match against DE-9IM for given geometries. Wild card \code{*} or \code{*} characters allowed.} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} } \value{By default returns a 9 character string that represents the DE-9IM. If \code{pattern} returns TRUE if the pattern matches the DE-9IM.} \details{Each geometry is decomposed into an interior, a boundary, and an exterior region, all the resulting geometries are then tested by intersection against one another resulting in 9 total comparisons. These comparisons are summarized by the dimensions of the intersection region, as such intersection at point(s) is labeled \code{0}, at linestring(s) is labeled \code{1}, at polygons(s) is labeled \code{2}, and if they do not intersect labeled \code{F}. If a pattern is specified then limited matching with wildcards is possible, \code{*} matches any character whereas \code{T} matches any non-\code{F} character. See references for additional details. } \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \references{ Documentation of Intersection Matrix Patterns: \url{https://docs.geotools.org/stable/userguide/library/jts/dim9.html} } \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gContains}} \code{\link{gContainsProperly}} \code{\link{gCovers}} \code{\link{gCoveredBy}} \code{\link{gCrosses}} \code{\link{gDisjoint}} \code{\link{gEquals}} \code{\link{gEqualsExact}} \code{\link{gIntersects}} \code{\link{gOverlaps}} \code{\link{gTouches}} \code{\link{gWithin}} } \examples{ x = readWKT("POLYGON((1 0,0 1,1 2,2 1,1 0))") x.inter = x x.bound = gBoundary(x) y = readWKT("POLYGON((2 0,1 1,2 2,3 1,2 0))") y.inter = y y.bound = gBoundary(y) xy.inter = gIntersection(x,y) xy.inter.bound = gBoundary(xy.inter) xy.union = gUnion(x,y) bbox = gBuffer(gEnvelope(xy.union),width=0.5,joinStyle='mitre',mitreLimit=3) x.exter = gDifference(bbox,x) y.exter = gDifference(bbox,y) # geometry decomposition par(mfrow=c(2,3)) plot(bbox,border='grey');plot(x,col="black",add=TRUE);title("Interior",ylab = "Polygon X") plot(bbox,border='grey');plot(x.bound,col="black",add=TRUE);title("Boundary") plot(bbox,border='grey');plot(x.exter,col="black",pbg='white',add=TRUE);title("Exterior") plot(bbox,border='grey');plot(y,col="black",add=TRUE);title(ylab = "Polygon Y") plot(bbox,border='grey');plot(y.bound,col="black",add=TRUE) plot(bbox,border='grey');plot(y.exter,col="black",pbg='white',add=TRUE) defaultplot = function() { plot(bbox,border='grey') plot(x,add=TRUE,col='red1',border="red3") plot(y,add=TRUE,col='blue1',border="blue3") plot(xy.inter,add=TRUE,col='orange1',border="orange3") } # Dimensionally Extended 9-Intersection Matrix pat = gRelate(x,y) patchars = strsplit(pat,"")[[1]] par(mfrow=c(3,3)) defaultplot(); plot(gIntersection(x.inter,y.inter),add=TRUE,col='black') title(paste("dim:",patchars[1])) defaultplot(); plot(gIntersection(x.bound,y.inter),add=TRUE,col='black',lwd=2) title(paste("dim:",patchars[2])) defaultplot(); plot(gIntersection(x.exter,y.inter),add=TRUE,col='black') title(paste("dim:",patchars[3])) defaultplot(); plot(gIntersection(x.inter,y.bound),add=TRUE,col='black',lwd=2) title(paste("dim:",patchars[4])) defaultplot(); plot(gIntersection(x.bound,y.bound),add=TRUE,col='black',pch=16) title(paste("dim:",patchars[5])) defaultplot(); plot(gIntersection(x.exter,y.bound),add=TRUE,col='black',lwd=2) title(paste("dim:",patchars[6])) defaultplot(); plot(gIntersection(x.inter,y.exter),add=TRUE,col='black') title(paste("dim:",patchars[7])) defaultplot(); plot(gIntersection(x.bound,y.exter),add=TRUE,col='black',lwd=2) title(paste("dim:",patchars[8])) defaultplot(); plot(gIntersection(x.exter,y.exter),add=TRUE,col='black') title(paste("dim:",patchars[9])) } \keyword{spatial} rgeos/man/topo-unary-gPointOnSurface.Rd0000644000176200001440000000402014025150745017613 0ustar liggesusers\name{gPointOnSurface} \alias{gPointOnSurface} \alias{RGEOSPointOnSurface} \title{Point on Surface of Geometry} \description{Function returns a point on the surface of the given geometry} \usage{ gPointOnSurface(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \details{Returns a SpatialPoints object with a point that intersects with the geometry} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gBoundary}} \code{\link{gCentroid}} \code{\link{gConvexHull}} \code{\link{gEnvelope}} } \examples{ # Based on test geometries from JTS g1 = readWKT(paste("MULTIPOINT (60 300, 200 200, 240 240, 200 300, 40 140,", "80 240, 140 240, 100 160, 140 200, 60 200)")) g2 = readWKT("LINESTRING (0 0, 7 14)") g3 = readWKT("LINESTRING (0 0, 3 15, 6 2, 11 14, 16 5, 16 18, 2 22)") g4 = readWKT(paste("MULTILINESTRING ((60 240, 140 300, 180 200, 40 140, 100 100, 120 220),", "(240 80, 260 160, 200 240, 180 340, 280 340, 240 180, 180 140, 40 200, 140 260))")) g5 = readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))") g6 = readWKT(paste("MULTIPOLYGON (((50 260, 240 340, 260 100, 20 60, 90 140, 50 260),", "(200 280, 140 240, 180 160, 240 140, 200 280)),", "((380 280, 300 260, 340 100, 440 80, 380 280),", "(380 220, 340 200, 400 100, 380 220)))")) par(mfrow=c(2,3)) plot(g1); plot(gPointOnSurface(g1),col='red',add=TRUE) plot(g2); plot(gPointOnSurface(g2),col='red',add=TRUE) plot(g3); plot(gPointOnSurface(g3),col='red',add=TRUE) plot(g4); plot(gPointOnSurface(g4),col='red',add=TRUE) plot(g5); plot(gPointOnSurface(g5),col='red',add=TRUE) plot(g6); plot(gPointOnSurface(g6),col='red',add=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/experimental-functions.Rd0000644000176200001440000000443514431417057017152 0ustar liggesusers\name{RGEOS Experimental Functions} \alias{poly_findInBoxGEOS} \alias{gUnarySTRtreeQuery} \alias{gBinarySTRtreeQuery} \title{Experimental Functions} \description{Functions still under development using the GEOS STRtree structure to find intersecting object component envelopes (bounding boxes).} \usage{ gUnarySTRtreeQuery(obj) gBinarySTRtreeQuery(obj1, obj2) poly_findInBoxGEOS(spl, as_points=TRUE) } \arguments{ \item{obj, obj1, obj2}{Objects inheriting from either \code{SpatialPolygons} or \code{SpatialLines}, obj2 may also inherit from \code{SpatialPoints}} \item{spl}{Object that inherits from the \code{SpatialPolygons} class} \item{as_points}{Logical value indicating if the polygon should be treated as points} } \details{\code{gUnarySTRtreeQuery} and \code{poly_findInBoxGEOS} do the same thing, but \code{poly_findInBoxGEOS} uses the \code{as_points} argument to build the input envelopes from proper geometries. \code{gUnarySTRtreeQuery} and \code{gBinarySTRtreeQuery} build input envelopes by disregarding topology and reducing the coordinates to a multipoint representation. This permits the tree to be built and queried even when some geometries are invalid. \code{gUnarySTRtreeQuery} and \code{poly_findInBoxGEOS} return a list of length \code{(n-1)} of 1-based indices only for the \dQuote{greater than i} indices. \code{gBinarySTRtreeQuery} returns a list of the length of \code{obj2} with 1-based indices of \code{obj1}. } \author{Roger Bivand & Colin Rundel} \keyword{spatial} \examples{ if (require(maptools)) { xx <- readShapeSpatial(system.file("shapes/fylk-val-ll.shp", package="maptools")[1], proj4string=CRS("+proj=longlat +datum=WGS84")) a0 <- gUnarySTRtreeQuery(xx) a0 nc1 <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], proj4string=CRS("+proj=longlat +datum=NAD27")) a2 <- gUnarySTRtreeQuery(nc1) #a3 <- poly_findInBoxGEOS(nc1) #all.equal(a2, a3) a2 pl <- slot(nc1, "polygons")[[4]] a5 <- gUnarySTRtreeQuery(pl) a5 SG <- Sobj_SpatialGrid(nc1, n=400)$SG obj1 <- as(as(SG, "SpatialPixels"), "SpatialPolygons") a4 <- gBinarySTRtreeQuery(nc1, obj1) plot(nc1, col="orange", border="yellow") plot(obj1, angle=sapply(a4, is.null)*45, density=20, lwd=0.5, add=TRUE) set.seed(1) pts <- spsample(nc1, n=10, type="random") res <- gBinarySTRtreeQuery(nc1, pts) } } rgeos/man/class-gpc.poly.nohole.Rd0000644000176200001440000000256714025150745016571 0ustar liggesusers\name{gpc.poly.nohole-class} \docType{class} \alias{gpc.poly.nohole-class} \alias{coerce,numeric,gpc.poly.nohole-method} \alias{coerce,gpc.poly.nohole,SpatialPolygons-method} \alias{coerce,SpatialPolygons,gpc.poly.nohole-method} \title{Class "gpc.poly.nohole"} \description{ A class for representing polygons with multiple contours but without holes. } \section{Objects from the Class}{ Objects can be created by calls of the form \sQuote{new("gpc.poly.nohole", ...) or by calling \code{read.polyfile}}. } \section{Slots}{ \describe{ \item{pts}{Object of class \dQuote{list}. See the help for \dQuote{gpc.poly} for details.} } } \section{Extends}{ Class \dQuote{gpc.poly}, directly. } \section{Methods}{ \describe{ \item{coerce}{\code{signature(from = "numeric", to = "gpc.poly.nohole")}: ... } } } \author{Roger D. Peng} \note{ This class is identical to \dQuote{"gpc.poly"} and is needed because the file formats for polygons without holes is slightly different from the file format for polygons with holes. For a \dQuote{gpc.poly.nohole} object, the \verb{hole} flag for each contour is always \code{FALSE}. Also, \code{write.polyfile} will write the correct file format, depending on whether the object is of class \dQuote{gpc.poly} or \dQuote{gpc.poly.nohole}. } \seealso{ \code{\link{gpc.poly-class}} } \examples{ ## None } \keyword{classes} rgeos/man/pred-unary-gIsValid.Rd0000644000176200001440000001114414025150745016225 0ustar liggesusers\name{gIsValid} \alias{gIsValid} \alias{RGEOSisValid} \title{Is Geometry Valid?} \description{Function tests if the given geometry is valid} \usage{ gIsValid(spgeom, byid = FALSE, reason=FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{reason}{Logical determining if the function should return a character string describing why the geometry is invalid} } \value{By default will return TRUE if the given geometry is well formed, FALSE otherwise. If reason is set to TRUE then a character string is returned describing the geometry, "Valid Geometry" if it is valid or details of the specific issue. Any given geometry may have multiple issues that make it invalid, gIsValid will only return the first, once it has been corrected additionally checking is necessary to confirm that additional issues do not remain.} \details{Validity is used in reference to 2-dimensional geometries (LINEARRING and [MULTI]POLYGON) whereas Simplicity (\code{\link{gIsSimple}}) is used in reference to 0 and 1-dimensional geometries ([MULTI]POINT and [MULTI]LINESTRING). A LINEARRING is valid if it does not intersect itself. A POLYGON is valid if no two rings in the boundary (made up of an exterior ring and interior rings) cross. The boundary of a POLYGON may intersect at a POINT but only as a tangent (i.e. not on a line). A POLYGON may not have cut lines or spikes and the interior rings must be contained entirely within the exterior ring. A MULTIPOLYGON is valid if and only if all of its elements are valid and the interiors of no two elements intersect. The boundaries of any two elements may touch, but only at a finite number of POINTs. Many of the functions in rgeos expect simple/valid geometries and may exhibit unpredictable behavior if given an invalid geometry. Checking of validity/simplicity can be computationally expensive for complex geometries and so is not done by default, any new geometries should be checked. } \references{ Validity Details: \url{http://postgis.net/docs/manual-2.0/using_postgis_dbmanagement.html#OGC_Validity} } \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gIsEmpty}} \code{\link{gIsRing}} \code{\link{gIsSimple}} } \examples{ library(sp) #LINEARRING Example l = readWKT("LINEARRING(0 0, 100 100, 100 0, 0 100, 0 0)") plot(l);title(paste("Valid:",gIsValid(l),"\n",gIsValid(l,reason=TRUE))) #POLYGON and MULTIPOLYGON Examples p1 = readWKT("POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40))") p2 = readWKT("POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 60 20, 20 40))") p3 = readWKT(paste("POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120),", "(100 100, 100 20, 120 20, 120 100, 100 100),", "(20 100, 20 40, 100 40, 20 100))")) p4 = readWKT("POLYGON ((0 40, 0 0, 40 40, 40 0, 0 40))") p5 = readWKT("POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 0 0, 40 40, 40 0, 0 40))") p6 = readWKT("POLYGON ((0 60, 0 0, 60 0, 60 20, 100 20, 60 20, 60 60, 0 60))") p7 = readWKT(paste("POLYGON ((40 300, 40 20, 280 20, 280 300, 40 300),", "(120 240, 80 180, 160 220, 120 240),", "(220 240, 160 220, 220 160, 220 240),", "(160 100, 80 180, 100 80, 160 100),", "(160 100, 220 160, 240 100, 160 100))")) p8 = readWKT(paste("POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320),", "(100 120, 40 20, 180 100, 100 120),", "(200 200, 180 100, 240 160, 200 200),", "(260 260, 240 160, 300 200, 260 260),", "(300 300, 300 200, 340 320, 300 300))")) p9 = readWKT(paste("MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),", "(220 340, 180 240, 60 200, 200 180, 340 60, 240 220, 220 340)),", "((60 200, 340 60, 220 340, 60 200)))")) par(mfrow=c(3,3)) plot(p1,col='black',pbg='white');title(paste("Valid:",gIsValid(p1),"\n",gIsValid(p1,reason=TRUE))) plot(p2,col='black',pbg='white');title(paste("Valid:",gIsValid(p2),"\n",gIsValid(p2,reason=TRUE))) plot(p3,col='black',pbg='white');title(paste("Valid:",gIsValid(p3),"\n",gIsValid(p3,reason=TRUE))) plot(p4,col='black',pbg='white');title(paste("Valid:",gIsValid(p4),"\n",gIsValid(p4,reason=TRUE))) plot(p5,col='black',pbg='white');title(paste("Valid:",gIsValid(p5),"\n",gIsValid(p5,reason=TRUE))) plot(p6,col='black',pbg='white');title(paste("Valid:",gIsValid(p6),"\n",gIsValid(p6,reason=TRUE))) plot(p7,col='black',pbg='white');title(paste("Valid:",gIsValid(p7),"\n",gIsValid(p7,reason=TRUE))) plot(p8,col='black',pbg='white');title(paste("Valid:",gIsValid(p8),"\n",gIsValid(p8,reason=TRUE))) plot(p9,col='black',pbg='white') title(paste("Valid:",gIsValid(p9),"\n",gIsValid(p9,reason=TRUE))) } \keyword{spatial} rgeos/man/wkt-functions.Rd0000644000176200001440000000400314400073337015244 0ustar liggesusers\name{RGEOS WKT Functions} \alias{readWKT} \alias{writeWKT} \title{RGEOS WKT Functions} \description{Functions for reading and writing Well Known Text (WKT)} \usage{ readWKT(text, id = NULL, p4s = NULL) writeWKT(spgeom, byid = FALSE) } \arguments{ \item{text}{character string of WKT} \item{id}{character vector of unique ids to label geometries. Length must match the number of subgeometries in the WKT} \item{p4s}{Either a character string or an object of class \code{CRS}} \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} } \details{readWKT processes the given WKT string and returns an appropriate sp geometry object. If id is not specified then geometries will be labeled by their index position. Because no sp Spatial object may be empty, \code{readWKT} is not permitted to create an empty object. writeWKT converts an sp geometry object to a GEOS C object which is then written out as a WKT string. If byid is TRUE then each subgeometry is individually converted to a WKT string.} \references{Additional information on WKT Simple Feature Specification can be found at the following locations: \url{https://www.ogc.org/standard/sfs/} \url{https://en.wikipedia.org/wiki/Well-known_text} \url{https://en.wikipedia.org/wiki/Simple_Features} } \author{Colin Rundel} \examples{ g1=readWKT("POINT(6 10)") g2=readWKT("LINESTRING(3 4,10 50,20 25)") g3=readWKT("POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))") g4=readWKT("MULTIPOINT((3.5 5.6),(4.8 10.5))") g5=readWKT("MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))") g6=readWKT("MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3)))") try(readWKT("POINT EMPTY")) try(readWKT("MULTIPOLYGON EMPTY")) g9=readWKT("GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))") writeWKT(g1) writeWKT(g2) writeWKT(g3) writeWKT(g4) writeWKT(g5) writeWKT(g6) writeWKT(g9,byid=FALSE) writeWKT(g9,byid=TRUE) } \keyword{spatial} rgeos/man/misc-gDistance.Rd0000644000176200001440000000520614025150745015273 0ustar liggesusers\name{gDistance} \alias{gDistance} \alias{RGEOSDistance} \alias{gWithinDistance} \alias{RGEOSisWithinDistance} \alias{RGEOSHausdorffDistance} \title{Distance between geometries} \description{Calculates the distance between the given geometries} \usage{ gDistance(spgeom1, spgeom2=NULL, byid=FALSE, hausdorff=FALSE, densifyFrac = NULL) gWithinDistance(spgeom1, spgeom2=NULL, dist, byid=FALSE, hausdorff=FALSE, densifyFrac=NULL) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{hausdorff}{Logical determining if the discrete Hausdorff distance should be calculated} \item{densifyFrac}{Numerical value between 0 and 1 that determines the fraction by which to densify each segment of the geometry.} \item{dist}{Numerical value that determines cutoff distance} } \value{gDistance by default returns the cartesian minimum distance between the two geometries in the units of the current projection. If \code{hausdorff} is TRUE then the Hausdorff distance is returned for the two geometries. gWithinDistance returns TRUE if returned distance is less than or equal to the specified \code{dist}. } \details{ Discrete Hausdorff distance is essentially a measure of the similarity or dissimilarity of the two geometries, see references below for more detailed explanations / descriptions. If \code{hausdorff} is TRUE and \code{densifyFrac} is specified then the geometries' segments are densified by splitting each segment into equal length subsegments whose fraction of the total length is equal to \code{densifyFrac}. } \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gWithinDistance}} } \references{ Hausdorff Differences: \url{https://en.wikipedia.org/wiki/Hausdorff_distance} \url{http://lin-ear-th-inking.blogspot.com/2009/01/computing-geometric-similarity.html} } \examples{ pt1 = readWKT("POINT(0.5 0.5)") pt2 = readWKT("POINT(2 2)") p1 = readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))") p2 = readWKT("POLYGON((2 0,3 1,4 0,2 0))") gDistance(pt1,pt2) gDistance(p1,pt1) gDistance(p1,pt2) gDistance(p1,p2) p3 = readWKT("POLYGON((0 0,2 0,2 2,0 2,0 0))") p4 = readWKT("POLYGON((0 0,2 0,2 1.9,1.9 2,0 2,0 0))") p5 = readWKT("POLYGON((0 0,2 0,2 1.5,1.5 2,0 2,0 0))") p6 = readWKT("POLYGON((0 0,2 0,2 1,1 2,0 2,0 0))") p7 = readWKT("POLYGON((0 0,2 0,0 2,0 0))") gDistance(p3,hausdorff=TRUE) gDistance(p3,p4,hausdorff=TRUE) gDistance(p3,p5,hausdorff=TRUE) gDistance(p3,p6,hausdorff=TRUE) gDistance(p3,p7,hausdorff=TRUE) } \keyword{spatial} rgeos/man/topo-unary-gDelaunayTriangulation.Rd0000644000176200001440000000350614025150745021227 0ustar liggesusers\name{gDelaunayTriangulation} \alias{gDelaunayTriangulation} \title{Compute Delaunay triangulation between points} \description{Function to compute the Delaunay triangulation between points; only available for GEOS >= 3.4.0.} \usage{ gDelaunayTriangulation(spgeom, tolerance=0.0, onlyEdges=FALSE) } \arguments{ \item{spgeom}{sp points object as defined in package sp} \item{tolerance}{Numerical tolerance value to be used in triangulation} \item{onlyEdges}{Logical, default returns triangles as polygons, if TRUE, returns a SpatialLines object with a single MULTILINESTRING} } \value{Either a SpatialPolygons object or a SpatialLines object containing a single Lines object of the undirected edges in the triangulation.} \details{When onlyEdges is TRUE, the SpatialLines object may be de-merged to identify the input points that are touched by each edge, making it possible to identify spatial neighbours.} \author{Roger Bivand} \references{ \url{https://en.wikipedia.org/wiki/Delaunay_triangulation} } \examples{ if (version_GEOS0() > "3.4.0") { library(sp) data(meuse) coordinates(meuse) <- c("x", "y") plot(gDelaunayTriangulation(meuse)) points(meuse) out <- gDelaunayTriangulation(meuse, onlyEdges=TRUE) lns <- slot(slot(out, "lines")[[1]], "Lines") out1 <- SpatialLines(lapply(seq(along=lns), function(i) Lines(list(lns[[i]]), ID=as.character(i)))) out2 <- lapply(1:length(out1), function(i) which(gTouches(meuse, out1[i], byid=TRUE))) out3 <- do.call("rbind", out2) o <- order(out3[,1], out3[,2]) out4 <- out3[o,] out5 <- data.frame(from=out4[,1], to=out4[,2], weight=1) head(out5) \dontrun{ if (require(spdep)) { class(out5) <- c("spatial.neighbour", class(out5)) attr(out5, "n") <- length(meuse) attr(out5, "region.id") <- as.character(1:length(meuse)) nb1 <- sn2listw(out5)$neighbours nb2 <- make.sym.nb(nb1) } } } } \keyword{spatial} rgeos/man/class-gpc.poly.Rd0000644000176200001440000001343514025150745015302 0ustar liggesusers\name{gpc.poly-class} \docType{class} \alias{gpc.poly-class} \alias{[,gpc.poly,ANY,ANY-method} \alias{[,gpc.poly-method} \alias{append.poly,gpc.poly,gpc.poly-method} \alias{area.poly,gpc.poly-method} \alias{coerce,matrix,gpc.poly-method} \alias{coerce,data.frame,gpc.poly-method} \alias{coerce,gpc.poly,matrix-method} \alias{coerce,gpc.poly,numeric-method} \alias{coerce,gpc.poly,SpatialPolygons-method} \alias{coerce,SpatialPolygons,gpc.poly-method} \alias{coerce,numeric,gpc.poly-method} \alias{coerce,list,gpc.poly-method} \alias{get.bbox,gpc.poly-method} \alias{get.pts,gpc.poly-method} \alias{intersect,gpc.poly,gpc.poly-method} \alias{plot,gpc.poly-method} \alias{plot,gpc.poly,ANY-method} \alias{scale.poly,gpc.poly-method} \alias{setdiff,gpc.poly,gpc.poly-method} \alias{show,gpc.poly-method} \alias{symdiff,gpc.poly,gpc.poly-method} \alias{union,gpc.poly,gpc.poly-method} \alias{tristrip,gpc.poly-method} \alias{triangulate,gpc.poly-method} \title{Class "gpc.poly"} \description{ A class for representing polygons composed of multiple contours, some of which may be holes. } \section{Objects from the Class}{ Objects can be created by calls of the form \code{new("gpc.poly", ...)} or by reading in from a file using \code{read.polyfile}. } \section{Slots}{ \describe{ \item{pts}{Object of class \dQuote{list}. Actually, \code{pts} is a list of lists with length equal to the number of contours in the \code{"gpc.poly"} object. Each element of \code{pts} is a list of length 3 with names \code{x}, \code{y}, and \code{hole}. \code{x} and \code{y} are vectors containing the x and y coordinates, respectively, while \code{hole} is a logical indicating whether or not the contour is a hole.} } } \section{Methods}{ \describe{ \item{[}{\code{signature(x = "gpc.poly")}: ... } \item{append.poly}{\code{signature(x = "gpc.poly", y = "gpc.poly")}: ... } \item{area.poly}{\code{signature(object = "gpc.poly")}: ... } \item{coerce}{\code{signature(from = "matrix", to = "gpc.poly")}: ... } \item{coerce}{\code{signature(from = "data.frame", to = "gpc.poly")}: ... } \item{coerce}{\code{signature(from = "numeric", to = "gpc.poly")}: ... } \item{coerce}{\code{signature(from = "list", to = "gpc.poly")}: ... } \item{coerce}{\code{signature(from = "SpatialPolygons", to = "gpc.poly")}: ... } \item{coerce}{\code{signature(from = "gpc.poly", to = "matrix")}: ... } \item{coerce}{\code{signature(from = "gpc.poly", to = "numeric")}: ... } \item{coerce}{\code{signature(from = "gpc.poly", to = "SpatialPolygons")}: ... } \item{get.bbox}{\code{signature(x = "gpc.poly")}: ... } \item{get.pts}{\code{signature(object = "gpc.poly")}: ... } \item{intersect}{\code{signature(x = "gpc.poly", y = "gpc.poly")}: ... } \item{plot}{\code{signature(x = "gpc.poly")}: The argument \code{poly.args} can be used to pass a list of additional arguments to be passed to the underlying \code{polygon} call.} \item{scale.poly}{\code{signature(x = "gpc.poly")}: ... } \item{setdiff}{\code{signature(x = "gpc.poly", y = "gpc.poly")}: ... } \item{show}{\code{signature(object = "gpc.poly")}: Scale x and y coordinates by amount \code{xscale} and \code{yscale}. By default \code{xscale} equals \code{yscale}.} \item{symdiff}{\code{signature(x = "gpc.poly", y = "gpc.poly")}: ... } \item{union}{\code{signature(x = "gpc.poly", y = "gpc.poly")}: ... } \item{tristrip}{\code{signature(x = "gpc.poly")}: ... } \item{triangulate}{\code{signature(x = "gpc.poly")}: ... } } } \author{Roger D. Peng} \note{ The class \code{"gpc.poly.nohole"} is identical to \code{"gpc.poly"} except the \code{hole} flag for each contour of a \code{"gpc.poly.nohole"} object is always \code{FALSE}. } \examples{ ## Make some random polygons set.seed(100) a <- cbind(rnorm(100), rnorm(100)) a <- a[chull(a), ] ## Convert `a' from matrix to "gpc.poly" a <- as(a, "gpc.poly") b <- cbind(rnorm(100), rnorm(100)) b <- as(b[chull(b), ], "gpc.poly") ## More complex polygons with an intersection p1 <- read.polyfile(system.file("poly-ex-gpc/ex-poly1.txt", package = "rgeos")) p2 <- read.polyfile(system.file("poly-ex-gpc/ex-poly2.txt", package = "rgeos")) ## Plot both polygons and highlight their intersection in red plot(append.poly(p1, p2)) plot(intersect(p1, p2), poly.args = list(col = 2), add = TRUE) ## Highlight the difference p1 \ p2 in green plot(setdiff(p1, p2), poly.args = list(col = 3), add = TRUE) ## Highlight the difference p2 \ p1 in blue plot(setdiff(p2, p1), poly.args = list(col = 4), add = TRUE) ## Plot the union of the two polygons plot(union(p1, p2)) ## Take the non-intersect portions and create a new polygon ## combining the two contours p.comb <- append.poly(setdiff(p1, p2), setdiff(p2, p1)) plot(p.comb, poly.args = list(col = 2, border = 0)) ## Coerce from a matrix x <- structure(c(0.0934073560027759, 0.192713393476752, 0.410062456627342, 0.470020818875781, 0.41380985426787, 0.271408743927828, 0.100902151283831, 0.0465648854961832, 0.63981588032221, 0.772382048331416, 0.753739930955121, 0.637744533947066, 0.455466052934407, 0.335327963176065, 0.399539700805524, 0.600460299194476), .Dim = c(8, 2)) y <- structure(c(0.404441360166551, 0.338861901457321, 0.301387925052047, 0.404441360166551, 0.531852879944483, 0.60117973629424, 0.625537820957668, 0.179976985040276, 0.341542002301496, 0.445109321058688, 0.610817031070196, 0.596317606444189, 0.459608745684695, 0.215189873417722), .Dim = c(7, 2)) x1 <- as(x, "gpc.poly") y1 <- as(y, "gpc.poly") plot(append.poly(x1, y1)) plot(intersect(x1, y1), poly.args = list(col = 2), add = TRUE) ## Show the triangulation #plot(append.poly(x1, y1)) #triangles <- triangulate(append.poly(x1,y1)) #for (i in 0:(nrow(triangles)/3 - 1)) # polygon(triangles[3*i + 1:3,], col="lightblue") } \keyword{classes} rgeos/man/pred-binary-gTouches.Rd0000644000176200001440000000573314025150745016441 0ustar liggesusers\name{gTouches} \alias{gTouches} \alias{RGEOSTouches} \title{Geometry Relationships - Touches} \description{Functions for testing if the geometries have at least one boundary point in common, but no interior points} \usage{ gTouches(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{returnDense}{default TRUE, if false returns a list of the length of spgeom1 of integer vectors listing the \code{1:length(spgeom2)} indices which would be TRUE in the dense logical matrix representation; useful when the sizes of the byid=TRUE returned matrix is very large and it is sparse; essential when the returned matrix would be too large} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} } \value{Returns TRUE if the intersection of the boundaries of the two geometries is not empty.} \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gContains}} \code{\link{gContainsProperly}} \code{\link{gCovers}} \code{\link{gCoveredBy}} \code{\link{gCrosses}} \code{\link{gDisjoint}} \code{\link{gEquals}} \code{\link{gEqualsExact}} \code{\link{gIntersects}} \code{\link{gOverlaps}} \code{\link{gRelate}} \code{\link{gWithin}} } \examples{ p1 = readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))") p2 = readWKT("POLYGON((0 1,0.5 2,1 1,0 1))") p3 = readWKT("POLYGON((0.5 1,0 2,1 2,0.5 1))") p4 = readWKT("POLYGON((0.5 0.5,0 1.5,1 1.5,0.5 0.5))") l0 = readWKT("LINESTRING(0 1,0.5 2,1 1)") l1 = readWKT("LINESTRING(0 0,2 2)") l2 = readWKT("LINESTRING(1 1,2 0)") l3 = readWKT("LINESTRING(0 2,2 0)") par(mfrow=c(2,3)) plot(p1,col='blue',border='blue',ylim=c(0,2.5));plot(p2,col='black',add=TRUE,pch=16) title(paste("Touches:",gTouches(p1,p2))) plot(p1,col='blue',border='blue',ylim=c(0,2.5));plot(p3,col='black',add=TRUE,pch=16) title(paste("Touches:",gTouches(p1,p3))) plot(p1,col='blue',border='blue',ylim=c(0,2.5));plot(p4,col='black',add=TRUE,pch=16) title(paste("Touches:",gTouches(p1,p4))) plot(p1,col='blue',border='blue',ylim=c(0,2.5));plot(l0,lwd=2,col='black',add=TRUE,pch=16) title(paste("Touches:",gTouches(p1,l0))) plot(l1,lwd=2,col='blue');plot(l2,lwd=2,col='black',add=TRUE,pch=16) title(paste("Touches:",gTouches(l1,l2))) plot(l1,lwd=2,col='blue');plot(l3,lwd=2,col='black',add=TRUE,pch=16) title(paste("Touches:",gTouches(l1,l3))) } \keyword{spatial} rgeos/man/topo-unary-gCentroid.Rd0000644000176200001440000000235014025150745016467 0ustar liggesusers\name{gCentroid} \alias{gCentroid} \alias{RGEOSGetCentroid} \title{Centroid of Geometry} \description{Function calculates the centroid of the given geometry.} \usage{ gCentroid(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \details{Returns a SpatialPoints object of the centroid(s) for spgeom.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gBoundary}} \code{\link{gConvexHull}} \code{\link{gEnvelope}} \code{\link{gPointOnSurface}} } \examples{ x = readWKT(paste("GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),", "POLYGON((15 0,25 15,35 0,15 0)))")) # Centroids of both the square and circle independently c1 = gCentroid(x,byid=TRUE) # Centroid of square and circle together c2 = gCentroid(x) plot(x) plot(c1,col='red',add=TRUE) plot(c2,col='blue',add=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/topo-unary-gMinumumRotatedRectangle.Rd0000644000176200001440000000337414025150745021526 0ustar liggesusers\name{gMinumumRotatedRectangle} \alias{gMinumumRotatedRectangle} \title{Centroid of Geometry} \description{Returns the minimum rotated rectangular POLYGON which encloses the input geometry.} \usage{ gMinumumRotatedRectangle(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \details{Returns the minimum rotated rectangular POLYGON which encloses the input geometry. The rectangle has width equal to the minimum diameter, and a longer length. If the convex hill of the input is degenerate (a line or point) a LINESTRING or POINT is returned. The minimum rotated rectangle can be used as an extremely generalized representation for the given geometry.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gBoundary}} \code{\link{gConvexHull}} \code{\link{gEnvelope}} \code{\link{gPointOnSurface}} } \examples{ if (version_GEOS0() >= "3.9.0") { x = readWKT(paste("GEOMETRYCOLLECTION(POLYGON((0 0,10 1,10 11,0 10,0 0)),", "POLYGON((15 0,25 12,35 3,15 0)))")) # Minimum rotated rectangles of both the square and circle independently c1 = gMinumumRotatedRectangle(x,byid=TRUE) # Minimum rotated rectangle of square and circle together c2 = gMinumumRotatedRectangle(x) opar <- par(mfrow=c(2,1)) plot(c1, border='red', lwd=2, lty=2) plot(x,add=TRUE) plot(c2, border='blue', lwd=2, lty=3) plot(x,add=TRUE) par(opar) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/constructor-SpatialRings.Rd0000644000176200001440000000304614025150745017424 0ustar liggesusers\name{SpatialRings} \alias{Ring} \alias{SpatialRings} \alias{SpatialRingsDataFrame} \title{ create SpatialRings or SpatialRingsDataFrame} \description{ create objects of class \code{SpatialRings} or \code{SpatialRingsDataFrame} } \usage{ Ring(coords,ID=as.character(NA)) SpatialRings(RingList, proj4string=CRS(as.character(NA))) SpatialRingsDataFrame(sr, data, match.ID = TRUE) } \arguments{ \item{coords}{2-column numeric matrix with coordinates; first point (row) should equal last coordinates (row); if the hole argument is not given, the status of the polygon as a hole or an island will be taken from the ring direction, with clockwise meaning island, and counter-clockwise meaning hole} \item{ID}{character vector of length one with identifier} \item{RingList}{ list with objects of class \link{Ring-class}} \item{proj4string}{Object of class \code{"CRS"} holding a valid proj4 string} \item{sr}{ object of class \link{SpatialRings-class}} \item{data}{ object of class \code{data.frame}; the number of rows in \code{data} should equal the number of \code{Lines} elements in \code{sl}} \item{match.ID}{logical: (default TRUE): match SpatialLines member Lines ID slot values with data frame row names, and re-order the data frame rows if necessary} } \value{ \code{Ring} returns object of class \code{Ring} \code{SpatialRings} returns object of class \code{SpatialRings} \code{SpatialRingsDataFrame} returns object of class \code{SpatialRingsDataFrame} } \seealso{ \link{Ring-class} \link{SpatialRings-class} \link{SpatialRingsDataFrame-class} } \keyword{manip} rgeos/man/rgeos-deprecated.Rd0000644000176200001440000002437314431417237015667 0ustar liggesusers\name{rgeos-deprecated} \alias{rgeos-deprecated} \alias{gBuffer} \alias{RGEOSBuffer} \alias{gDifference} \alias{gIntersection} \alias{gSymdifference} \alias{gUnion} \title{Deprecated functions and methods} \description{Cumulative deprecated functions and methods from rgeos prior to package retirement/archiving during 2023.} \usage{ gBuffer(spgeom, byid=FALSE, id=NULL, width=1.0, quadsegs=5, capStyle="ROUND", joinStyle="ROUND", mitreLimit=1.0) gDifference(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) gSymdifference(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) gIntersection(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_not_poly, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) gUnion(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} \item{width}{Distance from original geometry to include in the new geometry. Negative values are allowed. Either a numeric vector of length 1 when byid is FALSE; if byid is TRUE: of length 1 replicated to the number of input geometries, or of length equal to the number of input geometries} \item{quadsegs}{Number of line segments to use to approximate a quarter circle.} \item{capStyle}{Style of cap to use at the ends of the geometry. Allowed values: \code{ROUND},\code{FLAT},\code{SQUARE}} \item{joinStyle}{Style to use for joints in the geometry. Allowed values: \code{ROUND},\code{MITRE},\code{BEVEL}} \item{mitreLimit}{Numerical value that specifies how far a joint can extend if a mitre join style is used.} \item{spgeom1, spgeom2}{sp objects as defined in package sp} \item{drop_lower_td}{default FALSE; if TRUE, objects will be dropped from output GEOMETRYCOLLECTION objects to simplify output if their topological dinension is less than the minimum topological dinension of the input objects.} \item{unaryUnion_if_byid_false}{default TRUE; if \code{byid} takes a FALSE in either position, the subgeometries are combined first to avoid possible topology exceptions (change in 0.3-13, previous behaviour did not combine subgeometries, and may be achieved by setting this argument FALSE} \item{checkValidity}{default NULL, integer 0L (no action), 1L (check), 2L (check and try to buffer by zero distance to repair). If NULL, a value set to 0L for GEOS < 3.7.2, 1L for GEOS >= 3.7.2 is read from values assigned on load. Error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is > 0L, \code{gIsValid} is run on each in turn} \item{drop_not_poly}{deprecated argument, use drop_lower_td} } \examples{ p1 = readWKT("POLYGON((0 1,0.95 0.31,0.59 -0.81,-0.59 -0.81,-0.95 0.31,0 1))") p2 = readWKT("POLYGON((2 2,-2 2,-2 -2,2 -2,2 2),(1 1,-1 1,-1 -1,1 -1,1 1))") par(mfrow=c(2,3)) plot(gBuffer(p1,width=-0.2),col='black',xlim=c(-1.5,1.5),ylim=c(-1.5,1.5)) plot(p1,border='blue',lwd=2,add=TRUE);title("width: -0.2") plot(gBuffer(p1,width=0),col='black',xlim=c(-1.5,1.5),ylim=c(-1.5,1.5)) plot(p1,border='blue',lwd=2,add=TRUE);title("width: 0") plot(gBuffer(p1,width=0.2),col='black',xlim=c(-1.5,1.5),ylim=c(-1.5,1.5)) plot(p1,border='blue',lwd=2,add=TRUE);title("width: 0.2") plot(gBuffer(p2,width=-0.2),col='black',pbg='white',xlim=c(-2.5,2.5),ylim=c(-2.5,2.5)) plot(p2,border='blue',lwd=2,add=TRUE);title("width: -0.2") plot(gBuffer(p2,width=0),col='black',pbg='white',xlim=c(-2.5,2.5),ylim=c(-2.5,2.5)) plot(p2,border='blue',lwd=2,add=TRUE);title("width: 0") plot(gBuffer(p2,width=0.2),col='black',pbg='white',xlim=c(-2.5,2.5),ylim=c(-2.5,2.5)) plot(p2,border='blue',lwd=2,add=TRUE);title("width: 0.2") p3 <- readWKT(paste("GEOMETRYCOLLECTION(", "POLYGON((0 1,0.95 0.31,0.59 -0.81,-0.59 -0.81,-0.95 0.31,0 1)),", "POLYGON((2 2,-2 2,-2 -2,2 -2,2 2),(1 1,-1 1,-1 -1,1 -1,1 1)))")) par(mfrow=c(1,1)) plot(gBuffer(p3, byid=TRUE, width=c(-0.2, -0.1)),col='black',pbg='white', xlim=c(-2.5,2.5),ylim=c(-2.5,2.5)) plot(p3,border=c('blue', 'red'),lwd=2,add=TRUE);title("width: -0.2, -0.1") library(sp) p3df <- SpatialPolygonsDataFrame(p3, data=data.frame(i=1:length(p3), row.names=row.names(p3))) dim(p3df) row.names(p3df) dropEmpty = gBuffer(p3df, byid=TRUE, id=letters[1:nrow(p3df)], width=c(-1, 0)) dim(dropEmpty) row.names(dropEmpty) row.names(slot(dropEmpty, "data")) plot(dropEmpty, col='black', pbg='white', xlim=c(-2.5,2.5),ylim=c(-2.5,2.5)) plot(p3df,border=c('blue'),lwd=2,add=TRUE);title("width: -1, 0") par(mfrow=c(2,3)) #Style options l1 = readWKT("LINESTRING(0 0,1 5,4 5,5 2,8 2,9 4,4 6.5)") par(mfrow=c(2,3)) plot(gBuffer(l1,capStyle="ROUND"));plot(l1,col='blue',add=TRUE);title("capStyle: ROUND") plot(gBuffer(l1,capStyle="FLAT"));plot(l1,col='blue',add=TRUE);title("capStyle: FLAT") plot(gBuffer(l1,capStyle="SQUARE"));plot(l1,col='blue',add=TRUE);title("capStyle: SQUARE") plot(gBuffer(l1,quadsegs=1));plot(l1,col='blue',add=TRUE);title("quadsegs: 1") plot(gBuffer(l1,quadsegs=2));plot(l1,col='blue',add=TRUE);title("quadsegs: 2") plot(gBuffer(l1,quadsegs=5));plot(l1,col='blue',add=TRUE);title("quadsegs: 5") l2 = readWKT("LINESTRING(0 0,1 5,3 2)") par(mfrow=c(2,3)) plot(gBuffer(l2,joinStyle="ROUND"));plot(l2,col='blue',add=TRUE);title("joinStyle: ROUND") plot(gBuffer(l2,joinStyle="MITRE"));plot(l2,col='blue',add=TRUE);title("joinStyle: MITRE") plot(gBuffer(l2,joinStyle="BEVEL"));plot(l2,col='blue',add=TRUE);title("joinStyle: BEVEL") plot(gBuffer(l2,joinStyle="MITRE",mitreLimit=0.5));plot(l2,col='blue',add=TRUE) title("mitreLimit: 0.5") plot(gBuffer(l2,joinStyle="MITRE",mitreLimit=1));plot(l2,col='blue',add=TRUE) title("mitreLimit: 1") plot(gBuffer(l2,joinStyle="MITRE",mitreLimit=3));plot(l2,col='blue',add=TRUE) title("mitreLimit: 3") x = readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))") y = readWKT("POLYGON ((3 3, 7 3, 7 7, 3 7, 3 3))") d = gDifference(x,y) plot(d,col='red',pbg='white') # Empty geometry since y is completely contained with x d2 = gDifference(y,x) pol <- readWKT(paste("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20),", "(-150 -20, -100 -10, -110 20, -150 -20))")) library(sp) GT <- GridTopology(c(-175, -85), c(10, 10), c(36, 18)) gr <- as(as(SpatialGrid(GT), "SpatialPixels"), "SpatialPolygons") try(res <- gIntersection(pol, gr, byid=TRUE)) res <- gIntersection(pol, gr, byid=TRUE, drop_lower_td=TRUE) # Robert Hijmans difficult intersection case load(system.file("test_cases/polys.RData", package="rgeos")) try(res <- gIntersection(a, b, byid=TRUE)) res <- gIntersection(a, b, byid=TRUE, drop_lower_td=TRUE) unlist(sapply(slot(res, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) # example from Pius Korner 2015-10-25 poly1 <- SpatialPolygons(list(Polygons(list(Polygon(coords=matrix(c(0, 0, 2, 2, 0, 1, 1, 0), ncol=2, byrow=FALSE))), ID=c("a")), Polygons(list(Polygon(coords=matrix(c(0, 0, 2, 2, 2, 3, 3, 2), ncol=2, byrow=FALSE))), ID=c("b")))) poly2 <- SpatialPolygons(list(Polygons(list(Polygon(coords=matrix(c(0, 0, 2, 2, 1, 1, 1, 3, 3, 0, 0, 2), ncol=2, byrow=FALSE))), ID=c("c")))) plot(poly1, border="orange") plot(poly2, border="blue", add=TRUE, lty=2, density=8, angle=30, col="blue") gI <- gIntersection(poly1, poly2, byid=TRUE, drop_lower_td=TRUE) plot(gI, add=TRUE, border="red", lwd=3) oT <- get_RGEOS_polyThreshold() oW <- get_RGEOS_warnSlivers() oD <- get_RGEOS_dropSlivers() set_RGEOS_polyThreshold(1e-3) set_RGEOS_warnSlivers(TRUE) res1 <- gIntersection(a, b, byid=TRUE, drop_lower_td=TRUE) unlist(sapply(slot(res1, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) set_RGEOS_dropSlivers(TRUE) res2 <- gIntersection(a, b, byid=TRUE, drop_lower_td=TRUE) unlist(sapply(slot(res2, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) set_RGEOS_dropSlivers(FALSE) oo <- gUnaryUnion(res1, c(rep("1", 3), "2", "3", "4"), checkValidity=2L) unlist(sapply(slot(oo, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) ooo <- gIntersection(b, oo, byid=TRUE, checkValidity=2L) gArea(ooo, byid=TRUE) unlist(sapply(slot(ooo, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) set_RGEOS_dropSlivers(TRUE) ooo <- gIntersection(b, oo, byid=TRUE, checkValidity=2L) gArea(ooo, byid=TRUE) unlist(sapply(slot(ooo, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) set_RGEOS_polyThreshold(oT) set_RGEOS_warnSlivers(oW) set_RGEOS_dropSlivers(oD) # see thread https://stat.ethz.ch/pipermail/r-sig-geo/2015-September/023468.html Pol1=rbind(c(0,0),c(0,10),c(10,10),c(10,0),c(0,0)) Pol2=rbind(c(0,0),c(10,0),c(10,-10),c(0,-10),c(0,0)) library(sp) Pols1=Polygons(list(Polygon(Pol1)),"Pols1") Pols2=Polygons(list(Polygon(Pol2)),"Pols2") MyLay=SpatialPolygons(list(Pols1,Pols2)) Pol1l=Pol1+0.5 Pol2l=Pol2+0.5 Pols1l=Polygons(list(Polygon(Pol1l)),"Pols1l") Pols2l=Polygons(list(Polygon(Pol2l)),"Pols2l") MyLayl=SpatialPolygons(list(Pols1l,Pols2l)) inter=gIntersection(MyLay, MyLayl) plot(MyLay) plot(MyLayl,add=TRUE) plot(inter, add=TRUE, border="green") try(gIntersection(MyLay, MyLayl, unaryUnion_if_byid_false=FALSE)) Pol1=rbind(c(0,0),c(0,1),c(1,1),c(1,0),c(0,0)) Pol2=rbind(c(0,0),c(1,0),c(1,-1),c(0,-1),c(0,0)) Pols1=Polygons(list(Polygon(Pol1)),"Pols1") Pols2=Polygons(list(Polygon(Pol2)),"Pols2") MyLay=SpatialPolygons(list(Pols1,Pols2)) Pol1l=Pol1+0.1 Pol2l=Pol2+0.1 Pols1l=Polygons(list(Polygon(Pol1l)),"Pols1l") Pols2l=Polygons(list(Polygon(Pol2l)),"Pols2l") MyLayl=SpatialPolygons(list(Pols1l,Pols2l)) inter=gIntersection(MyLay, MyLayl, unaryUnion_if_byid_false=FALSE) gEquals(inter, MyLay) inter1=gIntersection(MyLay, MyLayl, unaryUnion_if_byid_false=TRUE) gEquals(inter1, MyLay) gEquals(inter, inter1) plot(MyLay, ylim=c(-1, 1.1)) plot(MyLayl, add=TRUE) plot(inter, angle=45, density=10, add=TRUE) plot(inter1, angle=135, density=10, add=TRUE) inter2=gIntersection(MyLay, MyLayl) gEquals(inter2, MyLay) gEquals(inter1, inter2) x = readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))") y = readWKT("POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))") d = gSymdifference(x,y) plot(d,col='red',pbg='white') } rgeos/man/pred-binary-gContains.Rd0000644000176200001440000001206714025150745016603 0ustar liggesusers\name{gContains} \alias{gContains} \alias{gContainsProperly} \alias{gCovers} \alias{gCoveredBy} \alias{gWithin} \alias{RGEOSContains} \alias{RGEOSWithin} \title{Geometry Relationships - Contains and Within} \description{Functions for testing whether one geometry contains or is contained within another geometry} \usage{ gContains(spgeom1, spgeom2 = NULL, byid = FALSE, prepared=TRUE, returnDense=TRUE, STRsubset=FALSE, checkValidity=FALSE) gContainsProperly(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) gCovers(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) gCoveredBy(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) gWithin(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{prepared}{Logical determining if prepared geometry (spatially indexed) version of the GEOS function should be used. In general prepared geometries should be faster than the alternative.} \item{returnDense}{default TRUE, if false returns a list of the length of spgeom1 of integer vectors listing the \code{1:length(spgeom2)} indices which would be TRUE in the dense logical matrix representation; useful when the sizes of the byid=TRUE returned matrix is very large and it is sparse; essential when the returned matrix would be too large} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} \item{STRsubset}{logical argument for future use} } \value{\code{gContains} returns TRUE if none of the point of \code{spgeom2} is outside of \code{spgeom1} and at least one point of \code{spgeom2} falls within \code{spgeom1}. \code{gContainsProperly} returns TRUE under the same conditions as \code{gContains} with the additional requirement that \code{spgeom2} does not intersect with the boundary of \code{spgeom1}. As such any given geometry will Contain itself but will not ContainProperly itself. \code{gCovers} returns TRUE if no point in \code{spgeom2} is outside of \code{spgeom1}. This is slightly different from \code{gContains} as it does not require a point within \code{spgeom1} which can be an issue as boundaries are not considered to be "within" a geometry, see \code{\link{gBoundary}} for specifics of geometry boundaries. \code{gCoveredBy} is the converse of \code{gCovers} and is equivalent to swapping \code{spgeom1} and \code{spgeom2}. \code{gWithin} is the converse of \code{gContains} and is equivalent to swapping \code{spgeom1} and \code{spgeom2}. } \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \references{ Helpful information on the subtle differences between these functions: \url{http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html}} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gCrosses}} \code{\link{gDisjoint}} \code{\link{gEquals}} \code{\link{gEqualsExact}} \code{\link{gIntersects}} \code{\link{gOverlaps}} \code{\link{gRelate}} \code{\link{gTouches}} } \examples{ l1 = readWKT("LINESTRING(0 3,1 1,2 2,3 0)") l2 = readWKT("LINESTRING(1 3.5,3 3,2 1)") l3 = readWKT("LINESTRING(1 3.5,3 3,4 1)") pt1 = readWKT("MULTIPOINT(1 1,3 0)") pt2 = readWKT("MULTIPOINT(0 3,3 0)") pt3 = readWKT("MULTIPOINT(1 1,2 2,3 1)") p1 = readWKT("POLYGON((0 0,0 2,1 3.5,3 3,4 1,3 0,0 0))") p2 = readWKT("POLYGON((1 1,1 2,2 2,2 1,1 1))") par(mfrow=c(2,3)) plot(l1,col='blue');plot(pt1,add=TRUE,pch=16) title(paste("Contains:",gContains(l1,pt1), "\nContainsProperly:",gContainsProperly(l1,pt1), "\nCovers:",gCovers(l1,pt1))) plot(l1,col='blue');plot(pt2,add=TRUE,pch=16) title(paste("Contains:",gContains(l1,pt2), "\nContainsProperly:",gContainsProperly(l1,pt2), "\nCovers:",gCovers(l1,pt2))) plot(p1,col='blue',border='blue');plot(pt3,add=TRUE,pch=16) title(paste("Contains:",gContains(p1,pt3), "\nContainsProperly:",gContainsProperly(p1,pt3), "\nCovers:",gCovers(p1,pt3))) plot(p1,col='blue',border='blue');plot(l2,lwd=2,add=TRUE,pch=16) title(paste("Contains:",gContains(p1,l2), "\nContainsProperly:",gContainsProperly(p1,l2), "\nCovers:",gCovers(p1,l2))) plot(p1,col='blue',border='blue');plot(l3,lwd=2,add=TRUE,pch=16) title(paste("Contains:",gContains(p1,l3), "\nContainsProperly:",gContainsProperly(p1,l3), "\nCovers:",gCovers(p1,l3))) plot(p1,col='blue',border='blue');plot(p2,col='black',add=TRUE,pch=16) title(paste("Contains:",gContains(p1,p2), "\nContainsProperly:",gContainsProperly(p1,p2), "\nCovers:",gCovers(p1,p2))) } \keyword{spatial} rgeos/man/pred-binary-gIntersects.Rd0000644000176200001440000001040114025150745017136 0ustar liggesusers\name{gIntersects} \alias{gIntersects} \alias{RGEOSIntersects} \alias{gDisjoint} \alias{RGEOSDisjoint} \title{Geometry Relationships - Intersects and Disjoint} \description{Function for testing if the geometries have at least one point in common or no points in common} \usage{ gIntersects(spgeom1, spgeom2 = NULL, byid = FALSE, prepared=TRUE, returnDense=TRUE, checkValidity=FALSE) gDisjoint(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{prepared}{Logical determining if prepared geometry (spatially indexed) version of the GEOS function should be used. In general prepared geometries should be faster than the alternative.} \item{returnDense}{default TRUE, if false returns a list of the length of spgeom1 of integer vectors listing the \code{1:length(spgeom2)} indices which would be TRUE in the dense logical matrix representation; useful when the sizes of the byid=TRUE returned matrix is very large and it is sparse; essential when the returned matrix would be too large} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} } \value{\code{gIntersects} returns TRUE if \code{spgeom1} and \code{spgeom2} have at least one point in common. \code{gDisjoint} returns TRUE if \code{spgeom1} and \code{spgeom2} have no points in common. Both return a conforming logical matrix if \code{byid = TRUE}. } \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gContains}} \code{\link{gContainsProperly}} \code{\link{gCovers}} \code{\link{gCoveredBy}} \code{\link{gCrosses}} \code{\link{gEquals}} \code{\link{gEqualsExact}} \code{\link{gOverlaps}} \code{\link{gRelate}} \code{\link{gTouches}} \code{\link{gWithin}} } \examples{ p1 = readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))") p2 = readWKT("POLYGON((0.5 1,0 2,1 2,0.5 1))") p3 = readWKT("POLYGON((0.5 0.5,0 1.5,1 1.5,0.5 0.5))") l1 = readWKT("LINESTRING(0 3,1 1,2 2,3 0)") l2 = readWKT("LINESTRING(1 3.5,3 3,2 1)") l3 = readWKT("LINESTRING(-0.1 0,-0.1 1.1,1 1.1)") pt1 = readWKT("MULTIPOINT(1 1,3 0,2 1)") pt2 = readWKT("MULTIPOINT(0 3,3 0,2 1)") pt3 = readWKT("MULTIPOINT(-0.2 0,1 -0.2,1.2 1,0 1.2)") par(mfrow=c(3,2)) plot(p1,col='blue',border='blue',ylim=c(0,2.5));plot(p2,col='black',add=TRUE,pch=16) title(paste("Intersects:",gIntersects(p1,p2), "\nDisjoint:",gDisjoint(p1,p2))) plot(p1,col='blue',border='blue',ylim=c(0,2.5));plot(p3,col='black',add=TRUE,pch=16) title(paste("Intersects:",gIntersects(p1,p3), "\nDisjoint:",gDisjoint(p1,p3))) plot(l1,col='blue');plot(pt1,add=TRUE,pch=16) title(paste("Intersects:",gIntersects(l1,pt1), "\nDisjoint:",gDisjoint(l1,pt1))) plot(l1,col='blue');plot(pt2,add=TRUE,pch=16) title(paste("Intersects:",gIntersects(l1,pt2), "\nDisjoint:",gDisjoint(l1,pt2))) plot(p1,col='blue',border='blue',xlim=c(-0.5,2),ylim=c(0,2.5)) plot(l3,lwd=2,col='black',add=TRUE) title(paste("Intersects:",gIntersects(p1,l3), "\nDisjoint:",gDisjoint(p1,l3))) plot(p1,col='blue',border='blue',xlim=c(-0.5,2),ylim=c(-0.5,2)) plot(pt3,pch=16,col='black',add=TRUE) title(paste("Intersects:",gIntersects(p1,pt3), "\nDisjoint:",gDisjoint(p1,pt3))) # Michael Chirico bug report and fix 2019-08-16 SP1 = SpatialPoints( cbind(c(.25, .75), c(.75, .25)) ) SP2 = SpatialPolygons(list( Polygons(list(Polygon(cbind(c(0, 0, 1, 1), c(0, 1, 1, 0)))), ID = 'a'), Polygons(list(Polygon(cbind(c(1, 1, 2, 2), c(1, 2, 2, 1)))), ID = 'b') )) gIntersects(SP1, SP2, byid = c(TRUE, FALSE)) gIntersects(SP1, SP2, byid = c(TRUE, TRUE)) gIntersects(SP1, SP2, byid = c(FALSE, TRUE)) gIntersects(SP1, SP2, byid = c(FALSE, FALSE)) } \keyword{spatial} rgeos/man/utility-functions.Rd0000644000176200001440000001260214025150745016150 0ustar liggesusers\name{RGEOS Utility Functions} \alias{getScale} \alias{setScale} \alias{translate} \alias{checkP4S} \alias{version_GEOS} \alias{version_GEOS0} \alias{set_RGEOS_polyThreshold} \alias{get_RGEOS_polyThreshold} \alias{set_RGEOS_warnSlivers} \alias{get_RGEOS_warnSlivers} \alias{set_RGEOS_dropSlivers} \alias{get_RGEOS_dropSlivers} \alias{set_RGEOS_CheckValidity} \alias{get_RGEOS_CheckValidity} \alias{rgeos_extSoftVersion} \title{RGEOS Utility Functions} \description{Utility functions for the RGEOS package} \usage{ getScale() setScale(scale=100000000) translate(spgeom) checkP4S(p4s) version_GEOS(runtime = TRUE) rgeos_extSoftVersion() version_GEOS0() set_RGEOS_polyThreshold(value) get_RGEOS_polyThreshold() set_RGEOS_warnSlivers(value) get_RGEOS_warnSlivers() set_RGEOS_dropSlivers(value) get_RGEOS_dropSlivers() get_RGEOS_CheckValidity() set_RGEOS_CheckValidity(value) } \arguments{ \item{scale}{Numeric value determining the precision of translated geometries} \item{spgeom}{sp object as defined in package sp} \item{p4s}{Either a character string or an object of class \code{CRS}} \item{runtime}{default TRUE; if FALSE, installation GEOS version} \item{value}{the value to be passed to an RGEOS option in its environment} } \details{getScale and setScale are used to get and set the scale option in the rgeos environment. This option is used to determine the precision of coordinates when translating to and from GEOS C objects. Precision is defined as 1 / scale. The final example is a use case reported by Mao-Gui Hu, who has also made the objects available, where the default scale defeats an intended line intersection operation; changing the scale temporarily resoves the issue. In order to permit polygon slivers to be detected, reported and dropped, the user may set a numeric value for polyThreshold and logical values for warnSlivers and dropSlivers. By default, the threshold is 0.0, and warning and dropping are FALSE. To detect slivers, the threshold may be set to a small value and warnSlivers set to TRUE. To drop slivers from returned Polygons and Polygon objects, set dropSlivers to TRUE for a non-zero threshold. translate is a testing function which translates the sp object into a GEOS C object and then back into an sp object and is used extensively in the translation unit tests. In all cases it is expected that \code{spgeom} and \code{translate(spgeom)} should be identical. checkP4S is a validation function for proj4strings and is used in testing. version_GEOS returns the full runtime version string, and version_GEOS0 only the GEOS version number. set_RGEOS_CheckValidity takes an integer 0:2, 0L is no operation, 1L is check validity, and 2L is check and if invalid try to repair with a zero width buffer. } \author{Roger Bivand & Colin Rundel} \examples{ readWKT("POINT(1.5 1.5)") # With scale set to 1, the following point will be rounded setScale(1) readWKT("POINT(1.5 1.5)") setScale(10) readWKT("POINT(1.5 1.5)") getScale() # Set scale option back to default setScale() # scale option only affect objects when they are translated through rgeos setScale(1) library(sp) SpatialPoints(data.frame(x=1.5,y=1.5)) translate( SpatialPoints(data.frame(x=1.5,y=1.5)) ) setScale() # added example of scale impact on intersection 120905 sline1 <- readWKT(readLines(system.file("wkts/sline1.wkt", package="rgeos"))) sline2 <- readWKT(readLines(system.file("wkts/sline2.wkt", package="rgeos"))) rslt <- gIntersection(sline1, sline2) class(rslt) getScale() setScale(1e+6) rslt <- gIntersection(sline1, sline2) class(rslt) sapply(slot(rslt, "lines"), function(x) length(slot(x, "Lines"))) rslt <- gLineMerge(rslt, byid=TRUE) sapply(slot(rslt, "lines"), function(x) length(slot(x, "Lines"))) setScale() get_RGEOS_dropSlivers() get_RGEOS_warnSlivers() get_RGEOS_polyThreshold() # Robert Hijmans difficult intersection case load(system.file("test_cases/polys.RData", package="rgeos")) try(res <- gIntersection(a, b, byid=TRUE)) res <- gIntersection(a, b, byid=TRUE, drop_lower_td=TRUE) sort(unlist(sapply(slot(res, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area")))) oT <- get_RGEOS_polyThreshold() oW <- get_RGEOS_warnSlivers() oD <- get_RGEOS_dropSlivers() set_RGEOS_polyThreshold(1e-3) set_RGEOS_warnSlivers(TRUE) res1 <- gIntersection(a, b, byid=TRUE, drop_lower_td=TRUE) sort(unlist(sapply(slot(res, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area")))) set_RGEOS_dropSlivers(TRUE) res2 <- gIntersection(a, b, byid=TRUE, drop_lower_td=TRUE) sort(unlist(sapply(slot(res, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area")))) set_RGEOS_dropSlivers(FALSE) oo <- gUnaryUnion(res1, c(rep("1", 3), "2", "3", "4"), checkValidity=2L) unlist(sapply(slot(oo, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) ooo <- gIntersection(b, oo, byid=TRUE, checkValidity=2L) gArea(ooo, byid=TRUE) unlist(sapply(slot(ooo, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) set_RGEOS_dropSlivers(TRUE) ooo <- gIntersection(b, oo, byid=TRUE, checkValidity=2L) gArea(ooo, byid=TRUE) unlist(sapply(slot(ooo, "polygons"), function(p) sapply(slot(p, "Polygons"), slot, "area"))) set_RGEOS_polyThreshold(oT) set_RGEOS_warnSlivers(oW) set_RGEOS_dropSlivers(oD) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/misc-gArea.Rd0000644000176200001440000000221614025150745014407 0ustar liggesusers\name{gArea} \alias{gArea} \alias{RGEOSArea} \title{Area of Geometry} \description{Calculates the area of the given geometry.} \usage{ gArea(spgeom, byid=FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} } \value{Returns the area of the geometry in the units of the current projection. By definition non-[MULTI]POLYGON geometries have an area of 0. The area of a POLYGON is the area of its shell less the area of any holes. Note that this value may be different from the \code{area} slot of the \code{Polygons} class as this value does not subtract the area of any holes in the geometry.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gLength}} } \examples{ gArea(readWKT("POINT(1 1)")) gArea(readWKT("LINESTRING(0 0,1 1,2 2)")) gArea(readWKT("LINEARRING(0 0,3 0,3 3,0 3,0 0)")) p1 = readWKT("POLYGON((0 0,3 0,3 3,0 3,0 0))") p2 = readWKT("POLYGON((0 0,3 0,3 3,0 3,0 0),(1 1,2 1,2 2,1 2,1 1))") gArea(p1) p1@polygons[[1]]@area gArea(p2) p2@polygons[[1]]@area } \keyword{spatial} rgeos/man/topo-unary-gConvexHull.Rd0000644000176200001440000000225714025150745017015 0ustar liggesusers\name{gConvexHull} \alias{gConvexHull} \alias{RGEOSConvexHull} \title{Convex Hull of Geometry} \description{Function produces the Convex Hull of the given geometry, the smallest convex polygon that contains all subgeometries} \usage{ gConvexHull(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \details{Returns the convex hull as a SpatialPolygons object.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gBoundary}} \code{\link{gCentroid}} \code{\link{gEnvelope}} \code{\link{gPointOnSurface}} } \examples{ x = readWKT(paste("POLYGON((0 40,10 50,0 60,40 60,40 100,50 90,60 100,60", "60,100 60,90 50,100 40,60 40,60 0,50 10,40 0,40 40,0 40))")) ch = gConvexHull(x) plot(x,col='blue',border='blue') plot(ch,add=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/class-SpatialCollections.Rd0000644000176200001440000000301214025150745017331 0ustar liggesusers\name{SpatialCollections-class} \docType{class} \alias{SpatialCollections-class} \alias{SpatialLinesNULL-class} \alias{SpatialRingsNULL-class} \alias{SpatialPolygonsNULL-class} \alias{SpatialPointsNULL-class} \alias{row.names,SpatialCollections-method} \alias{plot,SpatialCollections,missing-method} \title{Class "SpatialCollections"} \description{ class to hold SpatialPoints, SpatialLines, SpatialRings, and SpatialPolygons (without attributes) } \section{Objects from the Class}{ Objects can be created by calls to the function \link{SpatialCollections} } \section{Slots}{ \describe{ \item{\code{pointobj}:}{Object of class SpatialPoints or NULL} \item{\code{lineobj}:}{Object of class SpatialLines or NULL} \item{\code{ringobj}:}{Object of class SpatialRings or NULL} \item{\code{polyobj}:}{Object of class SpatialPolygons or NULL} \item{\code{plotOrder}:}{Numeric vector of length 4} } } \section{Extends}{ Class \code{"Spatial"}, directly. } \section{Methods}{ Methods defined with class "SpatialCollections" in the signature: \describe{ \item{plot}{\code{signature(x = "SpatialCollections", y = "missing")}: plot objects within the SpatialCollections object in the order specified by plotOrder slot} \item{row.names}{\code{signature(object = "SpatialCollections")}: retrieves the ID elements from non-NULL geometry slots} } } \author{ Colin Rundel } \seealso{ \link{SpatialCollections} \link{SpatialPoints} \link{SpatialLines} \link{SpatialRings} \link{SpatialPolygons} } \examples{ #NONE } \keyword{classes} rgeos/man/topo-unary-gSimplify.Rd0000644000176200001440000000326614041735263016525 0ustar liggesusers\name{gSimplify} \alias{gSimplify} \title{Simplify Geometry} \description{Function simplifies the given geometry using the Douglas-Peuker algorithm} \usage{ gSimplify(spgeom, tol, topologyPreserve=FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{tol}{Numerical tolerance value to be used by the Douglas-Peuker algorithm} \item{topologyPreserve}{Logical determining if the algorithm should attempt to preserve the topology of the original geometry} } \value{Returns a simplified version of the given geometry when applied to [MULTI]LINEs or [MULTI]POLYGONs.} \details{When applied to lines it is possible for the resulting geometry to lose simplicity (\code{\link{gIsSimple}}). If topologyPreserve is not specified it is also possible that the resulting geometries may no longer be valid (\code{\link{gIsValid}}). Remember to check the resulting geometry as many other functions rely on simplicity and or validity when performing their calculations.} \author{Roger Bivand & Colin Rundel} \references{ Douglas-Peuker Algorithm: \url{https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm} } \examples{ p = readWKT(paste("POLYGON((0 40,10 50,0 60,40 60,40 100,50 90,60 100,60", "60,100 60,90 50,100 40,60 40,60 0,50 10,40 0,40 40,0 40))")) l = readWKT("LINESTRING(0 7,1 6,2 1,3 4,4 1,5 7,6 6,7 4,8 6,9 4)") par(mfrow=c(2,4)) plot(p);title("Original") plot(gSimplify(p,tol=10));title("tol: 10") plot(gSimplify(p,tol=20));title("tol: 20") plot(gSimplify(p,tol=25));title("tol: 25") plot(l);title("Original") plot(gSimplify(l,tol=3));title("tol: 3") plot(gSimplify(l,tol=5));title("tol: 5") plot(gSimplify(l,tol=7));title("tol: 7") par(mfrow=c(1,1)) } \keyword{spatial} rgeos/man/topo-unary-gMakeValid.Rd0000644000176200001440000001537314041020767016564 0ustar liggesusers\name{gMakeValid} \alias{gMakeValid} \title{Make invalid geometries valid} \description{Function returns a valid geometry, not available before GEOS 3.8.0; from 3.10.0 two correction strategies} \usage{ gMakeValid(spgeom, byid=FALSE, id = NULL, original=NULL, keepCollapsed=NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} \item{original}{default NULL; if GEOS < 3.10.0, TRUE, if GEOS >= 3.10.0, either set directly or taken from environment variable \code{GEOS_MAKE_VALID} with values \code{LINEWORK} for the original algorithm or \code{STRUCTURE} for the new algorithm. If \code{GEOS_MAKE_VALID} is \code{STRUCTURE}, \code{original} is FALSE} \item{keepCollapsed}{default NULL; If GEOS >= 3.10.0 and \code{original} is FALSE, the argument is used to control whether objects with dimension reduction are discarded (keepCollapsed is FALSE) or retained (TRUE). It may be set directly, or if NULL controlled by environment variable \code{GEOS_MAKE_VALID_KEEPCOLLAPSED} with values \code{FALSE} or \code{TRUE}. If \code{GEOS_MAKE_VALID_KEEPCOLLAPSED} is \code{TRUE}, \code{keepCollapsed} is TRUE} } \details{Returns a valid geometry or collection of geometries of different types. For details on the buffered geometry fixer, see links from \url{https://github.com/r-spatial/sf/issues/1655}.} \author{Roger Bivand} \seealso{\link{SpatialCollections-class}} \examples{ # Based on test geometries from sf run <- FALSE if (version_GEOS0() >= "3.8.0") run <- TRUE if (run) { X <- readWKT("POLYGON ((0 0, 0.5 0, 0.5 0.5, 0.5 0, 1 0, 1 1, 0 1, 0 0))") gIsValid(X) } if (run) { class(X) } if (run) { row.names(X) } if (run) { Y <- gMakeValid(X) } if (run) { gIsValid(Y) } if (run) { class(Y) } if (run) { plot(slot(Y, "polyobj")) plot(slot(Y, "lineobj"), add=TRUE, col="red") } if (run) { row.names(slot(Y, "polyobj")) } if (run) { row.names(slot(Y, "lineobj")) } run <- FALSE if (version_GEOS0() >= "3.10.0") run <- TRUE if (run) { JTSplot <- function(x, fill="grey90", pts="black", main="", xlim, ylim) { if (inherits(x, "SpatialCollections")) { xl <- xp <- xpl <- NULL if (!is.null(slot(x, "lineobj"))) xl <- slot(x, "lineobj") if (!is.null(slot(x, "pointobj"))) xp <- slot(x, "pointobj") if (!is.null(slot(x, "polyobj"))) xpl <- slot(x, "polyobj") if (is.null(xl)) xl <- as(xpl, "SpatialLines") else xl <- rbind(xl, as(xpl, "SpatialLines")) if (is.null(xp)) xp <- as(xl, "SpatialPoints") else xp <- rbind(xp, as(xl, "SpatialPoints")) } else { xl <- as(x, "SpatialLines") xp <- as(xl, "SpatialPoints") } plot(coordinates(xp), type="n", main=main, xlab="", ylab="", axes=FALSE, xlim=xlim, ylim=ylim) plot(x, col=fill, border="transparent", add=TRUE, xlim=xlim, ylim=ylim) plot(xl, col=pts, add=TRUE, xlim=xlim, ylim=ylim) plot(xp, col=pts, add=TRUE, pch=14, xlim=xlim, ylim=ylim) } } if (run) { X <- readWKT(paste0("POLYGON ((10 70, 90 70, 90 50, 30 50, 30 30, ", "50 30, 50 90, 70 90, 70 10, 10 10, 10 70))", sep="")) bb <- bbox(X) opar <- par(mfrow=c(2,2)) JTSplot(X, fill="#dfdfff", pts="#00007c", main="input", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=TRUE), fill="#ffffa4", pts="#78b400", main="linework", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE), fill="#ffffa4", pts="#78b400", main="structure", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE, keepCollapsed=TRUE), fill="#ffffa4", pts="#78b400", main="structure + keep collapsed", xlim=bb[1,], ylim=bb[2,]) par(opar) } if (run) { X <- readWKT(paste0("POLYGON ((10 70, 90 70, 90 10, 10 10, 10 70), ", "(60 80, 50 30, 0 20, 10 30, 60 80), (30 40, 60 30, 40 0, 30 40))", sep="")) bb <- rbind(c(0, 90), c(0, 80)) opar <- par(mfrow=c(2,2)) JTSplot(X, fill="#dfdfff", pts="#00007c", main="input", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=TRUE), fill="#ffffa4", pts="#78b400", main="linework", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE), fill="#ffffa4", pts="#78b400", main="structure", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE, keepCollapsed=TRUE), fill="#ffffa4", pts="#78b400", main="structure + keep collapsed", xlim=bb[1,], ylim=bb[2,]) par(opar) } if (run) { X <- readWKT(paste0("MULTIPOLYGON (((10 90, 60 90, 60 40, 10 40, 10 90)), ", "((40 60, 70 60, 70 30, 40 30, 40 60)), ((20 50, 50 50, 50 20, 20 20, 20 50)))", sep="")) bb <- bbox(X) opar <- par(mfrow=c(2,2)) JTSplot(X, fill="#dfdfff", pts="#00007c", main="input", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=TRUE), fill="#ffffa4", pts="#78b400", main="linework", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE), fill="#ffffa4", pts="#78b400", main="structure", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE, keepCollapsed=TRUE), fill="#ffffa4", pts="#78b400", main="structure + keep collapsed", xlim=bb[1,], ylim=bb[2,]) par(opar) } if (run) { X <- readWKT(paste0("MULTIPOLYGON (((10 40, 40 40, 40 10, 10 10, 10 40), ", "(16 17, 31 32, 24 25, 16 17)), ((50 40, 50 40, 50 40, 50 40, 50 40)))", sep="")) bb <- bbox(X) opar <- par(mfrow=c(2,2)) JTSplot(X, fill="#dfdfff", pts="#00007c", main="input", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=TRUE), fill="#ffffa4", pts="#78b400", main="linework", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE), fill="#ffffa4", pts="#78b400", main="structure", xlim=bb[1,], ylim=bb[2,]) JTSplot(gMakeValid(X, original=FALSE, keepCollapsed=TRUE), fill="#ffffa4", pts="#78b400", main="structure + keep collapsed", xlim=bb[1,], ylim=bb[2,]) par(opar) } if (run) { X <- readWKT(paste0("MULTIPOLYGON (((10 40, 40 40, 40 10, 10 10, 10 40), ", "(16 17, 31 32, 24 25, 16 17)), ((50 40, 50 40, 50 40, 50 40, 50 40)))", sep="")) bb <- bbox(X) opar <- par(mfrow=c(2,2)) JTSplot(X, fill="#dfdfff", pts="#00007c", main="input", xlim=bb[1,], ylim=bb[2,]) Sys.setenv("GEOS_MAKE_VALID"="LINEWORK") JTSplot(gMakeValid(X), fill="#ffffa4", pts="#78b400", main="linework (env-var)", xlim=bb[1,], ylim=bb[2,]) Sys.setenv("GEOS_MAKE_VALID"="STRUCTURE") Sys.setenv("GEOS_MAKE_VALID_KEEPCOLLAPSED"="FALSE") JTSplot(gMakeValid(X), fill="#ffffa4", pts="#78b400", main="structure (env-vars)", xlim=bb[1,], ylim=bb[2,]) Sys.setenv("GEOS_MAKE_VALID_KEEPCOLLAPSED"="TRUE") JTSplot(gMakeValid(X), fill="#ffffa4", pts="#78b400", main="structure + keep collapsed (env-vars)", xlim=bb[1,], ylim=bb[2,]) par(opar) Sys.unsetenv("GEOS_MAKE_VALID") Sys.unsetenv("GEOS_MAKE_VALID_KEEPCOLLAPSED") } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/class-SpatialRings.Rd0000644000176200001440000000402014025150745016135 0ustar liggesusers\name{SpatialRings-class} \docType{class} \alias{SpatialRings-class} \alias{[,SpatialRings-method} \alias{plot,SpatialRings,missing-method} \alias{coordinates,SpatialRings-method} \alias{coordnames,SpatialRings-method} \alias{coordnames<-,SpatialRings,character-method} \alias{row.names,SpatialRings-method} \alias{row.names<-,SpatialRings,character-method} \alias{spChFIDs,SpatialRings,character-method} \alias{coerce,SpatialRings,SpatialPoints-method} \title{Class "SpatialRings"} \description{ class to hold linear ring topology (without attributes) } \section{Objects from the Class}{ Objects can be created by calls to the function \link{SpatialRings} } \section{Slots}{ \describe{ \item{\code{rings}:}{Object of class \code{"list"}; list elements are all of class \link{Ring-class}} \item{\code{bbox}:}{Object of class \code{"matrix"}; see \link{Spatial-class} } \item{\code{proj4string}:}{Object of class \code{"CRS"}; see \link{CRS-class}} } } \section{Extends}{ Class \code{"Spatial"}, directly. } \section{Methods}{ Methods defined with class "SpatialRings" in the signature: \describe{ \item{[}{\code{signature(obj = "SpatialRings")}: select subset of (sets of) rings; NAs are not permitted in the row index} \item{plot}{\code{signature(x = "SpatialRings", y = "missing")}: plot rings in SpatialRings object} \item{bbox}{\code{signature(obj = "SpatialRings")}: retrieves the bbox element } \item{coordinates}{\code{signature(object = "SpatialRings")}: retrieves the coords element from Ring objects in rings slot} \item{coordnames}{\code{signature(object = "SpatialRings")}: retrieves coordinate names} \item{row.names}{\code{signature(object = "SpatialRings")}: retrieves the ID element from Ring objects in rings slot} \item{spChFIDs}{\code{signature(obj="SpatialRings", x="character")}: replaces ID element} \item{coerce}{\code{signature(from = "SpatialRings", to = "SpatialPoints")}: ... } } } \author{ Colin Rundel } \seealso{ \link{SpatialRings} \link{Ring-class} } \examples{ #NONE } \keyword{classes} rgeos/man/pred-binary-gEquals.Rd0000644000176200001440000000647614025150745016266 0ustar liggesusers\name{gEquals} \alias{gEquals} \alias{RGEOSEquals} \alias{gEqualsExact} \alias{RGEOSEqualsExact} \title{Geometry Relationships - Equality} \description{Function for testing equivalence of the given geometries} \usage{ gEquals(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) gEqualsExact(spgeom1, spgeom2 = NULL, tol=0.0, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{tol}{Numerical value of tolerance to use when assessing equivalence} \item{returnDense}{default TRUE, if false returns a list of the length of spgeom1 of integer vectors listing the \code{1:length(spgeom2)} indices which would be TRUE in the dense logical matrix representation; useful when the sizes of the byid=TRUE returned matrix is very large and it is sparse; essential when the returned matrix would be too large} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} } \value{\code{gEquals} returns TRUE if geometries are "spatially equivalent" which requires that \code{spgeom1} is within \code{spgeom2} and \code{spgeom2} is within \code{spgeom1}, this ignores ordering of points within the geometries. Note that it is possible for geometries with different coordinates to be "spatially equivalent". \code{gEqualsExact} returns TRUE if geometries are "exactly equivalent" which requires that \code{spgeom1} and \code{spgeom1} are "spatially equivalent" and that their constituent points are in the same order. } \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gContains}} \code{\link{gContainsProperly}} \code{\link{gCovers}} \code{\link{gCoveredBy}} \code{\link{gCrosses}} \code{\link{gDisjoint}} \code{\link{gEqualsExact}} \code{\link{gIntersects}} \code{\link{gOverlaps}} \code{\link{gRelate}} \code{\link{gTouches}} \code{\link{gWithin}} } \examples{ # p1 and p2 are spatially identical but not exactly identical due to point ordering p1=readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))") p2=readWKT("POLYGON((1 1,0 1,0 0,1 0,1 1))") p3=readWKT("POLYGON((0.01 0.01,1.01 0.01,1.01 1.01,0.01 1.01,0.01 0.01))") gEquals(p1,p2) gEquals(p1,p3) gEqualsExact(p1,p2) gEqualsExact(p1,p3,tol=0) gEqualsExact(p1,p3,tol=0.1) # pt1 and p2t are spatially identical but not exactly identical due to point ordering pt1 = readWKT("MULTIPOINT(1 1,2 2,3 3)") pt2 = readWKT("MULTIPOINT(3 3,2 2,1 1)") pt3 = readWKT("MULTIPOINT(1.01 1.01,2.01 2.01,3.01 3.01)") gEquals(pt1,pt2) gEquals(pt1,pt3) gEqualsExact(pt1,pt2) gEqualsExact(pt1,pt3,tol=0) gEqualsExact(pt1,pt3,tol=0.1) # l2 contains a point that l1 does not l1 = readWKT("LINESTRING (10 10, 20 20)") l2 = readWKT("LINESTRING (10 10, 15 15,20 20)") gEquals(l1,l2) gEqualsExact(l1,l2) } \keyword{spatial} rgeos/man/gpc-new-generics.Rd0000644000176200001440000000546514025150745015605 0ustar liggesusers\name{new-generics} \alias{new-generics} \alias{append.poly} \alias{append.poly-methods} %\alias{append.poly,gpc.poly,gpc.poly-method} \alias{get.bbox} \alias{get.bbox-methods} %\alias{get.bbox,gpc.poly-method} \alias{area.poly} \alias{area.poly-methods} %\alias{area.poly,gpc.poly-method} \alias{get.pts} \alias{get.pts-methods} %\alias{get.pts,gpc.poly-method} \alias{scale.poly} \alias{scale.poly-methods} %\alias{scale.poly,gpc.poly-method} %\alias{[-methods} %\alias{[,gpc.poly-method} \alias{tristrip} \alias{tristrip-methods} \alias{triangulate} \alias{triangulate-methods} \alias{symdiff} \title{Generics/Methods for polygon objects} \description{ Some generic functions and methods for polygon objects } \usage{ append.poly(x, y) area.poly(object, \dots) get.pts(object) get.bbox(x) scale.poly(x, \dots) tristrip(x) triangulate(x) } \arguments{ \item{x,object}{A polygon object} \item{y}{A polygon object} \item{\dots}{Other arguments passed to methods} } \section{Methods}{ \describe{ \item{append.poly}{\code{signature(x = "gpc.poly", y = "gpc.poly")}: Combine all contours of two \code{"gpc.poly"} objects and return the combined polygon as a \code{"gpc.poly"} object.} \item{area.poly}{\code{signature(object = "gpc.poly")}: Compute and return the sum of the areas of all contours in a \code{"gpc.poly"} object.} \item{scale.poly}{\code{signature(x = "gpc.poly")}: Scale (divide) the x and y coordinates of a \code{"gpc.poly"} object by the amount \code{xscale} and \code{yscale}, respectively. Return a scaled \code{"gpc.poly"} object.} \item{get.pts}{\code{signature(object = "gpc.poly")}: Return the list of x and y coordinates of the vertices of a \code{"gpc.poly"} object.} \item{get.bbox}{\code{signature(x = "gpc.poly")}: Return the bounding box for a \code{"gpc.poly"} object.} \item{tristrip}{\code{signature(x = "gpc.poly")}: Return a tristrip list for a \code{"gpc.poly"} object.} \item{triangulate}{\code{signature(x = "gpc.poly")}: Return a matrix of vertices of a triangulation of a \code{"gpc.poly"} object.} } } \details{ The result of \code{tristrip(x)} is a list of two-column matrices. Each matrix is a tristrip, i.e. the rows are vertices of triangles, with each overlapping triple of rows corresponding to a separate triangle. The result of \code{triangulate(x)} is a single two-column matrix. The rows are vertices of triangles, taken in non-overlapping triples. } \author{Roger D. Peng; GPC Library by Alan Murta; tristrip additions by Duncan Murdoch} \seealso{\code{"gpc.poly"} class documentation.} \examples{ holepoly <- read.polyfile(system.file("poly-ex-gpc/hole-poly.txt", package ="rgeos"), nohole = FALSE) area.poly(holepoly) stopifnot(area.poly(holepoly) == 8) } \keyword{methods} rgeos/man/pred-binary-gCrosses.Rd0000644000176200001440000000645614025150745016453 0ustar liggesusers\name{gCrosses} \alias{gCrosses} \alias{RGEOSCrosses} \alias{gOverlaps} \alias{RGEOSOverlaps} \title{Geometry Relationships - Crosses and Overlaps} \description{Functions for testing whether geometries share some but not all interior points} \usage{ gCrosses(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) gOverlaps(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) } \arguments{ \item{spgeom1, spgeom2}{sp objects as defined in package sp. If spgeom2 is NULL then spgeom1 is compared to itself.} \item{byid}{Logical vector determining if the function should be applied across ids (TRUE) or the entire object (FALSE) for spgeom1 and spgeom2} \item{returnDense}{default TRUE, if false returns a list of the length of spgeom1 of integer vectors listing the \code{1:length(spgeom2)} indices which would be TRUE in the dense logical matrix representation; useful when the sizes of the byid=TRUE returned matrix is very large and it is sparse; essential when the returned matrix would be too large} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} } \value{\code{gCrosses} returns TRUE when the geometries share some but not all interior points, and the dimension of the intersection is less than that of at least one of the geometries. \code{gOverlaps} returns TRUE when the geometries share some but not all interior points, and the intersection has the same dimension as the geometries themselves. } \note{Error messages from GEOS, in particular topology exceptions, report 0-based object order, so geom 0 is spgeom1, and geom 1 is spgeom2.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gContains}} \code{\link{gContainsProperly}} \code{\link{gCovers}} \code{\link{gCoveredBy}} \code{\link{gDisjoint}} \code{\link{gEquals}} \code{\link{gEqualsExact}} \code{\link{gIntersects}} \code{\link{gRelate}} \code{\link{gTouches}} \code{\link{gWithin}} } \examples{ l1 = readWKT("LINESTRING(0 3,1 1,2 2,3 0)") l2 = readWKT("LINESTRING(0 0.5,1 1,2 2,3 2.5)") l3 = readWKT("LINESTRING(1 3,1.5 1,2.5 2)") pt1 = readWKT("MULTIPOINT(1 1,3 0)") pt2 = readWKT("MULTIPOINT(1 1,3 0,1 2)") p1 = readWKT("POLYGON((0 0,0 2,1 3.5,3 3,4 1,3 0,0 0))") p2 = readWKT("POLYGON((2 2,3 4,4 1,4 0,2 2))") par(mfrow=c(2,3)) plot(l1,col='blue');plot(pt1,add=TRUE,pch=16) title(paste("Crosses:",gCrosses(l1,pt1), "\nOverlaps:",gOverlaps(l1,pt1))) plot(l1,col='blue');plot(pt2,add=TRUE,pch=16) title(paste("Crosses:",gCrosses(l1,pt2), "\nOverlaps:",gOverlaps(l1,pt2))) plot(l1,col='blue');plot(l2,add=TRUE) title(paste("Crosses:",gCrosses(l1,l2), "\nOverlaps:",gOverlaps(l1,l2))) plot(l1,col='blue');plot(l3,add=TRUE) title(paste("Crosses:",gCrosses(l1,l3), "\nOverlaps:",gOverlaps(l1,l3))) plot(p1,border='blue',col='blue');plot(l1,add=TRUE) title(paste("Crosses:",gCrosses(p1,l1), "\nOverlaps:",gOverlaps(p1,l1))) plot(p1,border='blue',col='blue');plot(p2,add=TRUE) title(paste("Crosses:",gCrosses(p1,p2), "\nOverlaps:",gOverlaps(p1,p2))) } \keyword{spatial} rgeos/man/gpc-polyfile.Rd0000644000176200001440000000437014025150745015034 0ustar liggesusers\name{polyfile} \alias{polyfile} \alias{read.polyfile} \alias{write.polyfile} \title{Read/Write polygon data} \description{ Read/Write polygon and contour information from/to a text file. } \usage{ read.polyfile(filename, nohole = TRUE) write.polyfile(poly, filename = "GPCpoly.txt") } \arguments{ \item{filename}{the name of the file (a character string) from/to which data should be read/written.} \item{nohole}{Is this a polygon without holes?} \item{poly}{an object of class \code{"gpc.poly"}} } \details{ The text file representation of a polygon is of the following format: \cr \cr x1 y1\cr x2 y2\cr ...\cr \cr x1 y1\cr x2 y2\cr ...\cr For example, a data file for a polygon with 2 contours (a four-sided object and a triangle) might look like: 2\cr 4\cr 1.0 1.0\cr 1.0 2.0\cr 3.4 3.21\cr 10 11.2\cr 3\cr 21.0 11.2\cr 22.3 99.2\cr 4.5 5.4\cr The vertices of the polygon can be ordered either clockwise or counter-clockwise. If a polygon has contours which are holes, then the format is slightly different. Basically, a flag is set to indicate that a particular contour is a hole. The format is \cr \cr \cr x1 y1\cr x2 y2\cr ...\cr \cr \cr x1 y1\cr x2 y2\cr ...\cr The hole flag is either 1 to indicate a hole, or 0 for a regular contour. For example, a four-sided polygon with a triangular hole would be written as: 2\cr 3\cr 1\cr 4.0 4.0\cr 6.0 5.0\cr 5.0 6.0\cr 4\cr 0\cr 2.0 1.0\cr 8.0 2.0\cr 7.0 9.0\cr 1.0 7.0\cr } \value{ If \code{nohole} is \code{TRUE} (the default) \code{read.polyfile} returns an object of class \code{"gpc.poly.nohole"}. This object has the hole flag set to \code{FALSE} for all contours. If \code{nohole} is \code{FALSE}, then an object of class \code{"gpc.poly"} is returned. \code{write.polyfile} does not return anything useful. } \author{Roger D. Peng} \seealso{ \code{\link{gpc.poly-class}}, \code{\link{gpc.poly.nohole-class}} } \examples{ ## None right now. } \keyword{IO} rgeos/man/topo-unary-gBoundary.Rd0000644000176200001440000000544314025150745016511 0ustar liggesusers\name{gBoundary} \alias{gBoundary} \alias{RGEOSBoundary} \title{Boundary of Geometry} \description{Function for determinging the Boundary of the given geometry as defined by SFS Section 2.1.13.1} \usage{ gBoundary(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \value{Depending of the class of the spgeom the returned results will differ. Based on the documentation of JTS (on which GEOS is based) the following outputs are expected: \tabular{ll}{ Point \tab empty GeometryCollection \cr MultiPoint \tab empty GeometryCollection \cr LineString \tab if closed: empty MultiPoint if not closed: MultiPoint containing the two endpoints. \cr MultiLineString \tab MultiPoint obtained by applying the Mod-2 rule to the boundaries of the element LineStrings \cr LinearRing \tab empty MultiPoint \cr Polygon \tab MultiLineString containing the LinearRings of the shell and holes, in that order (SFS 2.1.10) \cr MultiPolygon \tab MultiLineString containing the LinearRings for the boundaries of the element polygons, in the same order as they occur in the MultiPolygon (SFS 2.1.12/JTS) \cr GeometryCollection \tab The boundary of an arbitrary collection of geometries whose interiors are disjoint consist of geometries drawn from the boundaries of the element geometries by application of the Mod-2 rule (SFS Section 2.1.13.1)\cr } The mod-2 rule states that for a multiline a point is on the boundary if and only if it on the boundary of an odd number of subgeometries of the multiline (See example below). } \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gCentroid}} \code{\link{gConvexHull}} \code{\link{gEnvelope}} \code{\link{gPointOnSurface}} } \examples{ x = readWKT("POLYGON((0 0,10 0,10 10,0 10,0 0))") b = gBoundary(x) plot(x,col='black') plot(b,col='red',lwd=3,add=TRUE) # mod-2 rule example x1 = readWKT("MULTILINESTRING((2 2,2 0),(2 2,0 2))") x2 = readWKT("MULTILINESTRING((2 2,2 0),(2 2,0 2),(2 2,4 2))") x3 = readWKT("MULTILINESTRING((2 2,2 0),(2 2,0 2),(2 2,4 2),(2 2,2 4))") x4 = readWKT("MULTILINESTRING((2 2,2 0),(2 2,0 2),(2 2,4 2),(2 2,2 4),(2 2,4 4))") b1 = gBoundary(x1) b2 = gBoundary(x2) b3 = gBoundary(x3) b4 = gBoundary(x4) par(mfrow=c(2,2)) plot(x1); plot(b1,pch=16,col='red',add=TRUE) plot(x2); plot(b2,pch=16,col='red',add=TRUE) plot(x3); plot(b3,pch=16,col='red',add=TRUE) plot(x4); plot(b4,pch=16,col='red',add=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/topo-unary-gEnvelope.Rd0000644000176200001440000000300214025150745016470 0ustar liggesusers\name{gEnvelope} \alias{gEnvelope} \alias{RGEOSEnvelope} \title{Envelope of Geometry} \description{Function calculates the rectangular bounding box for the given geometry} \usage{ gEnvelope(spgeom, byid=FALSE, id = NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} } \details{Returns the rectangular bounding box as a SpatialPolygons object. If spgeom is a degenerate case (horizontal/vertical line, single point) then the function may return an object with lower dimension (SpatialLines or SpatialPoints) or an invalid polygon.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gBoundary}} \code{\link{gCentroid}} \code{\link{gConvexHull}} \code{\link{gPointOnSurface}} } \examples{ x = readWKT(paste("POLYGON((0 40,10 50,0 60,40 60,40 100,50 90,60 100,60", "60,100 60,90 50,100 40,60 40,60 0,50 10,40 0,40 40,0 40))")) env = gEnvelope(x) plot(x,col='blue',border='blue') plot(env,add=TRUE) #Degenerate Cases gEnvelope(readWKT("POINT(1 1)")) #returns SpatialPoints gEnvelope(readWKT("LINESTRING(1 1,1 2)")) #invalid polygon gEnvelope(readWKT("LINESTRING(1 1,2 1)")) #invalid polygon } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/pred-unary-gIsRing.Rd0000644000176200001440000000264114025150745016067 0ustar liggesusers\name{gIsRing} \alias{gIsRing} \alias{RGEOSisRing} \title{Is Geometry a Ring?} \description{Tests if the given geometry is a ring} \usage{ gIsRing(spgeom, byid = FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} } \value{Returns TRUE if the geometry is a LINEARRING. Returns TRUE if the geometry is a LINESTRING that is both Simple (\link{gIsSimple}) and Closed (end points intersect), FALSE otherwise. Returns FALSE if the geometry is a [MULTI]POINT, MULTILINESTRING, or [MULTI]POLYGON.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gIsEmpty}} \code{\link{gIsSimple}} \code{\link{gIsValid}} } \examples{ l1 = readWKT("LINESTRING(0 0, 1 1, 1 0, 0 1, 0 0)") l2 = readWKT("LINESTRING(0 0,1 0,1 1,0 1,0 0)") r1 = readWKT("LINEARRING(0 0, 1 1, 1 0, 0 1, 0 0)") r2 = readWKT("LINEARRING(0 0,1 0,1 1,0 1,0 0)") p1 = readWKT("POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))") p2 = readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))") par(mfrow=c(3,2)) plot(l1);title(paste("LINESTRING\nRing:",gIsRing(l1))) plot(l2);title(paste("LINESTRING\nRing:",gIsRing(l2))) plot(r1);title(paste("LINEARRING\nRing:",gIsRing(r1))) plot(r2);title(paste("LINEARRING\nRing:",gIsRing(r2))) plot(p1);title(paste("POLYGON\nRing:",gIsRing(p1))) plot(p2);title(paste("POLYGON\nRing:",gIsRing(p2))) } \keyword{spatial} rgeos/man/pred-unary-gIsEmpty.Rd0000644000176200001440000000174014025150745016265 0ustar liggesusers\name{gIsEmpty} \alias{gIsEmpty} \alias{RGEOSisEmpty} \title{Is Geometry Empty?} \description{Tests if the given geometry is empty} \usage{ gIsEmpty(spgeom, byid = FALSE) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} } \details{Because no sp Spatial object may be empty, the function exists but cannot work, as \code{readWKT} is not permitted to create an empty object.} \value{Returns TRUE if the given geometry is empty, FALSE otherwise.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gIsRing}} \code{\link{gIsSimple}} \code{\link{gIsValid}} } \examples{ try(gIsEmpty(readWKT("POINT EMPTY"))) gIsEmpty(readWKT("POINT(1 1)")) try(gIsEmpty(readWKT("LINESTRING EMPTY"))) gIsEmpty(readWKT("LINESTRING(0 0,1 1)")) try(gIsEmpty(readWKT("POLYGON EMPTY"))) gIsEmpty(readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))")) } \keyword{spatial} rgeos/man/comment-functions.Rd0000644000176200001440000001726014025150745016114 0ustar liggesusers\name{RGEOS Polygon Hole Comment Functions} \alias{createSPComment} \alias{createPolygonsComment} \alias{get_do_poly_check} \alias{set_do_poly_check} \title{RGEOS Polygon Hole Comment Functions} \description{Utility functions for assigning ownership of holes to parent polygons} \usage{ createSPComment(sppoly,which=NULL,overwrite=TRUE) createPolygonsComment(poly) set_do_poly_check(value) get_do_poly_check() } \arguments{ \item{sppoly}{Object that inherits from the \code{SpatialPolygons} class} \item{which}{Vector, which subset of geometries in sppoly should comment attributes be generated} \item{overwrite}{Logical, if a comment attribute already exists should it be overwritten} \item{poly}{Object of class \code{Polygons}} \item{value}{logical value to set \dQuote{do_poly_check} option, default TRUE} } \section{Warning: check polygons}{ The helper functions get and set the imposition of checking of objects inheriting from \code{SpatialPolygons} for proper assignment of hole \emph{interior rings} to \emph{exterior rings} in \code{Polygons} objects. The internal GEOS representation defines a POLYGON object as a collection of only one exterior ring and from zero to many interior rings, so an \pkg{sp} \code{Polygons} object corresponds to a GEOS MULTIPOLYGON object, but without proper hole assignment. By default \code{do_poly_check} is TRUE; if it is set to FALSE using \code{set_do_poly_check(FALSE)}, and the \code{Polygons} object is not valid in GEOS terms, GEOS may crash R, which is why checks are imposed by default. The details below show how hole assignment is handled in the package; here we assume that the hole status slots of all Polygon objects in a given Polygons object are set correctly. In the examples below, we use a data set from \pkg{maptools} which has the holes correctly assigned, and we see that the SpatialPolygons object is geometrically valid both initially and after removing the comment attribute on the only Polygons object in \code{usa} - regenerating internally within \pkg{rgeos} from the hole status slots since \code{do_poly_check} is TRUE. If we modify \code{usa} by setting all hole status slots to FALSE, the SpatialPolygons object is geometrically invalid even though a comment attribute can be created - the function \code{createSPComment} is deceived by the incorrect hole status slots. To rectify this, we use \code{\link[maptools]{checkPolygonsHoles}} from \pkg{maptools} on each \code{Polygons} object. This function calls \code{\link{gContains}}, \code{\link{gContainsProperly}}, \code{\link{gEquals}} and \code{\link{createPolygonsComment}} from \pkg{rgeos} to check whether the hole status slots are set correctly. Experience shows that many imported datasets from for example publically provided shapefiles have incorrect hole status values. Running \code{checkPolygonsHoles} is time-consuming when the number of member \code{Polygon} objects is large - attempts will be made to make this more efficient. } \section{Warning: planar geometries}{ The geometries handled by GEOS are assumed to be planar, so that any \pkg{rgeos} functions making measurements will give incorrect results when used on geographical coordinates measured in decimal degrees. Topological functions may work satisfactorily, but will not understand spherical wrap-around. } \details{In order for rgeos to function properly it is necessary that all holes within a given POLYGON or MULTIPOLYGON geometry must belong to a specific polygon. The \code{SpatialPolygons} class implementation does not currently include this information. To work around this limitation rgeos uses an additional comment attribute on the \code{Polygons} class that indicates which hole belongs to which polygon. Under the current implementation this comment is a text string of numbers separated by spaces where the order of the numbers corresponds to the order of the \code{Polygon} objects in the \code{Polygons} slot of the \code{Polygons} object. A \code{0} implies the \code{Polygon} object is a polygon, a non-zero number implies that the \code{Polygon} object is a hole with the value indicating the index of the \code{Polygon} that \dQuote{owns} the hole. \code{createPolygonsComment} attempts to create a valid comment for a \code{Polygons} object by assessing which polygons contain a given hole (using \code{\link{gContains}}). Ownership is assigned to the smallest polygon (by area) that contains the given hole. This is not guaranteed to generate valid polygons, always check the resulting objects for validity. \code{createSPComment} attempts to create valid comments for all or a subset of polygons within a \code{SpatialPolygons} object. Refer to Bivand et al. (2013), pages 47-48 and 132-133 for a further discussion and \code{\link[sp]{SpatialPolygons}} } \author{Roger Bivand & Colin Rundel} \references{Roger Bivand, Edzer Pebesma and Virgilio Gomez-Rubio, 2013. Applied spatial data analysis with R, Second edition. Springer, NY. \url{https://asdar-book.org/}} \examples{ library(sp) p1 <- Polygon(cbind(x=c(0, 0, 10, 10, 0), y=c(0, 10, 10, 0, 0)), hole=FALSE) # I p2 <- Polygon(cbind(x=c(3, 3, 7, 7, 3), y=c(3, 7, 7, 3, 3)), hole=TRUE) # H p8 <- Polygon(cbind(x=c(1, 1, 2, 2, 1), y=c(1, 2, 2, 1, 1)), hole=TRUE) # H p9 <- Polygon(cbind(x=c(1, 1, 2, 2, 1), y=c(5, 6, 6, 5, 5)), hole=TRUE) # H p3 <- Polygon(cbind(x=c(20, 20, 30, 30, 20), y=c(20, 30, 30, 20, 20)), hole=FALSE) # I p4 <- Polygon(cbind(x=c(21, 21, 29, 29, 21), y=c(21, 29, 29, 21, 21)), hole=TRUE) # H p5 <- Polygon(cbind(x=c(22, 22, 28, 28, 22), y=c(22, 28, 28, 22, 22)), hole=FALSE) # I p6 <- Polygon(cbind(x=c(23, 23, 27, 27, 23), y=c(23, 27, 27, 23, 23)), hole=TRUE) # H p7 <- Polygon(cbind(x=c(13, 13, 17, 17, 13), y=c(13, 17, 17, 13, 13)), hole=FALSE) # I p10 <- Polygon(cbind(x=c(24, 24, 26, 26, 24), y=c(24, 26, 26, 24, 24)), hole=FALSE) # I p11 <- Polygon(cbind(x=c(24.25, 24.25, 25.75, 25.75, 24.25), y=c(24.25, 25.75, 25.75, 24.25, 24.25)), hole=TRUE) # H p12 <- Polygon(cbind(x=c(24.5, 24.5, 25.5, 25.5, 24.5), y=c(24.5, 25.5, 25.5, 24.5, 24.5)), hole=FALSE) # I p13 <- Polygon(cbind(x=c(24.75, 24.75, 25.25, 25.25, 24.75), y=c(24.75, 25.25, 25.25, 24.75, 24.75)), hole=TRUE) # H lp <- list(p1, p2, p13, p7, p6, p5, p4, p3, p8, p11, p12, p9, p10) # 1 2 3 4 5 6 7 8 9 10 11 12 13 # 0 1 11 0 6 0 8 0 1 13 0 1 0 # I H H I H I H I H H I H I pls <- Polygons(lp, ID="1") comment(pls) comment(pls) = createPolygonsComment(pls) comment(pls) plot(SpatialPolygons(list(pls)), col="magenta", pbg="cyan") title(xlab="Hole slot values before checking") \dontrun{ # running this illustration may be time-consuming if (require(maptools)) { data(wrld_simpl) usa <- wrld_simpl[wrld_simpl$ISO3=="USA",] lapply(slot(usa, "polygons"), comment) gIsValid(usa, reason=TRUE) comment(slot(usa, "polygons")[[1]]) <- NULL lapply(slot(usa, "polygons"), comment) gIsValid(usa) any(c(sapply(slot(usa, "polygons"), function(x) sapply(slot(x, "Polygons"), slot, "hole")))) lapply(slot(createSPComment(usa), "polygons"), comment) usa1 <- usa Pls <- slot(usa1, "polygons") pls <- slot(Pls[[1]], "Polygons") pls1 <- lapply(pls, function(p) {slot(p, "hole") <- FALSE; return(p)}) slot(Pls[[1]], "Polygons") <- pls1 slot(usa1, "polygons") <- Pls any(c(sapply(slot(usa1, "polygons"), function(x) sapply(slot(x, "Polygons"), slot, "hole")))) lapply(slot(createSPComment(usa1), "polygons"), comment) gIsValid(usa1, reason=TRUE) Pls <- slot(usa1, "polygons") Pls1 <- lapply(Pls, checkPolygonsHoles) slot(usa1, "polygons") <- Pls1 lapply(slot(usa1, "polygons"), comment) gIsValid(usa1, reason=TRUE) } } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/class-Ring.Rd0000644000176200001440000000221714025150745014442 0ustar liggesusers\name{Ring-class} \docType{class} \alias{Ring-class} \alias{bbox,Ring-method} \alias{coordinates,Ring-method} \alias{coordnames,Ring-method} \alias{coordnames<-,Ring,character-method} \alias{coerce,Ring,SpatialPoints-method} \title{Class "Ring"} \description{ class for linear ring } \section{Objects from the Class}{ Objects can be created by calls to the function \link{Ring} } \section{Slots}{ \describe{ \item{\code{coords}:}{Object of class \code{"matrix"}; coordinates of the ring; first point should equal the last point } \item{\code{ID}:}{Object of class \code{"character"}; unique identifier string } } } \section{Methods}{ Methods defined with class "Ring" in the signature: \describe{ \item{bbox}{\code{signature(obj = "Ring")}: retrieves the bbox element } \item{coordinates}{\code{signature(object = "Ring")}: retrieves the coords element from Ring objects in rings slot} \item{coordnames}{\code{signature(object = "Ring")}: retrieves coordinate names} \item{coerce}{\code{signature(from = "Ring", to = "SpatialPoints")}: ... } } } \author{ Colin Rundel } \seealso{ \link{Ring} } \examples{ #NONE } \keyword{classes} rgeos/man/class-SpatialRingsDataFrame.Rd0000644000176200001440000000606014025150745017710 0ustar liggesusers\name{SpatialRingsDataFrame-class} \docType{class} \alias{SpatialRingsDataFrame-class} \alias{[,SpatialRingsDataFrame-method} \alias{plot,SpatialRingsDataFrame-method} \alias{bbox,SpatialRingsDataFrame-method} \alias{coordinates,SpatialRingsDataFrame-method} \alias{coordnames,SpatialRingsDataFrame-method} \alias{coordnames<-,SpatialRingsDataFrame,character-method} \alias{row.names,SpatialRingsDataFrame-method} \alias{row.names<-,SpatialRingsDataFrame,character-method} \alias{names,SpatialRingsDataFrame-method} \alias{names<-,SpatialRingsDataFrame,character-method} \alias{dim,SpatialRingsDataFrame-method} \alias{spChFIDs,SpatialRingsDataFrame,character-method} \alias{coerce,SpatialRingsDataFrame,SpatialPoints-method} \alias{coerce,SpatialRingsDataFrame,SpatialRings-method} \alias{coerce,SpatialRingsDataFrame,data.frame-method} \title{Class "SpatialRingsDataFrame"} \description{ class to hold linear ring topology (without attributes) } \section{Objects from the Class}{ Objects can be created by calls to the function \link{SpatialRingsDataFrame} } \section{Slots}{ \describe{ \item{\code{data}:}{Object of class \code{"data.frame"}; attribute table } \item{\code{rings}:}{Object of class \code{"list"}; list elements are all of class \link{Ring-class}} \item{\code{bbox}:}{Object of class \code{"matrix"}; see \link{Spatial-class} } \item{\code{proj4string}:}{Object of class \code{"CRS"}; see \link{CRS-class}} } } \section{Extends}{ Class \code{"SpatialRings"}, directly. Class \code{"Spatial"}, by class \code{"SpatialRings"}. } \section{Methods}{ Methods defined with class "SpatialRingsDataFrame" in the signature: \describe{ \item{[}{\code{signature(obj = "SpatialRingsDataFrame")}: select subset of (sets of) rings; NAs are not permitted in the row index} \item{plot}{\code{signature(x = "SpatialRingsDataFrame", y = "missing")}: plot rings in SpatialRingsDataFrame object} \item{bbox}{\code{signature(obj = "SpatialRingsDataFrame")}: retrieves the bbox element } \item{coordinates}{\code{signature(object = "SpatialRingsDataFrame")}: retrieves the coords element from Ring objects in rings slot} \item{coordnames}{\code{signature(object = "SpatialRingsDataFrame")}: retrieves coordinate names} \item{row.names}{\code{signature(object = "SpatialRingsDataFrame")}: retrieves the ID element from Ring objects in rings slot} \item{spChFIDs}{\code{signature(obj="SpatialRingsDataFrame", x="character")}: replaces ID element} \item{names}{\code{signature(object = "SpatialRingsDataFrame")}: retrieves names from data element} \item{dim}{\code{signature(object = "SpatialRingsDataFrame")}: retrieves dimensions of data element} \item{coerce}{\code{signature(from = "SpatialRingsDataFrame", to = "SpatialPoints")}: ... } \item{coerce}{\code{signature(from = "SpatialRingsDataFrame", to = "SpatialRings")}: ... } \item{coerce}{\code{signature(from = "SpatialRingsDataFrame", to = "data.frame")}: ... } } } \author{ Colin Rundel } \seealso{ \link{SpatialRingsDataFrame} \link{Ring-class} \link{SpatialRings-class} } \examples{ #NONE } \keyword{classes} rgeos/man/linref-gInterpolate.Rd0000644000176200001440000000140414025150745016347 0ustar liggesusers\name{gInterpolate} \alias{gInterpolate} \title{Interpolate Points along Line Geometry} \usage{ gInterpolate(spgeom, d, normalized = FALSE) } \arguments{ \item{spgeom}{SpatialLines or SpatialLinesDataFrame object} \item{d}{Numeric vector specifying the distance along the line geometry} \item{normalized}{Logical determining if normalized distances should be used} } \value{ SpatialPoints object } \description{ Return points at specified distances along a line. } \details{ If \code{normalized=TRUE}, the distances will be interpreted as fractions of the line length. } \examples{ gInterpolate(readWKT("LINESTRING(25 50, 100 125, 150 190)"), d=seq(0, 1, by = 0.2), normalized = TRUE) } \seealso{ gInterpolate } \author{ Rainer Stuetz } \keyword{spatial} rgeos/man/topo-unary-gPolygonize.Rd0000644000176200001440000000605114025150745017061 0ustar liggesusers\name{gPolygonize} \alias{gPolygonize} \title{Linestring Polygonizer} \description{Function attempts to polygonize the given list of linestrings. If the linestrings are not noded (coordinates inserted at intersection points), the function may fail. \code{\link{gNode}} may be tried to insert such missing points} \usage{ gPolygonize( splist, getCutEdges=FALSE); } \arguments{ \item{splist}{a list of sp SpatialLines objects} \item{getCutEdges}{Logical vector indicating if cut edges should be returned} } \value{By default returns polygons generated by polygonizing the given linestrings. If \code{getCutEdges} is TRUE then any cut edges are returned.} \details{Polygonization is the process of forming polygons from linestrings which enclose an area. Linestrings are expected to be fully noded, as such they must not cross and must touch only at endpoints. \code{gPolygonize} takes a list of fully noded linestrings and forms all the polygons which are enclosed by the lines. Polygonization errors such as dangling lines or cut lines can be identified and reported.} \author{Roger Bivand & Colin Rundel} \seealso{\code{\link{gNode}}} \examples{ library(sp) linelist = list(readWKT("LINESTRING (0 0 , 10 10)"), readWKT("LINESTRING (185 221, 100 100)"), readWKT("LINESTRING (185 221, 88 275, 180 316)"), readWKT("LINESTRING (185 221, 292 281, 180 316)"), readWKT("LINESTRING (189 98, 83 187, 185 221)"), readWKT("LINESTRING (189 98, 325 168, 185 221)")) par(mfrow=c(1,2)) plot(linelist[[1]],xlim=c(0,350),ylim=c(0,350)) title("Linestrings with nodes") plot(as(linelist[[1]],"SpatialPoints"),pch=16,add=TRUE) for(i in 2:length(linelist)) { plot(linelist[[i]],add=TRUE) plot(as(linelist[[i]],"SpatialPoints"),pch=16,add=TRUE) } plot(gPolygonize(linelist),xlim=c(0,350),ylim=c(0,350)) title("Polygonized Results") gPolygonize(linelist,getCutEdges=TRUE) # no cut edges linelist2 = list(readWKT("LINESTRING(1 3, 3 3, 3 1, 1 1, 1 3)"), readWKT("LINESTRING(1 3, 3 3, 3 1, 1 1, 1 3)")) gPolygonize(linelist2,getCutEdges=FALSE) # NULL gPolygonize(linelist2,getCutEdges=TRUE) # Contains LineStrings # bug fix 130206 LS = list( readWKT("LINESTRING (425963 576719, 425980 576703)"), readWKT("LINESTRING (425963 576719, 425882 577073)"), readWKT("LINESTRING (425980 576703, 426082 577072)"), readWKT("LINESTRING (425882 577073, 426082 577072)"), readWKT("LINESTRING (426138 577068, 426082 577072)"), readWKT("LINESTRING (426138 577068, 426420 577039)"), readWKT("LINESTRING (426420 577039, 426554 576990)"), readWKT("LINESTRING (426751 576924, 426776 576823)"), readWKT("LINESTRING (426751 576924, 426783 576919)"), readWKT("LINESTRING (426751 576924, 426714 576953)"), readWKT("LINESTRING (426776 576823, 426783 576919)"), readWKT("LINESTRING (426658 576966, 426554 576990)"), readWKT("LINESTRING (426658 576966, 426667 577031)"), readWKT("LINESTRING (426658 576966, 426714 576953)"), readWKT("LINESTRING (426667 577031, 426714 576953)") ) plot(gPolygonize(LS)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/topo-unary-gMaximumInscribedCircle.Rd0000644000176200001440000000415614025150745021310 0ustar liggesusers\name{gMaximumInscribedCircle} \alias{gMaximumInscribedCircle} \title{Centroid of Geometry} \description{.} \usage{ gMaximumInscribedCircle(spgeom, byid=FALSE, id = NULL, tol=.Machine$double.eps^(1/2), checkValidity=NULL) } \arguments{ \item{spgeom}{sp object as defined in package sp} \item{byid}{Logical determining if the function should be applied across subgeometries (TRUE) or the entire object (FALSE)} \item{id}{Character vector defining id labels for the resulting geometries, if unspecified returned geometries will be labeled based on their parent geometries' labels.} \item{tol}{Numerical tolerance value} \item{checkValidity}{default FALSE; error meesages from GEOS do not say clearly which object fails if a topology exception is encountered. If this argument is TRUE, \code{gIsValid} is run on each in turn in an environment in which object names are available. If objects are invalid, this is reported and those affected are named} } \details{.} \author{Roger Bivand & Colin Rundel} \seealso{ \code{\link{gBoundary}} \code{\link{gConvexHull}} \code{\link{gEnvelope}} \code{\link{gPointOnSurface}} } \examples{ if (version_GEOS0() >= "3.9.0") { x = readWKT(paste("GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)),", "POLYGON((15 0,25 15,35 0,15 0)))")) # Maximum inscribed circles of both the square and circle independently c1 = gMaximumInscribedCircle(x, byid=TRUE) c1_sp <- as(c1, "SpatialPoints") # coercion of straight line segments to points c1_sp1 <- NULL if ((length(c1_sp) \%\% 2) == 0) c1_sp1 <- c1_sp[seq(1, length(c1_sp), 2)] if (!is.null(c1_sp1)) c1_circ <- gBuffer(c1_sp1, byid=TRUE, width=gLength(c1, byid=TRUE)) # Maximum inscribed circle of square and circle together, needs gUnaryUnion(), # inscribes circle in the component permitting the largest circle c2 = gMaximumInscribedCircle(gUnaryUnion(x)) opar <- par(mfrow=c(2,1)) plot(x) plot(c1, col='red', add=TRUE, lwd=2) if (!is.null(c1_sp1)) plot(c1_circ, border="red", add=TRUE) plot(x) plot(c2, col='blue', add=TRUE) par(opar) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/man/topo-unary-gNode.Rd0000644000176200001440000000436014025150745015610 0ustar liggesusers\name{gNode} \alias{gNode} \title{Linestring Noder} \description{Function attempts to node a linestring object, inserting coordinates at intersection points; only available for GEOS >= 3.4.0.} \usage{ gNode(spgeom); } \arguments{ \item{spgeom}{an sp object inheriting from SpatialLines} } \value{Returns a noded linestring object.} \details{Because \code{\link{gPolygonize}} expects linestrings to be fully noded, as such they must not cross and must touch only at endpoints. \code{gNodee} takes an object inheriting from \code{SpatialLines} and attempts to add omitted nodes. Issue reported by Nicola Farina 21 March 2014.} \author{Roger Bivand} \seealso{\code{\link{gPolygonize}}} \examples{ library(sp) pol1 <- readWKT(paste("POLYGON((39.936 43.446, 39.94 43.446, 39.94 43.45,", "39.936 43.45, 39.936 43.446))")) pol2 <- readWKT(paste("POLYGON((39.9417 43.45, 39.9395 43.4505,", "39.9385 43.4462, 39.9343 43.4452, 39.9331 43.4469, 39.9417 43.45))")) plot(pol2, axes=TRUE) plot(pol1, add=TRUE, border="blue") gIsValid(pol1) gIsValid(pol2) try(res <- gUnion(pol1, pol2)) if (version_GEOS0() > "3.4.0") { pol2a <- gPolygonize(gNode(as(pol2, "SpatialLines"))) try(res <- gUnion(pol1, pol2a)) plot(res, add=TRUE, border="red", lty=2, lwd=2) set.seed(1) # rw from Jim Holtman's R-help posting 2010-12-2 n <- 1000 rw <- matrix(0, ncol = 2, nrow = n) indx <- cbind(seq(n), sample(c(1, 2), n, TRUE)) rw[indx] <- sample(c(-1, 1), n, TRUE) rw[,1] <- cumsum(rw[, 1]) rw[, 2] <- cumsum(rw[, 2]) slrw <- SpatialLines(list(Lines(list(Line(rw)), "1"))) res0 <- gNode(slrw) print(length(slrw)) print(length(res0)) res <- gPolygonize(res0) print(summary(res)) print(length(res)) plot(res0, axes=TRUE) plot(res, add=TRUE, col=sample(rainbow(length(res)))) # library(spatstat) # set.seed(0) # X <- psp(runif(100), runif(100), runif(100), runif(100), window=owin()) # library(maptools) # sppsp <- as(X, "SpatialLines") # writeLines(writeWKT(sppsp, byid=FALSE), con="sppsp.wkt") sppsp <- readWKT(readLines(system.file("wkts/sppsp.wkt", package="rgeos"))) plot(sppsp, axes=TRUE) res0 <- gNode(sppsp) res <- gPolygonize(res0) plot(res, add=TRUE, col=sample(rainbow(length(res)))) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{spatial} rgeos/DESCRIPTION0000644000176200001440000000553014455547166013123 0ustar liggesusersPackage: rgeos Title: Interface to Geometry Engine - Open Source ('GEOS') Version: 0.6-4 Date: 2023-06-18 Depends: R (>= 3.3.0), methods, sp (>= 1.1-0) Imports: utils, stats, graphics LinkingTo: sp Suggests: maptools (>= 0.8-5), testthat, XML, maps, rgdal NeedsCompilation: yes LazyLoad: yes Description: Interface to Geometry Engine - Open Source ('GEOS') using the C 'API' for topology operations on geometries. Please note that 'rgeos' will be retired during October 2023, plan transition to 'sf' or 'terra' functions using 'GEOS', or the 'geos' package, at your earliest convenience (see and earlier blogs for guidance). The 'GEOS' library is external to the package, and, when installing the package from source, must be correctly installed first. Windows and Mac Intel OS X binaries are provided on 'CRAN'. ('rgeos' >= 0.5-1): Up to and including 'GEOS' 3.7.1, topological operations succeeded with some invalid geometries for which the same operations fail from and including 'GEOS' 3.7.2. The 'checkValidity=' argument defaults and structure have been changed, from default FALSE to integer default '0L' for 'GEOS' < 3.7.2 (no check), '1L' 'GEOS' >= 3.7.2 (check and warn). A value of '2L' is also provided that may be used, assigned globally using 'set_RGEOS_CheckValidity(2L)', or locally using the 'checkValidity=2L' argument, to attempt zero-width buffer repair if invalid geometries are found. The previous default (FALSE, now '0L') is fastest and used for 'GEOS' < 3.7.2, but will not warn users of possible problems before the failure of topological operations that previously succeeded. From 'GEOS' 3.8.0, repair of geometries may also be attempted using 'gMakeValid()', which may, however, return a collection of geometries of different types. Authors@R: c( person("Roger", "Bivand", role = c("cre", "aut"), email = "Roger.Bivand@nhh.no", comment=c(ORCID="0000-0003-2392-6140")), person("Colin", "Rundel", role = "aut"), person("Edzer", "Pebesma", role = "ctb"), person("Rainer", "Stuetz", role = "ctb"), person("Karl Ove", "Hufthammer", role = "ctb"), person("Patrick", "Giraudoux", role = "ctb"), person("Martin", "Davis", role = c("cph", "ctb")), person("Sandro", "Santilli", role = c("cph", "ctb"))) License: GPL (>= 2) URL: https://r-forge.r-project.org/projects/rgeos/ https://libgeos.org http://rgeos.r-forge.r-project.org/index.html SystemRequirements: GEOS (>= 3.2.0). RoxygenNote: 6.1.1 Packaged: 2023-07-18 10:10:48 UTC; rsb Author: Roger Bivand [cre, aut] (), Colin Rundel [aut], Edzer Pebesma [ctb], Rainer Stuetz [ctb], Karl Ove Hufthammer [ctb], Patrick Giraudoux [ctb], Martin Davis [cph, ctb], Sandro Santilli [cph, ctb] Maintainer: Roger Bivand Repository: CRAN Date/Publication: 2023-07-18 17:40:06 UTC rgeos/tests/0000755000176200001440000000000014455442040012535 5ustar liggesusersrgeos/tests/test-all.R0000644000176200001440000000033114025150746014404 0ustar liggesuserslibrary(testthat) library(rgeos) set_do_poly_check(FALSE) #test_dir(system.file("tests", package = "rgeos"), StopReporter)#SummaryByContextReporter) #test_package("rgeos") test_check("rgeos") set_do_poly_check(TRUE) rgeos/tests/testthat/0000755000176200001440000000000014441605643014402 5ustar liggesusersrgeos/tests/testthat/testxml/0000755000176200001440000000000014025150746016077 5ustar liggesusersrgeos/tests/testthat/testxml/robust/0000755000176200001440000000000014025150746017415 5ustar liggesusersrgeos/tests/testthat/testxml/robust/ExternalRobustness.xml0000644000176200001440000006237414025150746024025 0ustar liggesusers http://geos.refractions.net/pipermail/geos-devel/2005-May/001441.html 0103000020E80A00000100000069010000ECA2396C13BBFF40E8BA3424319F2541DEFB1D49DFB8FF40E73660ADA07F2541FAD6C80B43B2FF407033A9AC12602541E43630383FA7FF401F0EFC9789402541470638AAD497FF408AE2E2E40721254133F2A0950484FF40D372540890012541776AF085D06BFF40B21B837624E22441E2C9515E3A4FFF40DBD7ABA2C7C22441CDA87059442EFF407956E5FE7BA32441DF5C4C09F108FF40A728EFFB4384244184A9045743DFFE40A40901092265244116A59F823EB1FE4096459A931846244141D7C822E67EFE40AD4251072A272441B29589243E48FE405630A3CD58082441A6A4FACA4A0DFE4065E0C34DA7E923417321EFAE10CEFD40D6CD6DEC17CB2341B7BD98BE948AFD40F954B20BADAC23414652253DDC42FD40B720CA0A698E234192D155C2ECF6FC40ADD0E5454E702341B3A10E3ACCA6FC40CCDBFE155F522341D166E1E38052FC4022B3A8D09D3423411747905211FAFB408628E2C70C172341F7B18A6B849DFB40B61CE749AEF92241F6B46366E13CFB40907802A184DC2241B9E841CC2FD8FA40FA74601392BF224194014977776FFA400135E1E2D8A22241500FFD91C002FA40CFB5EB4C5B8622416E789F961392F940DE17418A1B6A22418ABD854E791DF940FD44D0CE1B4E224122126AD1FAA4F84096F689495E32224164D8B584A128F840951F3524E5162241350EC61A77A8F7406EBD4383B2FB2141FEB929928524F7408B13A885C8E021417066DA34D79CF6408654AA4429C62141BCBC6E977611F64071BCBED3D6AB21414A4D47986E82F5407B1F5C40D39121416897B55ECAEFF44024F0D29120782141DA601D5A9559F4403AC024C9C05E2141AC6E1041DBBFF340C23FDCE0B545214109B16410A822F340EABCE5CC012D214160F4440A0882F2402528687AA61421417B2A3CB507DEF140659F9ECFA5FC2041975E3BDBB336F1408B83B2AB01E5204109689A88198CF040F01A96E6BBCD204192DE26168CBCEF40FDC3DF50D6B620418BB372E18D5AEE40A5BAA5B352A020414762D20D54F2EC409D735AD0328A204125366DB2FA83EB401B90A9607874204149EEA6609E0FEA40CC6C5516255F20412C71E5215C95E840C14E159B3A4A204167244D755115E740E4307490BA3520410516744D9C8FE5409C34B08FA621204130250C0E5B04E44024B89A29000E2041F2588489AC73E240152AF2CC91F51F414194A1FEAFDDE040A812CC8B04D01F41B9AE1D2C0A85DE40479B677D5BAB1F413F7ECABF9744DB4062B59D7D99871F4122E757A249FAD740CEC04256C1641F412B6FA08261A6D440A7E1EEBED5421F41A4982BCF2149D14038C2C75CD9211F41436DFF619BC5CB402FC54BC2CE011F41DF6CCA0C52E7C44028AC1E6FB8E21E41DD196F76E1EFBB409BB6D7CF98C41E41F3220E7C07E0AB40163DD13D72A71E4180CA45A3CBEE47C079CCF9FE468B1E4173AA092451DDACC0EBC4A64519701E41488EA3D140CBBCC00E806830EB551E41721152D143A2C5C0D501E0C9BE3C1E41BB857A0AAEECCCC05637960896241E4176759EC42622D2C0BAC6D4CE720D1E41BE846FDD47D4D5C0657380EA56F71D41F4583488708CD9C03319F51444E21D4153B71285564ADDC0B041E3F23BCE1D41F73ECE90D786E0C0E7552F1440BB1D417067519F176BE2C05E6FD2F351A91D413DDB08ABC551E4C0B5CABCF772981D41C6EB69C0BB3AE6C01FDEB970A4881D4115D45EBED325E8C00516569AE7791D4168E43F59E712EAC0BF39C69A3D6C1D4198FFCF1DD001ECC05C7AD082A75F1D41AE2E3C7467F2EDC0482DB74D26541D41D30E1EA386E4EFC0703425E1BA491D41C76E406903ECF0C06B151C0D66401D417873748760E6F1C014C1E38B28381D41AC8C2E2647E1F2C0D60CFC0103311D410441B9B4A3DCF3C0C9DE0FFEF52A1D41EDBA2C9962D8F4C0A10DEAF801261D419914F63170D4F5C053F56B5527221D41003D5FD7B8D0F6C024C18560661F1D41725717DD28CDF7C0C06B3051BF1D1D410D77BB93ACC9F8C0D0756948321D1D4181975F4A30C6F9C067533051BF1D1D4180B41750A0C2FAC075908560661F1D4127E180F5E8BEFBC051AC6B5527221D41C5404A8EF6BAFCC051ACE9F801261D4152C2BD72B5B6FDC033650FFEF52A1D41FF7F480112B2FEC0047BFB0103311D4139A402A0F8ACFFC01117E38B28381D41D05A1BDFAA5300C145531B0D66401D41B215F4EA8AD000C1365A24E1BA491D41C495ACB6124D01C10B3BB64D26541D4169AA478C38C901C12E70CF82A75F1D41EBBA6BBDF24402C1B517C59A3D6C1D418A0924A437C002C136DC549AE7791D41FC4EA1A3FD3A03C1A38CB870A4881D414F9FF9283BB503C1A661BBF772981D414689E7ABE62E04C1DAEED0F351A91D41386188AFF6A704C10ABE2D1440BB1D41B0A819C3612005C19B92E1F23BCE1D41F083B5821E9805C10753F31444E21D41B72E0E98230F06C145967EEA56F71D41AE6128BB678506C1CDD2D2CE720D1E41DA9914B3E1FA06C1C12C940896241E41C133A756886F07C1C2E0DDC9BE3C1E41D14B2F8D52E307C1A7486630EB551E41CA552C4F375608C15C77A44519701E410E5D02A72DC808C1F068F7FE468B1E41B1DFACB12C3909C1C3C3CE3D72A71E417036709F2BA909C1B027D5CF98C41E41AB7B89B421180AC1D7071C6FB8E21E41ACE3DC4906860AC1AD0B49C2CE011F41A378A2CDD0F20AC1BCF3C45CD9211F41E52C11C4785E0BC168FEEBBED5421F410D3608C8F5C80BC107C93F56C1641F41D1A3B68B3F320CC14DA99A7D99871F41742541D94D9A0CC1207B647D5BAB1F41F3F0659318010DC1AFDEC88B04D01F4116BF1EB697660DC189E2EECC91F51F41C9CF4057C3CA0DC1B60A9929000E20414EEA1AA7932D0EC1A77DAE8FA6212041DF4C11F1008F0EC189707290BA352041B07F379C03EF0EC12585139B3A4A20413BFFE72B944D0FC1129A5316255F204117B25940ABAA0FC167B4A76078742041528F99CB200310C1148F58D0328A20418BAA0D06283010C16DCDA3B352A020414941A4CC675C10C13DCEDD50D6B62041221106ACDC8710C1CE1C94E6BBCD2041B960AE4083B210C12F7DB0AB01E52041EEA52E3758DC10C1F8909CCFA5FC2041EAEA704C580511C1D011667AA6142141DEECF84D802D11C1D79EE3CC012D214154EF231ACD5411C11A1ADAE0B5452141313F67A03B7B11C1299322C9C05E214166608DE1C8A011C1D5BBD09120782141B1E1F1EF71C511C11AE45940D39121419ED1BBEF33E911C12B7ABCD3D6AB214159D016170C0C12C1870BA84429C62141C5B96AAEF72D12C101C4A585C8E0214195E39110F44E12C187674183B2FB21411BEB0DABFE6E12C181C33224E5162241BB0E3BFE148E12C1839487495E322241FB0E829D34AC12C11BDDCDCE1B4E22414D93882F5BC912C15CAA3E8A1B6A2241D00E606E86E512C1DF42E94C5B8622415A21B327B40013C1D3BCDEE2D8A222414B71F13CE21A13C1BFF75D1392BF2241AFFA79A30E3413C17BF6FFA084DC22416DD0C364374C13C1F895E449AEF922415D4C859E5A6313C1519DDFC70C1723411AABD982767913C1AA23A6D09D342341C6106558898E13C14348FC155F522341D5F3767A91A213C14839E3454E7023413AEB2A598DB513C1A885C70A698E23416FDD87797BC713C175B6AF0BADAC2341D48D9D755AD813C1112C6BEC17CB23413386A0FC28E813C1943BC14DA7E92341235A04D3E5F613C1AD88A0CD580824414D4294D28F0414C161984E072A2724419E0D8AEA251114C1DD98979318462441AA66A31FA71C14C1B25AFE0822652441856B358C122714C1B377ECFB4384244195963E60673014C1B9A3E2FE7BA32441FEF676E1A43814C18423A9A2C7C2244154B75E6BCA3F14C1FA65807624E2244180F14A6FD74514C1EFBB510890012541CBCE7074CB4A14C1B22AE0E40721254140F3EE17A64E14C18855F997894025419833D50C675114C1517AA6AC1260254128952A1C0E5314C1777D5DADA07F25414597F1249B5314C15C013224319F2541DAC52A1C0E5314C17985069BC1BE2541F994D50C675114C14189BD9B4FDE25414685EF17A64E14C11AAF6AB0D8FD25416D917174CB4A14C16DDB83635A1D2641AEE44B6FD74514C1194C1240D23C2641FCDA5F6BCA3F14C164A4E3D13D5C2641074B78E1A43814C19CE9BAA59A7B2641E61A4060673014C1946C8149E69A26410020378C122714C1339C774C1EBA26412D4BA51FA71C14C139BD653F40D9264102228CEA251114C17E83CCB449F82641698696D28F0414C1D588154138172741CBCD06D3E5F613C1CE9DC37A093627413529A3FC28E813C196F0A2FABA542741FB5FA0755AD813C13106F95B4A73274183DE8A797BC713C14F82B43CB5912741FF1A2E598DB513C107BA9C3DF9AF27410B527A7A91A213C1B90D810214CE27412B9D6858898E13C17706683203EC27416665DD82767913C13233BE77C40928414634899E5A6313C111C2848055272841A6E5C764374C13C157D27FFEB3442841E43C7EA30E3413C1257B64A7DD6128412AE0F53CE21A13C197830635D07E284189BCB727B40013C19BC88565899B2841F2D5646E86E512C10B4D7BFB06B8284104868D2F5BC912C16BF025BE46D42841E42C879D34AC12C1EBC8967946F02841705740FE148E12C1211DDDFE030C2941325E13ABFE6E12C121FA31247D272941A1809710F44E12C1756223C5AF422941578070AEF72D12C1B412BFC2995D2941FDBF1C170C0C12C143D8BC0339782941DEE9C1EF33E911C11077A8748B9229411322F8EF71C511C1EC1A0B088FAC29416DC893E1C8A011C1555194B641C629415DCE6DA03B7B11C17C88427FA1DF294123A52A1ACD5411C15E108B67ACF82941C9C8FF4D802D11C1C99A817B60112A4169EC774C580511C14D37FFCDBB292A4173CC353758DC10C1F5C7C878BC412A41B7ABB54083B210C1E0EBB49C60592A4108800DACDC8710C1B45CD161A6702A4182D3ABCC675C10C108BC87F78B872A417F5F1506283010C1E9CDC1940F9E2A416866A1CB200310C1A01D0D782FB42A414EA36940ABAA0FC1F609BEE7E9C92A413E32F82B944D0FC13F3612323DDF2A413DF3479C03EF0EC1685D52AD27F42A41AAFF21F1008F0EC18884F3B7A7082B410ADB2BA7932D0EC1358AB7B8BB1C2B4123FD5157C3CA0DC13510CD1E62302B41B72730B697660DC1F8BCEE6199432B418093779318010DC177D2810260562B418C0053D94D9A0CC11218B489B4682B4110B6C88B3F320CC10D159989957A2B410B7E1AC8F5C80BC17F99469D018C2B4134A923C4785E0BC15793F068F79C2B41D227B5CDD0F20AC1702D049A75AD2B4146C4EF4906860AC1733642E77ABD2B41378C9CB421180AC18FCDD81006CD2B417275839F2BA909C109537CE015DC2B41A84BC0B12C3909C1989A7F29A9EA2B4177F415A72DC808C1CD5DEBC8BEF82B411D17404F375608C191EC94A555062C418335438D52E307C1141A34B06C132C414644BB56886F07C15A6478E302202C41A1CF28B3E1FA06C1DA541D44172C2C4123BB3CBB678506C17B18FEE0A8372C4144AA2298230F06C18E4D28D3B6422C41FB1FCA821E9805C12106EE3D404D2C41A0632EC3612005C16EFDF64E44572C416D399DAFF6A704C1EFFE503EC2602C41207DFCABE62E04C1DF7D7F4EB9692C412DAD0E293BB503C1EF5B8ACC28722C413875B6A3FD3A03C104DE0B10107A2C417F4639A437C002C1E7CD3D7B6E812C41F10C81BDF24402C1EDC7057B43882C41D70F5D8C38C901C18CB300878E8E2C41ED0CC2B6124D01C10E668D214F942C41EA9C09EB8AD000C17C6ED6D784992C416AF030DFAA5300C1090ADB412F9E2C41D2E82DA0F8ACFFC0464077024EA22C419DDA730112B2FEC07D266BC7E0A52C41942FE972B5B6FDC0A2496149E7A82C4148BD758EF6BAFCC0593EF44B61AB2C418769ACF5E8BEFBC0A656B39D4EAD2C4158454350A0C2FAC0E77C2618AFAE2C416B2D8B4A30C6F9C0C433D19F82AF2C41A30EE793ACC9F8C0E8BA3424C9AF2C414FED42DD28CDF7C04858D19F82AF2C41BCCD8AD7B8D0F6C0EDC52618AFAE2C41CF9C213270D4F5C028C4B39D4EAD2C413837589962D8F4C04ED0F44B61AB2C41FFADE4B4A3DCF3C0FFFF6149E7A82C41F6E6592647E1F2C034016CC7E0A52C41AFB79F8760E6F1C0463F78024EA22C418B996B6903ECF0C03D2DDC412F9E2C41B92A74A386E4EFC0CEB5D7D784992C413B0A927467F2EDC065D18E214F942C411C94251ED001ECC0CB4202878E8E2C41352B9559E712EAC0F57A077B43882C4184C6B3BED325E8C096A43F7B6E812C413983BEC0BB3AE6C036D80D10107A2C411C115DABC551E4C07C798CCC28722C412835A59F176BE2C09DBE814EB9692C41009E2191D786E0C0B062533EC2602C41078BB885564ADDC00384F94E44572C415C35D988708CD9C058AFF03D404D2C41FF5C13DE47D4D5C031192BD3B6422C41C93C41C52622D2C0540601E1A8372C4123D9BD0BAEECCCC0AC642044172C2C41681093D243A2C5C0EA957BE302202C413EB120D440CBBCC0216D37B06C132C411BD7F92851DDACC0D96098A555062C4127FFB1DCCCEE47C00BF3EEC8BEF82B41B64F337707E0AB4085508329A9EA2B417C4F0774E1EFBB405A2980E015DC2B41506F990B52E7C440F8C3DC1006CD2B411C6FD1609BC5CB40A54C46E77ABD2B410A2596CE2149D1401A63089A75AD2B41B2920C8261A6D44024E8F468F79C2B414CADC5A149FAD740170D4B9D018C2B4172F239BF9744DB401AA79D89957A2B4139DC8E2B0A85DE4037C8B889B4682B413A0D5BFEAFDDE04058A0860260562B41A3B93E89AC73E24033A8F36199432B410773C70D5B04E4406918D21E62302B415C56304D9C8FE540FEAEBCB8BB1C2B41885C0A755115E7407FC5F8B7A7082B414AA6A3215C95E84024BA57AD27F42A41872566609E0FEA4053AE17323DDF2A418F742DB2FA83EB40F79CC3E7E9C92A41D6AC930D54F2EC401DCB12782FB42A41220F35E18D5AEE407195C7940F9E2A41FF4FEA158CBCEF40299D8DF78B872A4107AE7C88198CF040F756D761A6702A412F341EDBB336F140CFFEBA9C60592A41F1911FB507DEF14015F3CE78BC412A41F0EF280A0882F240247A05CEBB292A41E2424910A822F340DAF4877B60112A41F298F540DBBFF3402A819167ACF82941A425035A9559F440820F497FA1DF2941C0F89B5ECAEFF44013EE9AB641C62941314D2E986E82F540DECC11088FAC2941255D56977611F640B13DAF748B92294141A9C234D79CF6400BB3C3033978294111A112928524F7401A01C6C2995D2941579BAF1A77A8F740EF632AC5AF422941540DA084A128F840220E39247D27294193F054D1FAA4F8401D43E4FE030C29412347714E791DF94053009E7946F02841C8AE8B961392F940AF382DBE46D42841F4F3E991C002FA409AA582FB06B8284100963677776FFA40E2308D65899B28415D2E30CC2FD8FA4001FB0D35D07E284133AD5266E13CFB401E016CA7DD612841215E7A6B849DFB40496687FEB344284173A8805211FAFB4064638C8055272841987ED2E38052FC404EE1C577C40928410E71003ACCA6FC40C3C06F3203EC27419C5948C2ECF6FC409AD3880214CE27410C94183DDC42FD40E28AA43DF9AF274136BA8CBE948AFD40895DBC3CB59127419BD9E3AE10CEFD402CEB005C4A7327415819F0CA4A0DFE40B5DEAAFABA542741C1C77F243E48FE407294CB7A0936274170C7BF22E67EFE405F871D41381727411A5497823EB1FE404F89D4B449F826410318FD5643DFFE40B1C96D3F40D926416F8B4509F108FF40B1AE7F4C1EBA2641F6976A59442EFF4077848949E69A26411D7A4C5E3A4FFF404206C3A59A7B26412FDCEB85D06BFF402CC5EBD13D5C2641C2259D950484FF4060701A40D23C2641F9FB34AAD497FF4090028C635A1D2641F4EE2D383FA7FF4077D872B0D8FD25419651C70B43B2FF4035B4C59B4FDE254124391D49DFB8FF4060B10E9BC1BE2541ECA2396C13BBFF40E8BA3424319F2541 0103000020E80A0000010000001B0000003731C25DB7A40AC123BABA3D2F2E1541482DDA6520AE15C150176B846E0E04419D9BAD51D2DD20C188B238C6A20F1341C93BA6B63EF616C1773C690356B72041AFE718BD3DE01AC1363F67295618224104666722A81614C128DF2B476DE92641E3BF74CA1BBCF1C0D43292B68C652141BDD1D74AAFA6CCC01D27263DE8A122418FF95A96AD86C240BA1AA7079685274134285EE6E81EF9C040F2AA56B1AF2C4117B1B91CDC81FA40E8363289617C3041DF296F1F14800941806416C77A5C2C4143DE3E9BAE901A41E5DD836A7C8E2E413E4390CBBBDE1E41DCBAED0B9BC82741489E9ED935770A41535871C71BFB2441A247FE423D360841CDF36716539B2441ECC1420680470741BD3D4C94710F23414D024D7D04380A41FEC5364D1A022241407DA7BAAF811D41DD0784C658ED184192B08CF1A618184108E3295E56ED104121896F9066610541F13A975D57FE1941096E8D134BEBFB406847DAE3D9661741AABE21A245A00B41845A019F2304FF40E48112BC1AF0F84080891F1A39C7F140DD811CEEB3B3EF40AE82AE28194B0341AB6F85D09F3409C1B06BA7169F6201413731C25DB7A40AC123BABA3D2F2E1541 http://postgis.refractions.net/pipermail/postgis-users/2006-March/011316.html POLYGON((742605.987032656 5087763.72510381,742599.903121688 5087760.56016809,742598.666141033 5087762.50894352,742591.100910753 5087758.50480931,742586.861672536 5087766.63211263,742591.417801844 5087769.04526206,742592.428792606 5087767.35034731,742601.541294342 5087772.18101105,742605.987032656 5087763.72510381)) POLYGON((742601.541294537 5087772.18101068,742592.428792606 5087767.35034731,742589.944404072 5087771.51539701,742583.880455986 5087782.54873438,742582.81550675 5087784.27809355,742583.216887765 5087784.43459684,742582.99081514 5087785.0349637,742592.341351823 5087789.67654,742593.375823205 5087787.7060691,742599.28794443 5087776.4640487,742601.541294537 5087772.18101068)) http://postgis.refractions.net/pipermail/postgis-users/2006-March/011332.html POLYGON ((613697.0000000041909516 2369267.9999981997534633, 613797.0000000043073669 2368322.9999981978908181, 613643.0000000041909516 2367807.9999981969594955, 613674.0000000041909516 2367405.9999981969594955, 613400.0000000041909516 2367299.9999981955625117, 613200.0000000040745363 2366813.9999981950968504, 613252.0000000040745363 2366474.9999981927685440, 613094.0000000040745363 2366400.9999981927685440, 612695.0000000039581209 2365506.9999981909058988, 612326.0000000038417056 2365402.9999981909058988, 612145.0000000037252903 2365470.9999981913715601, 612061.0000000037252903 2365967.9999981918372214, 611724.0000000036088750 2366168.9999981927685440, 611334.0000000034924597 2366316.9999981927685440, 610743.0000000033760443 2366221.9999981932342052, 610174.0000000031432137 2366305.9999981927685440, 609973.0000000031432137 2367066.9999981955625117, 609073.0000000027939677 2367938.9999981974251568, 609061.0000000027939677 2368332.9999981974251568, 609151.0000000027939677 2368684.9999981992878020, 608919.0000000027939677 2368811.9999982002191246, 608801.0000000026775524 2369192.9999982002191246, 609161.0000000027939677 2369096.9999982006847858, 609161.0000000027939677 2369509.9999982025474310, 609857.0000000030267984 2369498.9999982011504471, 609762.0000000030267984 2369689.9999982020817697, 610796.0000000033760443 2369794.9999982025474310, 611332.0000000034924597 2370097.9999982025474310, 613149.0000000040745363 2370460.9999982034787536, 613613.0000000041909516 2369720.9999982016161084, 613697.0000000041909516 2369267.9999981997534633)) POLYGON ((607216.0000000019790605 2370623.9999982002191246, 608128.0000000019790605 2370312.9999982002191246, 608317.0000000030267984 2370101.9999982002191246, 608328.0000000030267984 2369868.9999982002191246, 608644.0000000030267984 2369847.9999982002191246, 608801.0000000030267984 2369192.9999982002191246, 608919.0000000030267984 2368811.9999982002191246, 609151.0000000030267984 2368684.9999982002191246, 609061.0000000030267984 2368332.9999982002191246, 608602.0000000030267984 2368124.9999982002191246, 607980.0000000019790605 2367585.9999982002191246, 607295.0000000019790605 2367062.9999981899745762, 606251.0000000019790605 2366697.9999981899745762, 605456.0000000019790605 2367679.9999982002191246, 605108.0000000019790605 2368377.9999982002191246, 604906.0000000019790605 2369083.9999982002191246, 604191.0000000010477379 2369719.9999982002191246, 604107.0000000010477379 2370057.9999982002191246, 604264.0000000010477379 2370397.9999982002191246, 604141.0000000010477379 2370768.9999982002191246, 604561.0000000010477379 2370448.9999982002191246, 604940.0000000019790605 2370406.9999982002191246, 605460.0000000019790605 2370792.9999982002191246, 605942.0000000019790605 2370945.9999982099980116, 606364.0000000019790605 2370892.9999982002191246, 606881.0000000019790605 2370988.9999982002191246, 607216.0000000019790605 2370623.9999982002191246)) http://postgis.refractions.net/pipermail/postgis-users/2006-March/011332.html (2) 0103000020BE6B0000010000002A000000FBFFFFFF0BB81A41D3FFFFFF12C63E41FBFFFFFF4FBD1A41D6FFFFFF66C63E41FCFFFFFF1BC11A41D7FFFFFF14C53E41FBFFFFFF93C31A41D3FFFFFFC4C23E41FCFFFFFF87C71A41D8FFFFFFC4C23E41FBFFFFFF8BD41A41D5FFFFFFBEC03E41FBFFFFFF2BD81A41D3FFFFFFDEC03E41FCFFFFFF63DA1A41DBFFFFFFB9BF3E41FCFFFFFF43D91A41D7FFFFFF5BBE3E41FBFFFFFFD7D81A41D1FFFFFFA8BC3E41FCFFFFFF37D61A41D3FFFFFF60BB3E41FCFFFFFFF3DD1A41D6FFFFFFFDB73E41FCFFFFFF6BE11A41D8FFFFFFBCB33E41FCFFFFFF4BDE1A41D8FFFFFFEBB13E41FCFFFFFF7BDB1A41D7FFFFFF8BB13E41FCFFFFFF4BDD1A41D6FFFFFF83B03E41FBFFFFFFB7D91A41D0FFFFFFADAE3E41FBFFFFFF07D81A41D6FFFFFFF4AD3E41FCFFFFFFBBD61A41D6FFFFFF45AB3E41FCFFFFFF67D61A41DBFFFFFFB3A93E41FCFFFFFF63D91A41D6FFFFFF92A83E41FBFFFFFF03C31A41D2FFFFFF75A93E41FBFFFFFF13BE1A41D7FFFFFFB7A83E41FBFFFFFF0FBF1A41D2FFFFFF84A73E41FBFFFFFFD7B41A41D5FFFFFF77A83E41FBFFFFFFAF871A41D6FFFFFFACA83E41FAFFFFFFDF811A41CEFFFFFF79AA3E41FBFFFFFFDF8B1A41D1FFFFFF9AAE3E41FAFFFFFF3B971A41D0FFFFFF76B03E41FBFFFFFF3B891A41D3FFFFFF4FB33E41FCFFFFFFE7871A41D3FFFFFF2EB43E41FBFFFFFFE7881A41D2FFFFFF16B53E41FCFFFFFFC3861A41D8FFFFFF9BB53E41FBFFFFFF27851A41D8FFFFFF67B73E41FBFFFFFFBB8C1A41D4FFFFFFA6B73E41FBFFFFFF03911A41D4FFFFFF38B93E41FBFFFFFF879E1A41D3FFFFFF11BC3E41FBFFFFFF37A91A41D4FFFFFF3EBB3E41FBFFFFFF0BA91A41D2FFFFFF46BC3E41FCFFFFFFC3B31A41D5FFFFFFFABC3E41FBFFFFFFF3B11A41D4FFFFFFDFC33E41FBFFFFFF0BB81A41D3FFFFFF12C63E41 0103000020BE6B00000100000038000000000000009C801A41D5FFFFFF33D83E41000000006C821A41D5FFFFFFE0D63E410000000038861A41D5FFFFFFE3D53E4100000000E4851A41D5FFFFFFB0D43E4100000000C0821A41D5FFFFFFF2D33E4100000000B4691A41D5FFFFFFC6CF3E410000000038681A41D5FFFFFFBDCE3E410000000038751A41D5FFFFFF76CD3E410000000068731A41D5FFFFFF30CB3E4100000000787C1A41D5FFFFFFDCCA3E4100000000B4851A41D5FFFFFFDCCA3E4100000000788B1A41D5FFFFFF23CC3E41000000004C8C1A41D5FFFFFF10CB3E4100000000A48A1A41D5FFFFFFDEC93E4100000000788B1A41D5FFFFFFF5C83E4100000000C48E1A41D5FFFFFF17C83E4100000000B8921A41D5FFFFFFCDC73E41000000001C9D1A41D5FFFFFFE2C73E410000000008A31A41D5FFFFFFCBC83E4100000000ECAC1A41D5FFFFFF41C83E41000000005CB21A41D5FFFFFF31C63E41000000000CB81A41D5FFFFFF12C63E4100000000F4B11A41D5FFFFFFDFC33E4100000000C4B31A41D5FFFFFFFABC3E41000000000CA91A41D5FFFFFF46BC3E410000000038A91A41D5FFFFFF3EBB3E4100000000889E1A41D5FFFFFF11BC3E410000000004911A41D5FFFFFF38B93E4100000000BC8C1A41D5FFFFFFA6B73E410000000028851A41D5FFFFFF67B73E4100000000C4861A41D5FFFFFF9BB53E4100000000F0791A41D5FFFFFFD5B53E410000000038701A41D5FFFFFFDDB63E4100000000D0681A41D5FFFFFF84B83E4100000000D0581A41D5FFFFFF9CB73E410000000028581A41D5FFFFFF23B93E4100000000445E1A41D5FFFFFFB5BA3E4100000000245B1A41D5FFFFFF3CBC3E410000000080591A41D5FFFFFF99BD3E4100000000F8501A41D5FFFFFFBABE3E410000000018511A41D5FFFFFF75BF3E4100000000A84B1A41D5FFFFFF31C13E41000000004C4D1A41D5FFFFFFCCC73E4100000000244F1A41D5FFFFFF50CB3E41000000006C441A41D5FFFFFF8DCC3E4100000000BC451A41D5FFFFFF14CE3E4100000000D84B1A41D5FFFFFFFBCF3E4100000000B4571A41D5FFFFFFD6D13E4100000000B0581A41D5FFFFFF09D33E410000000028561A41D5FFFFFF5AD43E4100000000F45E1A41D5FFFFFF59D53E4100000000506B1A41D5FFFFFFB4D73E410000000044701A41D5FFFFFF5FD73E410000000038731A41D5FFFFFF74D73E4100000000E4721A41D5FFFFFFB4D73E41000000009C801A41D5FFFFFF33D83E41 postgis-users/2006-November/013743.html Fails due to 'gore' with apex extremely close to other segment (in B) POLYGON((5417148.108 5658342.603,5417139.016 5658338.009,5417126.791 5658331.833,5417116.292 5658327.518,5417112.871 5658325.598,5417110.25 5658324.127,5417106.071 5658321.781,5417104.226 5658320.745,5417093.266 5658315.008,5417091.265 5658313.961,5417085.335 5658310.857,5417060.44 5658326.26,5417064.68 5658327.52,5417088.83 5658336.46,5417088.52 5658337.31,5417102.92 5658342.65,5417103.26 5658341.83,5417111.76 5658345.51,5417121.662 5658349.583,5417121.878 5658349.672,5417125.217 5658351.119,5417131.761 5658353.388,5417137.589 5658356.276,5417142.166 5658359.67,5417146.599 5658364.988,5417151.395 5658370.641,5417150.853 5658371.392,5417152.59741167 5658373.52811061,5417154.92 5658376.37,5417155.18955743 5658376.89699992,5417154.919 5658376.371,5417155.814 5658378.111,5417157.051 5658380.297,5417158.004 5658382.304,5417159.014 5658384.47,5417159.775 5658386.619,5417160.629 5658389.278,5417161.5 5658399.49,5417160.773 5658404.194,5417159.41 5658413.02,5417158.853 5658414.442,5417153.671 5658427.659,5417153.67051161 5658427.6586943,5417153.67 5658427.66,5417152.73 5658427.07,5417149.993 5658436.599,5417148.81 5658439.42,5417149.233 5658439.67,5417148.36 5658440.81,5417146.41 5658446.6,5417144.321 5658453.127,5417144.32092232 5658453.13043826,5417154.59 5658458.01,5417154.99551047 5658455.8409905,5417155.446 5658453.413,5417157.23981414 5658448.75748237,5417157.22660892 5658448.57861162,5417157.22660849 5658448.57860592,5417157.22660865 5658448.57860812,5417157.128 5658447.265,5417157.64950997 5658446.06368023,5417157.64950961 5658446.06368108,5417158.314 5658444.533,5417172.322 5658417.957,5417174.99 5658418.57,5417175.23 5658417.74,5417176.696 5658412.61,5417177.875 5658408.488,5417178.76 5658405.39,5417178.1 5658393.55,5417178.08 5658393.36,5417177.11 5658384.95,5417178.151 5658384.915,5417178.14836289 5658384.91508866,5417178.12 5658384.83,5417177.91415246 5658383.81114117,5417176.927 5658378.944,5417176.603 5658377.341,5417176.73975922 5658378.01762048,5417176.6 5658377.34,5417176.51210558 5658376.89535766,5417176.428 5658376.483,5417175.235 5658370.602,5417171.577 5658362.886,5417170.762 5658360.107,5417168.522 5658357.989,5417166.042 5658355.047,5417164.137 5658352.264,5417162.642 5658351.593,5417160.702 5658350.843,5417160.05417889 5658350.5823586,5417158.82 5658350.09,5417158.82103105 5658350.0862195,5417159.50373263 5658350.36089455,5417158.818 5658350.085,5417159.055 5658349.214,5417155.754 5658347.679,5417156.78066321 5658348.15640928,5417155.7525011 5658347.6811561,5417155.161 5658348.532,5417149.028 5658343.237,5417152.26877967 5658346.03496647,5417149.03 5658343.24,5417148.78133339 5658343.06701453,5417148.108 5658342.603)) POLYGON((5417148.36 5658440.81,5417149.233 5658439.67,5417148.81 5658439.42,5417149.993 5658436.599,5417152.73 5658427.07,5417153.67 5658427.66,5417153.67051161 5658427.6586943,5417153.671 5658427.659,5417158.853 5658414.442,5417159.41 5658413.02,5417160.773 5658404.194,5417161.5 5658399.49,5417160.63 5658389.28,5417159.78 5658386.62,5417159.366239 5658385.46469333,5417159.014 5658384.47,5417158.004 5658382.304,5417157.051 5658380.297,5417155.814 5658378.111,5417155.18955747 5658376.897,5417154.92 5658376.37,5417152.59740379 5658373.52810095,5417150.853 5658371.392,5417151.13020611 5658371.00790076,5417151.4 5658370.64,5417147.11100598 5658365.59149663,5417146.599 5658364.988,5417145.96673439 5658364.22950947,5417142.17 5658359.67,5417139.98754716 5658358.05460369,5417137.589 5658356.276,5417131.761 5658353.388,5417125.33011568 5658351.15822058,5417125.22 5658351.12,5417121.88 5658349.67,5417121.66 5658349.58,5417111.76 5658345.51,5417103.26 5658341.83,5417102.92 5658342.65,5417088.52 5658337.31,5417088.83 5658336.46,5417064.68 5658327.52,5417060.44 5658326.26,5417085.34 5658310.86,5417085.90750076 5658311.15666987,5417091.265 5658313.961,5417093.266 5658315.008,5417093.61266829 5658315.18946314,5417104.23 5658320.75,5417105.81727304 5658321.63852784,5417106.071 5658321.781,5417106.60319005 5658322.07975996,5417110.25 5658324.13,5417112.87 5658325.6,5417116.29 5658327.52,5417121.76604303 5658329.76778528,5417126.791 5658331.833,5417139.016 5658338.009,5417148.108 5658342.603,5417148.78133333 5658343.06701449,5417149.03 5658343.24,5417152.26878253 5658346.03496893,5417155.161 5658348.532,5417155.7525011 5658347.6811561,5417156.78066337 5658348.15640935,5417159.055 5658349.214,5417158.818 5658350.085,5417158.82103105 5658350.0862195,5417158.82 5658350.09,5417160.0541792 5658350.58235872,5417160.702 5658350.843,5417162.642 5658351.593,5417164.137 5658352.264,5417165.25343486 5658353.89499119,5417166.04 5658355.05,5417168.52 5658357.99,5417170.76 5658360.11,5417171.26171711 5658361.81094338,5417171.577 5658362.886,5417175.235 5658370.602,5417176.428 5658376.483,5417176.51210558 5658376.89535766,5417176.6 5658377.34,5417176.73975924 5658378.01762057,5417176.927 5658378.944,5417177.91415134 5658383.81113564,5417178.12 5658384.83,5417178.14836289 5658384.91508866,5417177.11 5658384.95,5417178.08 5658393.36,5417178.1 5658393.55,5417178.76 5658405.39,5417177.875 5658408.488,5417176.696 5658412.61,5417175.23 5658417.74,5417174.99 5658418.57,5417172.322 5658417.957,5417172.32037372 5658417.96008538,5417172.32 5658417.96,5417158.31 5658444.53,5417157.64951003 5658446.06368011,5417157.128 5658447.265,5417157.22660867 5658448.5786084,5417157.23981414 5658448.75748238,5417155.446 5658453.413,5417154.99551072 5658455.84098918,5417154.59 5658458.01,5417144.32092232 5658453.13043826,5417144.321 5658453.127,5417146.41 5658446.6,5417148.36 5658440.81)) true true rgeos/tests/testthat/testxml/robust/TestRobustOverlayFloat.xml0000644000176200001440000000746414025150746024620 0ustar liggesusers AA - OLD robustness failure (works with snapping) POLYGON ((301949.68 2767249.16, 301936.52 2767241.28, 301938.87 2767237.43, 301952.47 2767245.59, 301950.74 2767247.81, 301949.68 2767249.16)) POLYGON ((302041.321 2767264.675, 301938.823 2767237.507, 301941.21 2767233.59, 301943.821 2767229.304, 302048.886 2767243.046, 302041.321 2767264.675)) POLYGON ((301939.1370850084 2767237.5902510053, 301938.87 2767237.43, 301938.823 2767237.507, 301939.1370850084 2767237.5902510053)) AA - OLD robustness failure (works with snapping) POLYGON ((301936.52 2767241.28, 301933.22 2767239.3, 301934.9 2767236.51, 301935.54 2767235.44, 301938.87 2767237.43, 301936.52 2767241.28)) POLYGON ((302041.321 2767264.675, 301938.823 2767237.507, 301941.21 2767233.59, 301943.821 2767229.304, 302048.886 2767243.046, 302041.321 2767264.675)) POLYGON ((301938.823 2767237.507, 301938.87 2767237.43, 301938.86994385667 2767237.4299664493, 301938.823 2767237.507)) AA - OLD robustness failure (works with snapping) POLYGON ((464664.782646596 5362148.87380619, 464664.713299 5362148.758128, 464686.806220838 5362136.92416521, 464713.650216607 5362122.5453135, 464711.113332785 5362117.30158834, 464707.408813375 5362110.21553566, 464703.323866879 5362103.23305736, 464698.945488413 5362096.31213576, 464694.461274991 5362089.42505804, 464625.876674576 5361951.92914952, 464622.430583893 5361944.69388208, 464535.3572 5361970.739, 464648.194399372 5362157.89548451, 464664.782646596 5362148.87380619)) POLYGON ((464769.977147523 5362187.88829332, 464765.146147008 5362180.84587461, 464754.387021019 5362169.93629911, 464747.786455245 5362160.11104076, 464734.810564627 5362148.45253107, 464725.386626381 5362135.71065214, 464712.646269 5362123.083073, 464727.794520848 5362149.37983229, 464738.165719397 5362165.72994593, 464746.257208116 5362179.45514151, 464752.378040379 5362191.80978275, 464769.977147523 5362187.88829332)) POINT (464712.646269 5362123.083073) AA - OLD robustness failure (works with snapping) POLYGON ((698400.5682737827 2388494.3828697307, 698402.3209180075 2388497.0819257903, 698415.3598714538 2388498.764371397, 698413.5003455497 2388495.90071853, 698400.5682737827 2388494.3828697307)) POLYGON ((698231.847335025 2388474.57994264, 698440.416211779 2388499.05985776, 698432.582638943 2388300.28294705, 698386.666515791 2388303.40346027, 698328.29462841 2388312.88889197, 698231.847335025 2388474.57994264)) LINESTRING (698413.5003455497 2388495.90071853, 698400.5682737827 2388494.3828697307) AA - OLD robustness failure (works with snapping) POLYGON ((698265.5760207245 2388415.007869463, 698266.5171698363 2388416.456984281, 698272.2367250263 2388406.868318228, 698271.2748419731 2388405.3872787533, 698265.5760207245 2388415.007869463)) POLYGON ((698230.86813842 2388473.60074604, 698104.551776442 2388363.93072634, 698321.933422637 2388319.86687914, 698230.86813842 2388473.60074604)) POLYGON ((698265.5760207245 2388415.007869463, 698265.5760207246 2388415.007869463, 698271.2748419731 2388405.3872787533, 698265.5760207245 2388415.007869463)) rgeos/tests/testthat/testxml/robust/TestRobustOverlayFixed.xml0000644000176200001440000000051314025150746024576 0ustar liggesusers AA POLYGON ((545 317, 617 379, 581 321, 545 317)) POLYGON ((484 290, 558 359, 543 309, 484 290)) POINT (545 317) rgeos/tests/testthat/testxml/robust/TestRobustRelate.xml0000644000176200001440000000061314025150746023412 0ustar liggesusers PP - Point is not on line. Non-robust algorithms fail by erroneously reporting intersects=true. LINESTRING(-123456789 -40, 381039468754763 123456789) POINT(0 0) false rgeos/tests/testthat/testxml/validate/0000755000176200001440000000000014025150746017670 5ustar liggesusersrgeos/tests/testthat/testxml/validate/TestRelateLC.xml0000644000176200001440000000274314025150746022713 0ustar liggesusers LC - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LC - intersection (containment) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (20 180, 20 80, 180 80, 180 180, 20 180))) true LC - intersection (overlap) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (60 180, 60 80, 180 80, 180 180, 60 180))) true LC - equal with boundary intersection LINESTRING(0 0, 60 0, 60 60, 60 0, 120 0) MULTILINESTRING( (0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true rgeos/tests/testthat/testxml/validate/TestRelateLA.xml0000644000176200001440000007713414025150746022717 0ustar liggesusers L/A-3-1: a line touching the closing point of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.CP}] LINESTRING(150 150, 40 230) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-2: the start and end points of a LineString touching the boundary (at non-vertices) of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}] LINESTRING(40 40, 50 130, 130 130) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-3: the end point of a line touching the closing point of a polygon [dim(0){A.L.Bdy.EP = B.oBdy.CP}] LINESTRING(40 230, 150 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-4: an entire LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-EP = B.oBdy.NV-NV}] LINESTRING(210 150, 330 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-5: the start portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}] LINESTRING(200 150, 310 150, 360 220) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-6: the start portion and the end point of a LineString touching the boundary of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}, dim(0){A.L.Bdy.EP = B.A.oBdy.V}] LINESTRING(180 150, 250 150, 230 250, 370 250, 410 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-7: the middle portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.V-V = B.oBdy.NV-NV}] LINESTRING(210 210, 220 150, 320 150, 370 210) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-1: a line at non-vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-EP = B.A.Int}] LINESTRING(20 60, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-2: a line at non-vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-NV = B.A.Int}] LINESTRING(60 90, 310 180) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-3: a line at non-vertex crossing vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-EP = B.A.Int}] LINESTRING(90 210, 210 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-4: a line at non-vertex crossing vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.oBdy.CP}] LINESTRING(290 10, 130 170) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-5: a line at vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(30 100, 100 100, 180 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-6: a line at vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-V = B.A.Int}] LINESTRING(20 100, 100 100, 360 100, 410 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-7: a line at vertex crossing vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.V}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(90 210, 150 150, 210 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-1: an entire line within a polygon [dim(1){A.L.Int.SP-EP = B.A.Int}] LINESTRING(180 90, 280 120) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-2: a line within a polygon but the line's both ends touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}] LINESTRING(70 70, 80 20) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-3: a line within a polygon but the line's start point touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}] LINESTRING(130 20, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-4: a line within a polygon but the line's start point and middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.A.oBdy.NV}] LINESTRING(70 70, 80 20, 140 20, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-5: a line within a polygon but the line's middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.A.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(170 50, 170 20, 240 20, 260 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/Ah-2-1: a line outside a polygon [dim(1){A.L.Int.SP-EP = B.A.Ext}] LINESTRING(50 100, 140 190, 280 190) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-2-2: a line inside a polygon's hole [dim(1){A.L.Int.SP-EP = B.A.Ext.h}] LINESTRING(140 60, 180 100, 290 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-1: the start point of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}] LINESTRING(170 120, 210 80, 270 80) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-2: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}, dim(0){A.L.Bdy.SP = B.A.iBdy.CP}] LINESTRING(170 120, 260 50) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-1: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(190 90, 190 270) POLYGON( (190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true L/Ah-3-2: a line at a non-vertex crossing the boundary of a polygon where the closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true L/Ah-3-3: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-4: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-5: a line crossing polygon boundary where the closing point of the hole touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(190 90, 190 190, 190 270) POLYGON( (190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true L/Ah-3-6: a line at a vertex crossing the boundary of a polygon where closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true L/Ah-3-7: a line at a vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-8: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/A2h-3-1: the start point a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.SP = B.A.iBdy.TP}] LINESTRING(130 110, 180 110, 190 60) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-2: the interior (at a non-vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}] LINESTRING(80 110, 180 110) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-3: the interior (at a non-vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy1.TP}] LINESTRING(80 110, 180 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-4: the interior (at a non-vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}] LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/A2h-3-5: the start point a line touching the closing point and a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/A2h-3-6: the interior (at a vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 180 110) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-7: the interior (at a vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy1.TP}] LINESTRING(80 110, 130 110, 180 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-8: the interior (at a vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/mA-4-1: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-NV = B.2A1.Int}, dim (1){A.L.Int.NV-EP = B.2A2.Int}] LINESTRING(160 70, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true L/mA-4-2: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-V = B.2A1.Int}, dim (1){A.L.Int.V-EP = B.2A2.Int}] LINESTRING(160 70, 200 110, 280 190, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true L/mA-5-1: a line within two connected polygons [dim(1){A.L.Int = B.2A.Int}, dim(0){A.L.Int.NV = B.2A.Bdy.TP] LINESTRING(70 50, 70 150) MULTIPOLYGON( ( (0 0, 0 100, 140 100, 140 0, 0 0)), ( (20 170, 70 100, 130 170, 20 170))) true RL/A-3-1: a LinearRing touching a polygon's closing point [dim(0){A.RL.Int.CP = B.A.Bdy.CP}] LINESTRING(110 110, 20 200, 200 200, 110 110) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-2: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.Bdy.NV}] LINESTRING(150 70, 160 110, 200 60, 150 70) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-3: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.iBdy.NV}] LINESTRING(80 60, 120 40, 120 70, 80 60) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-4: a LinearRing on the boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.Bdy.SP-EP}] LINESTRING(20 20, 200 20, 110 110, 20 20) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-5: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.iBdy.SP-EP}] LINESTRING(110 90, 170 30, 50 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-6: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.oBdy.SP-NV}] LINESTRING(110 110, 170 50, 170 110, 110 110) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-7: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.iBdy.SP-NV}] LINESTRING(110 90, 70 50, 130 50, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-4-1: a LinearRing crossing a polygon [dim(1){A.RL.Int.CP-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.Bdy.NV}] LINESTRING(110 60, 20 150, 200 150, 110 60) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-4-2: a LinearRing crossing a polygon with a hole [dim(1){A.RL.Int.NV-NV = B.A.Int}, dim(0){A.RL.Int.NV = B.A.oBdy.CP}, dim(0){A.RL.Int.NV = B.A.iBdy.CP}, dim(0){A.RL.Int.NV = B.A.oBdy.NV}, dim(0){A.RL.Int.NV = B.A.iBdy.NV}] LINESTRING(110 130, 110 70, 200 100, 110 130) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-5-1: a LinearRing within a polygon [dim(1){A.RL.Int.SP-EP = B.A.Int}] LINESTRING(110 90, 160 40, 60 40, 110 90) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-5-2: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}] LINESTRING(110 100, 40 30, 180 30, 110 100) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-3: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.L.Int.CP = B.A.oBdy.CP}] LINESTRING(110 110, 180 30, 40 30, 110 110) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-4: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.RL.Int.CP = B.A.iBdy.CP}] LINESTRING(110 90, 180 30, 40 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-5: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(1){A.RL.Int.SP-NV = B.A.Bdy.iBdy.SP-V}] LINESTRING(110 90, 50 30, 180 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true nsL/A-3-1: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SP = B.A.Bdy.CP}] LINESTRING(110 110, 200 200, 200 110, 110 200) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-2: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPb = B.A.Bdy.CP}] LINESTRING(110 110, 200 200, 110 110, 20 200, 20 110, 200 110) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-3: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPo = B.A.Bdy.CP}] LINESTRING(110 110, 20 110, 200 110, 50 110, 110 170) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-4: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPx = B.A.Bdy.CP}] LINESTRING(110 110, 20 200, 110 200, 110 110, 200 200) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-5: a non-simple LineString touching a polygon [dim(1){A.nsL.Int.SPb-Vo = B.A.Bdy.SP-NV}] LINESTRING(110 110, 170 50, 20 200, 20 110, 200 110) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-4-1: a non-simple LineString crossing a polygon [dim(1){A.nsL.Int.V-V-NV = B.A.Int}, dim(1){A.nsL.SPx-V = B.A.Bdy.SP-NV}] LINESTRING(110 110, 180 40, 110 40, 110 180) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-5-1: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}] LINESTRING(110 60, 50 30, 170 30, 90 70) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-5-2: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}, dim(1){A.nsL.Int.SPx-V = B.A.Bdy.SP-NV}] LINESTRING(110 110, 180 40, 110 40, 110 110, 70 40) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/Ah: the self-crossing point of a non-simple LineString touching the closing point of the inner boundary of a polygon [dim(0){A.nsL.Int.V = B.A.iBdy.CP}] LINESTRING(230 70, 170 120, 190 60, 140 60, 170 120, 270 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true mL/A-3-1: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPb = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (200 200, 110 110, 20 210, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-3-2: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPo = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (60 180, 60 110, 160 110, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-3-3: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPx = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-1: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVb = B.A.Int}, dim(0){A.mL.Int.NVb = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-2: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVo = B.A.Int}, dim(0){A.mL.Int.NVo = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-3: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVx = B.A.Int}, dim(0){A.mL.Int.NVx = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 60, 110 160, 200 160)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-4: MultiLineString crossing a polygon [dim(1){A.mL.Int.Vb-Vb = B.A.Int}, dim(0){A.mL.Int.Vb = B.A.oBdy.CP}, dim(0){A.mL.Int.Vb = B.A.iBdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 60, 110 160, 200 160)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-5-1: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}] MULTILINESTRING( (110 100, 40 30, 180 30), (170 30, 110 90, 50 30)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-5-2: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}] MULTILINESTRING( (110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/mA-3-1: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPb = B.mA.Bdy.TP}] MULTILINESTRING( (20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true mL/mA-3-2: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPo = B.mA.Bdy.TP}] MULTILINESTRING( (20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true mL/mA-3-3: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPx = B.mA.Bdy.TP}] MULTILINESTRING( (20 110, 200 110), (110 110, 20 170, 20 130, 200 90)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true rgeos/tests/testthat/testxml/validate/TestRelateAC.xml0000644000176200001440000000110114025150746022663 0ustar liggesusers AC A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true rgeos/tests/testthat/testxml/validate/TestRelatePP.xml0000644000176200001440000000765714025150746022745 0ustar liggesusers P/P: same point [dim(0){A.P.Int = B.P.Int}] POINT(20 20) POINT(20 20) true P/P: different point [dim(0){A.P.Int = B.P.Ext}] POINT(20 20) POINT(40 60) true P/mP: different points [dim(0){A.P.Int = B.3P.Ext}] POINT(40 40) MULTIPOINT(20 20, 80 80, 20 120) true P/mP: point A within one of B points [dim(0){A.P.Int = B.3P1.Int}] POINT(20 20) MULTIPOINT(20 20, 80 80, 20 120) true mP/mP-1-1: same points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P2.Int = B.3P2.Int}, dim(0){A.3P3.Int = B.3P3.Int}] MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 80 60, 120 100) true mP/mP-1-2: same but different sequence of points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P1.Int = B.3P3.Int}, dim(0){A.3P3.Int = B.3P2.Int}] MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 120 100, 80 60) true mP/mP-2: different points [dim(0){A.4P.Int = B.4P.Ext}] MULTIPOINT(40 40, 60 100, 100 60, 120 120) MULTIPOINT(20 120, 60 60, 100 100, 140 40) true mP/mP-5-1: same points [dim(0){A.4P.Int = B.4P.Int}] MULTIPOINT(20 20, 80 70, 140 120, 200 170) MULTIPOINT(20 20, 80 70, 140 120, 200 170) true mP/mP-5-2: same points but different sequence [dim(0){A.4P.Int = B.4P.Int}] MULTIPOINT(20 20, 140 120, 80 70, 200 170) MULTIPOINT(80 70, 20 20, 200 170, 140 120) true mP/mP-5-3: some points same [dim(0){A.4P2.Int = B.2P1.Int}, dim(0){A.4P3.Int = B.2P2.Int}] MULTIPOINT(20 20, 80 70, 140 120, 200 170) MULTIPOINT(80 70, 140 120) true mP/mP-5-4: some points same, in a different sequence [dim(0){A.4P1.Int = B.2P2.Int}, dim(0){A.4P4.Int = B.2P1.Int}] MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(140 120, 80 70) true mP/mP-6-1: some points same, some different [dim(0){A.4P4.Int = B.3P2.Int}] MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(80 170, 140 120, 200 80) true mP/mP-6-2: dim(0){A.4P1.Int = B.4P4.Int}, dim(0){A.4P4.Int = B.4P2.Int} MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(80 170, 140 120, 200 80, 80 70) true rgeos/tests/testthat/testxml/validate/TestRelateAA-big.xml0000644000176200001440000000175114025150746023433 0ustar liggesusers A/A-6-18: a polygon overlapping a very skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true A/A-6-24: a polygon overlapping a very skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true rgeos/tests/testthat/testxml/validate/TestRelatePA.xml0000644000176200001440000003651314025150746022717 0ustar liggesusers P/A-2-1: a point outside a polygon [dim(0){A.P.Int = B.A.Ext}] POINT(20 20) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-2-2: a point outside a converx polygon [dim(0){A.P.Int = B.A.Ext}] POINT(70 170) POLYGON( (110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230)) true P/A-2-3: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}] POINT(110 130) POLYGON( (20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160)) true P/A-2-4: dim(0){A.P.Int = B.A.Ext} POINT(100 70) POLYGON( (20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150)) true P/A-2-5: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}] POINT(100 70) POLYGON( (20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) true P/A-3-1: a point on the closing point of a polygon [dim(0){A.P.Int = B.A.Bdy.CP}] POINT(60 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-2: a point on the boudary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.Bdy.NV}] POINT(110 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-3: a point on the boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.Bdy.V] POINT(160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-4: a point on the touching point of boudary [dim(0){A.P.Int = B.A.Bdy.TP}] POINT(100 150) POLYGON( (20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) true P/A-5: a point on the interior of a polygon [dim(0){A.P.Int = B.A.Int}] POINT(100 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/Ah-2-1: a point outside of polygon with a hole [dim(0){A.P.Int = B.A.Ext}] POINT(60 160) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-2-2: a point inside the hole of the polygon [dim(0){A.P.Int = B.A.Ext.h}] POINT(190 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-1: a point on the closing point of the outer boundary of a polygon with a hole [dim(0){A.P.Int = B.A.oBdy.CP}] POINT(190 190) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-2: a point on the outer boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.oBdy.V}] POINT(360 20) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-3: a point on the outer boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.oBdy.NV}] POINT(130 130) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-4: a point on the closing point of the inner boundary of a polygon [dim(0){A.P.Int = B.A.iBdy.CP}] POINT(280 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-5: a point on the inner boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.iBdy.NV}] POINT(150 100) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-6: a point on the inner boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.iBdy.V}] POINT(100 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-5: a point inside the interior of a polygon with a hole [dim(0){A.P.Int = B.A.Int}] POINT(140 120) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/A2h-3-1: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}] POINT(190 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true P/A2h-3-2: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}] POINT(180 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90)) true mP/A-2: 3 points outside a polygon [dim(0){A.2P.Int = B.A.Ext}] MULTIPOINT(20 80, 110 160, 20 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-1: one of 3 points on the closing point of the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}] MULTIPOINT(20 80, 60 120, 20 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-2: one of 3 points on the boundary of a polygon at a non-vertex [dim(0){A.3P3 = B.A.Bdy.NV}] MULTIPOINT(10 80, 110 170, 110 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-3: one of 3 points on the boundary of a polygon at a vertex [dim(0){A.3P1.Int = B.A.Bdy.V}] MULTIPOINT(10 80, 110 170, 160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-4: 3 of the 5 points on the boundary of a polygon [dim(0){A.5P2.Int = B.A.Bdy.CP}, dim(0){A.5P3.Int = B.A.Bdy.NV}, dim(0){A.5P4.Int = B.A.Bdy.V}] MULTIPOINT(20 120, 60 120, 110 120, 160 120, 200 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-5: all 3 points on the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Bdy.V}] MULTIPOINT(60 120, 110 120, 160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-6: all 4 points on the boundary of a polygon [dim(0){A.4P = B.A.Bdy}] MULTIPOINT(60 120, 160 120, 160 40, 60 40) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-1: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.CP}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(20 150, 60 120, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-2: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.V}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(110 80, 160 120, 200 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-3: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(110 80, 110 120, 110 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-4: 1 point outside a polygon, 1 point inside [dim(0){A.2P1.Int = B.A.Ext}, dim(0){A.2P2.Int = B.A.Int}] MULTIPOINT(110 170, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-5: 1 point outside a polygon, 2 points on the boundary and 1 point inside [dim(0){A.4P1.Int = B.A.Ext}, dim(0){A.4P2.Int = B.A.Bdy.CP}, dim(0){A.4P3.Int = B.A.Bdy.V}, dim(0){A.4P4.Int = B.A.Int}] MULTIPOINT(60 120, 160 120, 110 80, 110 170) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-5-1: 2 points within a polygon [dim(0){A.2P.Int = B.A.Int] MULTIPOINT(90 80, 130 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-5-2: 1 point on the boundary and 1 point inside a polygon [dim(0){A.2P1.Int = B.A.Bdy.CP}, dim(0){A.2P2.Int = B.A.Int}] MULTIPOINT(60 120, 160 120, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/Ah-2-1: 3 points outside a polygon [dim(0){A.3P.Int = B.Ah.Ext}] MULTIPOINT(40 170, 40 90, 130 170) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true mP/Ah-2-2: 2 points outside a polygon and 1 point inside the hole of the polygon [dim(0){A.3P1.Int = B.Ah.Ext}, dim(0){A.3P2.Int = B.Ah.Ext}, dim(0){A.3P3.Int = B.Ah.Ext.h}] MULTIPOINT(90 170, 280 170, 190 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true mP/Ah-2-3: all 3 points in polygon's hole [dim(0){A.3P.Int = B.Ah.Ext.h}] MULTIPOINT(190 110, 150 70, 230 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/mA-3-1: a point on the touching point of two polygons [dim(0){A.P.Int = B.2A.Bdy}] POINT(100 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-2: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.CP}] POINT(20 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-3: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.V}] POINT(60 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-4: a point touching a polygon's boundary where the boundaries touch at a point [dim(0){A.P.Int = B.2A.Bdy.TP}] POINT(110 110) MULTIPOLYGON( ( (110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ( (110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110))) true rgeos/tests/testthat/testxml/validate/TestRelateAA.xml0000644000176200001440000015046114025150746022677 0ustar liggesusers A/A-1-1: same polygons [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) true A/A-1-2: same polygons with reverse sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.EP-SP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 20, 140 20, 120 100, 20 100, 20 20)) true A/A-1-3: same polygons with different sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (120 100, 140 20, 20 20, 20 100, 120 100)) true A/A-1-4: same polygons with different number of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100)) true A/A-2: different polygons [dim(2){A.A.Int = B.A.Ext}] POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) true A/A-3-1-1: the closing point of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 140 200, 240 200, 240 120, 140 120)) true A/A-3-1-2: the closing point of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (80 180, 140 260, 260 200, 200 60, 80 180)) true A/A-3-1-3: the closing point of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (240 80, 140 120, 180 240, 280 200, 240 80)) true A/A-3-1-4: the boundary (at a non-vertex) of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) POLYGON( (140 40, 180 80, 120 100, 140 40)) true A/A-3-1-5: the boundary (at a non-vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) POLYGON( (120 100, 180 80, 130 40, 120 100)) true A/A-3-1-6: the boundary (at a vertex) of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 180 20, 140 140, 20 140, 20 20)) POLYGON( (180 100, 80 200, 180 280, 260 200, 180 100)) true A/A-3-1-7: the boundary (at a vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 140, 20 120, 0 220, 120 240, 140 140)) true A/A-3-1-8: the closing point of a polygon touching the boundary of another polygon where the closing point touching the boundary at a vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}] POLYGON( (160 200, 210 70, 120 70, 160 200)) POLYGON( (160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200)) true A/A-3-1-9: the closing point of a polygon touching the boundary of another polygon where the closing point intersecting the boundary at a non-vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}] POLYGON( (110 140, 200 70, 200 160, 110 140)) POLYGON( (110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140)) true A/A-3-2-1: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120)) POLYGON( (20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120)) true A/A-3-2-2: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120)) POLYGON( (20 120, 300 120, 140 240, 20 120)) true A/A-3-2-3: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) POLYGON( (100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140)) true A/A-3-2-4: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) POLYGON( (260 200, 180 80, 120 160, 200 160, 180 220, 260 200)) true A/A-3-2-5: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (0 140, 300 140, 140 240, 0 140)) true A/A-3-2-6: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (20 240, 20 140, 320 140, 180 240, 20 240)) true A/A-3-2-7: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240)) true A/A-3-3-1: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-NV}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (120 120, 220 20, 280 20, 240 160, 120 120)) true A/A-3-3-2: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 160 20, 260 120, 220 200, 140 120)) true A/A-3-3-3: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}] POLYGON( (20 140, 120 40, 20 40, 20 140)) POLYGON( (190 140, 190 20, 140 20, 20 140, 190 140)) true A/A-3-3-4: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (300 20, 220 20, 120 120, 260 160, 300 20)) true A/A-3-3-5: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 240 160, 280 60, 160 20, 140 120)) true A/A-3-3-6: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (280 60, 180 60, 120 120, 260 180, 280 60)) true A/A-3-3-7: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (120 200, 120 120, 40 120, 40 200, 120 200)) true A/A-3-3-8: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (160 220, 140 120, 60 120, 40 220, 160 220)) true A/A-3-3-9: two polygons touching along a boundary [dim(1){A.A.Bdy.V-EP = B.A.Bdy.V-SP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 20 120, 20 220, 140 220, 140 120)) true A/A-3-3-10: two polygons touching along a boundary [dim(1){A.A.Bdy.V-V = B.A.Bdy.NV-NV}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (320 20, 220 20, 80 160, 240 140, 320 20)) true A/A-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Int}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (60 40, 60 140, 180 140, 180 40, 60 40)) true A/A-5-2-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 80 140, 160 60, 20 20)) true A/A-5-2-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (160 60, 20 20, 100 140, 160 60)) true A/A-5-2-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 100, 140 160, 160 40, 20 100)) true A/A-5-2-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (160 40, 20 100, 160 160, 160 40)) true A/A-5-2-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 180, 180 120, 80 40, 20 180)) true A/A-5-2-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (180 120, 100 40, 20 180, 180 120)) true A/A-5-3-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 40, 140 120, 20 160, 80 80, 20 20)) true A/A-5-3-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 40, 140 140, 20 180, 80 100, 20 20)) true A/A-5-3-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (40 180, 60 100, 180 100, 200 180, 120 120, 40 180)) true A/A-5-3-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 180, 60 80, 180 80, 220 180, 120 120, 20 180)) true A/A-5-3-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60)) true A/A-5-3-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (60 100, 180 100, 220 180, 120 140, 20 180, 60 100)) true A/A-5-4-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.SP-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 140, 120 120, 120 40, 20 20)) true A/A-5-4-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V)}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 180, 140 140, 140 60, 20 20)) true A/A-5-4-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 120 40, 120 120, 20 140, 20 20)) true A/A-5-4-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (120 40, 20 20, 20 140, 120 120, 120 40)) true A/A-5-4-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 60, 140 140, 20 180, 20 20)) true A/A-5-4-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (140 60, 20 20, 20 180, 140 140, 140 60)) true A/A-5-4-7: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 60 120, 140 120, 180 20, 20 20)) true A/A-5-4-8: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 40, 120 40, 120 120, 20 140, 20 40)) true A/A-5-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}, dim(1){A.A.Bdy.(NV, V) = B.A.Bdy.(V, V)}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20)) true A/A-6-1: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}] POLYGON( (150 150, 330 150, 250 70, 70 70, 150 150)) POLYGON( (150 150, 270 150, 140 20, 20 20, 150 150)) true A/A-6-2: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}] POLYGON( (150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150)) POLYGON( (150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150)) true A/A-6-3: spiky polygons overlapping; boundary <-> boundary intersecting at 0 dimension [dim(2){A.A.Int = B.A.Int}] POLYGON( (20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20)) POLYGON( (190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true A/A-6-4: spiky polygons overlapping; boundary <-> boundary intersecting at 1 dimension at a few locations [dim(2){A.A.Int = B.A.Int}] POLYGON( (70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150)) POLYGON( (190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true A/A-6-5: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (60 160, 20 200, 260 200, 220 160, 140 80, 60 160)) true A/A-6-6: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (60 160, 20 200, 260 200, 140 80, 60 160)) true A/A-6-7: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 140 80, 260 200, 20 200)) true A/A-6-8: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 60 160, 140 80, 220 160, 260 200, 20 200)) true A/A-6-9: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 60 160, 140 80, 260 200, 20 200)) true A/A-6-10: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (0 0, 0 200, 200 200, 200 0, 0 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-11: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 0, 100 200, 200 200, 200 0, 100 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-12: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 0, 120 200, 200 200, 200 0, 120 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-13: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (0 0, 0 200, 110 200, 110 0, 0 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-14: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2100 110, 2100 100, 100 100)) true A/A-6-15: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-16: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-17: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-19: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 500 110, 500 100, 100 100)) true A/A-6-20: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-21: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 130 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-22: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 17 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-23: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-25: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (101 99, 101 1000000, 102 1000000, 101 99)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-26: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 200 101, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-26: two polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319)) POLYGON( (10 307, 22 307, 153 34, 22 34, 10 307)) true A/Ah-3-1: the closing point of a polygon touching the closing points of another polygon and its hole [dim(0){A.A.Bdy.CP = B.A.oBdy.CP}, dim(0){A.A.Bdy.CP = B.A.iBdy.CP}] POLYGON( (160 200, 210 70, 120 70, 160 200)) POLYGON( (160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200)) true A/Ah-3-2: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}] POLYGON( (170 120, 240 100, 260 50, 190 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-3: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}] POLYGON( (270 90, 200 50, 150 80, 210 120, 270 90)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-4: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}] POLYGON( (170 120, 260 100, 240 60, 150 80, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-5: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.NV}] POLYGON( (220 120, 270 80, 200 60, 160 100, 220 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-6: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.V}] POLYGON( (260 50, 180 70, 180 110, 260 90, 260 50)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-7: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}] POLYGON( (230 110, 290 80, 190 60, 140 90, 230 110)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-8: the boundary of a polygon touching the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (170 120, 330 120, 260 50, 100 50, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-9: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}] POLYGON( (170 120, 330 120, 280 70, 120 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-10: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}] POLYGON( (170 120, 300 120, 250 70, 120 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-11: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.V-V-V = B.A.iBdy.NV-V-NV}] POLYGON( (190 100, 310 100, 260 50, 140 50, 190 100)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-5-1: an entire polygon within another polygon which has a hole [dim(2){A.A.Ext = B.A.Int}, dim(2){A.A.Int = B.A.Int}] POLYGON( (280 130, 360 130, 270 40, 190 40, 280 130)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-2: an entire polygon within another polygon which has a hole [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}] POLYGON( (220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-3: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.iBdy.V-V}] POLYGON( (260 130, 360 130, 280 40, 170 40, 260 130)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-4: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.NV-NV}] POLYGON( (240 110, 340 110, 290 60, 190 60, 240 110)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-5: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.V-V}] POLYGON( (250 120, 350 120, 280 50, 180 50, 250 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true Ah/Ah-1-1: same polygons (with a hole) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) true A2h/A2h-1-1: same polygons (with two holes) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) true A/mA-3-1: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.CP = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}] POLYGON( (280 190, 330 150, 200 110, 150 150, 280 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-2: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A1.oBdy.CP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}] POLYGON( (80 190, 220 190, 140 110, 0 110, 80 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-3: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}] POLYGON( (330 150, 200 110, 150 150, 280 190, 330 150)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-4: a polygon touching multipolygon at one spoint [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}] POLYGON( (290 190, 340 150, 220 120, 170 170, 290 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-5: a polygon touching multipolygon along boundaries [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.SP-V = B.2A2.oBdy.V-V}, dim(1){A.A.oBdy.V-V = B.2A1.oBdy.V-SP}] POLYGON( (220 190, 340 190, 260 110, 140 110, 220 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-6: a polygon touching multipolygon along boundaries and at a point [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.V-NV = B.2A1.oBdy.NV-SP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}] POLYGON( (140 190, 220 190, 100 70, 20 70, 140 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-6-1: a polygon overlapping multipolygon [dim(2){A.A.Int = B.4A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (140 220, 60 140, 140 60, 220 140, 140 220)) MULTIPOLYGON( ( (100 20, 180 20, 180 100, 100 100, 100 20)), ( (20 100, 100 100, 100 180, 20 180, 20 100)), ( (100 180, 180 180, 180 260, 100 260, 100 180)), ( (180 100, 260 100, 260 180, 180 180, 180 100))) true mA/mA-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}] MULTIPOLYGON( ( (110 110, 70 200, 150 200, 110 110)), ( (110 110, 150 20, 70 20, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110))) true mAh/mAh-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}] MULTIPOLYGON( ( (110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-3-2: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-3-3: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}] MULTIPOLYGON( ( (110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-6-1: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-6-2: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true rgeos/tests/testthat/testxml/validate/TestRelatePL.xml0000644000176200001440000010652414025150746022732 0ustar liggesusers P/L-2: a point and a line disjoint [dim(0){A.P.Int = B.L.Ext}] POINT(110 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-3-1: a point touching the start point of a line [dim(0){A.P.Int = B.L.Bdy.SP}] POINT(90 80) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-3-2: a point touching the end point of a line [dim(0){A.P.Int = B.L.Bdy.EP}] POINT(340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-5-1: a point on the line at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}] POINT(230 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-5-2: a point on the line at a vertex [dim(0){A.P.Int = B.L.Int.V}] POINT(160 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/LR-2-1: a point outside a LinearRing [dim(0){A.P.Int = B.LR.Ext}] POINT(90 150) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-2-2: a point inside a LinearRing [dim(0){A.P.Int = B.LR.Ext}] POINT(150 80) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-1: a point on the closing point of a LinearRing [dim(0){A.P.Int = B.LR.Int.CP}] POINT(150 150) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-2: a point on a LinearRing at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}] POINT(100 20) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-3: a point on a LinearRing at a vertex [dim(0){A.P.Int = B.L.Int.V}] POINT(20 20) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/nsL.1-3-1: a point on a non-simple LineString's end point [dim(0){A.P.Int = B.nsL.Bdy.EP}] POINT(220 220) LINESTRING(110 110, 220 20, 20 20, 110 110, 220 220) true P/nsL.1-5-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 220 20, 20 20, 110 110, 220 220) true P/nsL.1-5-2: a point a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.1-5-3: a point on a non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(110 20) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.1-5-4: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(220 20) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.2-5-2: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(110 20) LINESTRING(220 220, 20 20, 220 20, 110 110) true P/nsL.2-5-3: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(20 20) LINESTRING(220 220, 20 20, 220 20, 110 110) true P/nsL.2-5-4: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(20 110) LINESTRING(20 200, 20 20, 110 20, 20 110, 110 200) true P/nsL.3-3-1: a point on a non-simple LineString's start point [dim(0){A.P.Int = B.nsL.Bdy.SP}] POINT(20 200) LINESTRING(20 200, 200 20, 20 20, 200 200) true P/nsL.3-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 110) LINESTRING(20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true P/nsL.3-5-2: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(20 200, 200 20, 20 20, 200 200) true P/nsL.3-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(80 140) LINESTRING(20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-4: a point on a non-simple LineString's interior at a two-vertex point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}] POINT(110 110) LINESTRING(20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-5: a point on a non-simple LineString's interior at a vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}] POINT(110 110) LINESTRING(20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-6: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true P/nsL.3-5-7: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 200 20, 20 20, 110 110, 200 200) true P/nsL.3-5-8: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true P/nsL.4-3-1: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.4-3-2: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.4-3-3:a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true P/nsL.4-3-4: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true P/nsL.4-3-5: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200) true P/nsL.4-3-6: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 20 20, 200 200) true P/nsL.4-3-7: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true P/nsL.4-3-8: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200) true P/nsL.5-3-1: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-2: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 110 200, 110 110) true P/nsL.5-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-5: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110) true P/nsL.6-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 160) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-2: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 160) LINESTRING(110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110) true P/nsL.7-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.7-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 20, 20 20, 110 110) true P/nsL.7-5-3: a point on a closed non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(140 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.7-5-4: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(110 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.8-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.8-5-2: a point on the interior (at a non-vertex) of a closed non-simple LineString [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(140 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.8-5-3: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(110 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.9-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true P/nsL.9-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true P/nsL.10-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true P/nsL.10-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true P/nsL.11-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(90 130) LINESTRING(200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true P/nsL.11-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true P/nsL.12-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true P/nsL.12-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true P/nsL.13-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110) true P/nsL.13-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110) true P/nsL.14-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110) true P/nsL.14-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110) true P/nsL.15-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 200 200) true P/nsL.15-5-2: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200) true P/nsL.15-5-3: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200) true P/nsL.16-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.16-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.17-5-3: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-4: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.17-5-5: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.18-5-1: a point on a non-simple LineString's start point with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb)}] POINT(110 200) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.18-5-2: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.18-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.19-5-1: a point on a non-simple LineString's closing point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.CPo}] POINT(110 200) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.19-5-2: a point on a non-simple LineString's interior at a non-vertex overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.19-5-3: a point on a non-simple LineString interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.20-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.20-5-2: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsl.20-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 200) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true mP/L-2-1: MultiPoint and a line disjoint (points on one side of the line) [dim(0){A.3P.Int = B.L.Ext}] MULTIPOINT(50 250, 90 220, 130 190) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-2-2: MultiPoint and a line disjoint (points over the line but no intersection) [dim(0){A.3P.Int = B.L.Ext}] MULTIPOINT(180 180, 230 130, 280 80) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-3-1: one of the points intersecting the start point of a line [dim(0){A.3P2.Int = B.L.Bdy.SP}] MULTIPOINT(50 120, 90 80, 130 40) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-3-2: one of the points intersecting the end point of a line [dim(0){A.3P2 = B.L.Bdy.EP}] MULTIPOINT(300 280, 340 240, 380 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-1: one of the points intersecting the interior of a line at a non-vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.NV] MULTIPOINT(230 150, 260 120, 290 90) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-2: one of the points intersecting the interior of a line at a non-vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.NV] MULTIPOINT(200 190, 240 150, 270 110) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-3: one of the points intersecting the interior of a line at a vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.V] MULTIPOINT(160 150, 190 120, 220 90) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-4: one of the points intersecting the interior of a line at a vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.V] MULTIPOINT(120 190, 160 150, 200 110) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-1: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Bdy.EP}] MULTIPOINT(90 80, 160 150, 340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-2: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}] MULTIPOINT(90 80, 160 150, 300 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-3: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(90 80, 160 150, 240 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-4: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(90 80, 130 120, 210 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-5: all the points on a line [dim(0){A.3P1.Int = B.L.Int.NV}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(130 120, 210 150, 340 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-6: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(160 150, 240 150, 340 210) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-7: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}] MULTIPOINT(160 150, 300 150, 340 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-8: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Bdy.EP}] MULTIPOINT(160 150, 240 150, 340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true rgeos/tests/testthat/testxml/validate/TestRelateLL.xml0000644000176200001440000015306014025150746022723 0ustar liggesusers L/L.1-3-1: touching at the start points of two lines [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}] LINESTRING(40 40, 120 120) LINESTRING(40 40, 60 120) true L/L.1-3-2: start point of one line touching end point of another line [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(40 40, 120 120) LINESTRING(60 240, 40 40) true L/L.1-3-3: start point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.SP = B.L.Int.NV}] LINESTRING(40 40, 180 180) LINESTRING(120 120, 20 200) true L/L.1-3-4: touching at the end points of two lines [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(40 40, 120 120) LINESTRING(60 240, 120 120) true L/L.1-3-5: end point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.EP = B.L.Int.NV}] LINESTRING(40 40, 180 180) LINESTRING(20 180, 140 140) true L/L.1-4-1: two lines crossing at non-vertex [dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(40 40, 120 120) LINESTRING(40 120, 120 40) true L/L.1-1-1: equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(40 40, 100 100) LINESTRING(40 40, 100 100) true L/L.1-1-2: equal lines but points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100) LINESTRING(100 100, 40 40) true L/L.1-2-1: dim(1){A.L.Int.SP-EP = B.L.Ext} LINESTRING(40 40, 120 120) LINESTRING(40 120, 120 160) true L/L.1-5-1: line A containing line B [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(20 20, 180 180) true L/L.1-5-2: line B is part of line A [dim(1){A.L.Int.SP-NV) = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(20 20, 110 110) true L/L.1-5-3: Line B is part of line A (in the middle portion) [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(50 50, 140 140) true L/L.1-6-1: start portions of two lines overlapping [dim(1){A.L.Int.SP-NV = B.L.Int.SP-NV] LINESTRING(180 180, 40 40) LINESTRING(120 120, 260 260) true L/L.1-6-2: end portions of two lines overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.NV-EP] LINESTRING(40 40, 180 180) LINESTRING(260 260, 120 120) true L/L.1-6-3: end portion of line A overlapping the start portion of line B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-NV] LINESTRING(40 40, 180 180) LINESTRING(120 120, 260 260) true L/L.2-3-1: two LineStrings touching at start points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(40 40, 20 100, 40 160, 20 200) true L/L.2-3-2: start point of LineStrings A touching the end point of LineString B [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(20 200, 40 160, 20 100, 40 40) true L/L.2-3-3: two LineStrings touching at end points [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(80 240, 200 120, 100 100, 40 40) LINESTRING(20 200, 40 160, 20 100, 40 40) true L/L.2-3-4: both the start and end points of LineString A touching the interior of LineString B at two vertices [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.V}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(20 20, 60 60, 250 160, 310 230) true L/L.2-3-5: both the start and end points of LineString A touching the interior of LineString B at two non-vertices [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.NV}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(20 20, 110 110, 200 110, 320 230) true L/L.2-3-6: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(60 110, 60 250, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-3-7: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}, dim(0){A.L.Bdy.EP = B.L.Bdy.SP}] LINESTRING(60 110, 60 250, 360 210) LINESTRING(360 210, 310 160, 110 160, 60 110) true L/L.2-3-8: start point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(160 160, 240 240) true L/L.2-3-9: end point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(240 240, 160 160) true L/L.2-3-10: both the start and end points of LineString B touching the interior of LineString A at two non-vertices [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 150, 110 100, 170 100, 110 230) true L/L.2-3-11: the start point of LineString B touching the interior of LineString A at a non-vertex and the end point of LineString A touching the interior of LineString B at a vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Int.V}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-3-12: start point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 120, 200 190, 150 240, 200 240) true L/L.2-3-13: end point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 240, 150 240, 200 200, 200 120) true L/L.2-3-14: both the start and end points of LineString B touching the interior of LineString A at two vertices [dim(0){A.L.Int.V = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 230, 80 140, 120 140, 140 230) true L/L.2-4-1: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(60 110, 200 110, 250 160, 300 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-2: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.EP}] LINESTRING(60 110, 200 110, 250 160, 300 210, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-3: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(60 110, 220 110, 250 160, 280 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-4: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.EP}] LINESTRING(60 110, 150 110, 200 160, 250 110, 360 110, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-5: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(130 160, 160 110, 220 110, 250 160, 250 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-6: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(130 160, 160 110, 190 110, 230 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-7: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-8: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-9: two LineStrings crossing at three points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 380 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-10: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 160, 160 110, 200 110, 250 160, 250 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-11: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 160, 180 110, 250 160, 320 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-12: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(140 160, 180 80, 220 160, 250 80) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-13: two LineStrings crossing at a vertex for one of the LineStrings [dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(20 130, 70 130, 160 40) true L/L.2-4-14: two LineStrings crossing at non-vertices for both of the LineStrings [dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(40 160, 40 100, 110 40, 170 40) true L/L.2-4-15: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(130 110, 180 160, 230 110, 280 160, 330 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-16: two LineStrings crossing at vertices for both LineString [dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(30 140, 80 140, 100 100, 200 30) true L/L.2-4-17: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 110, 110 160, 180 110, 250 160, 250 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-18: multiple crossings [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110) true L/L.2-4-19: spiky LineStrings with multiple crossing [dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200) LINESTRING(30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20) true L/L.2-1-1: two equal LineStrings with equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(40 40, 100 100, 200 120, 80 240) true L/L.2-1-2: two equal LineStrings with points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 240, 200 120, 100 100, 40 40) true L/L.2-1-3: two equal LineStrings with different number of points [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 240, 120 200, 200 120, 100 100, 80 80, 40 40) true L/L.2-2-1: disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(260 210, 240 130, 280 120, 260 40) true L/L.2-2-2: wrapping around but still disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}] LINESTRING(100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150) LINESTRING(140 130, 100 110, 120 60, 170 60) true L/L.2-5-1: LineString A containing LineString B, same pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-5-2: LineString A containing LineString B, LineString A with less points [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-5-3: LineString A containing LineString B [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160) true L/L.2-5-4: LineString A containing LineString B [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(110 160, 310 160, 340 190) true L/L.2-5-5: LineString A containing LineString B [dim(1){A.L.Int.V-NV = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(140 160, 250 160, 310 160, 340 190) true L/L.2-5-6: LineString A containing LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(110 160, 250 160, 310 160) true L/L.2-6-1: start portions of two LineStrings overlapping [dim(1){A.L.Int.SP-V = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 120, 100 100, 40 40, 140 80, 200 40) true L/L.2-6-2: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 100 100, 40 40) true L/L.2-6-3: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.NV-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 190, 140 140, 40 40) true L/L.2-6-4: end portions of two LineStrings overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(240 200, 200 260, 80 240, 140 180) true L/L.2-6-5: end portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(140 180, 80 240, 200 260, 240 200) true L/L.2-6-6: end portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.V-EP = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 80 240) true L/L.2-6-7: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-NV = B.L.Int.NV-V}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 80, 120 80, 200 80, 260 20) true L/L.2-6-8: middle portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(100 100, 200 120, 240 140, 280 240) true L/L.2-6-9: middle portion of LineString A overlapping end portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 100 100) true L/L.2-6-10: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-V = B.L.Int.V-V}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(80 20, 80 80, 240 80, 300 20) true L/L.2-6-11: middle portions of two LineStrings overlapping, multiple intersects [dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80) true L/LR-3-1: a LineString touching a LinearRing [dim(0){A.L.Bdy.SP = B.LR.Int.CP}] LINESTRING(100 100, 20 180, 180 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-1: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}] LINESTRING(20 100, 180 100, 100 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-2: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}] LINESTRING(100 40, 100 160, 180 160) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-3: a LineString crossing a LinearRing [dim(0){A.L.Int.V = B.LR.Int.CP}] LINESTRING(20 100, 100 100, 180 100, 100 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-1: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}] LINESTRING(100 100, 160 40) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-2: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}] LINESTRING(100 100, 180 20) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-3: a LineString within a LinearRing [dim(1){A.L.Int.SP-V-EP = B.LR.Int.NV-CP-NV}] LINESTRING(60 60, 100 100, 140 60) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-1: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-NV = B.LR.Int.SP-V}] LINESTRING(100 100, 190 10, 190 100) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-2: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-V = B.LR.Int.SP-NV}] LINESTRING(100 100, 160 40, 160 100) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-3: a LineString crossing a LinearRing [dim(1){A.L.Int.NV-V = B.LR.Int.SP-NV}] LINESTRING(60 140, 160 40, 160 140) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPb}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPo}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 140 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPb}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 20, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPo}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPx}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 20 140, 140 20, 80 20, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex [dim(0){A.L.Int.NV = B.nsL.Int.NV}] LINESTRING(20 20, 140 140) LINESTRING(20 140, 140 20, 100 20, 100 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVb}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 120 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVo}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVx}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 140, 80 20) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex [dim(0){A.L.Int.NV = B.nsL.Int.V}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 80 80, 20 80, 50 140, 50 60) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vb}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 120 80, 80 20, 80 80, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vo}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vx}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 140, 80 80, 80 20) true L/nsL.1-3-1: start point of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}] LINESTRING(130 150, 220 150, 220 240) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-2: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}] LINESTRING(30 150, 130 150, 250 150) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-3: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(30 150, 250 150) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-4: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}] LINESTRING(30 150, 130 150, 250 150) LINESTRING(130 240, 130 20, 30 20, 130 150) true L/nsL.1-4: a Line crossing a non-simple LineString at non-vertices [dim(0){A.L.Int.NV = B.nsL.Int.NV}] LINESTRING(30 150, 250 150) LINESTRING(120 240, 120 20, 20 20, 120 170) true nsL.5/L-3-1: switching the geometries for case L/nsL.5-3-1 [dim(0){A.nsL.Bdy.EPx = B.L.Bdy.SP}] LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) LINESTRING(110 110, 200 110) true L/nsL.5-3-2: the start point of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}] LINESTRING(110 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true L/nsL.5-3-3: the interior of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(20 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true nsL.5/L-3-4 touches dim(0){A.nsL.Bdy.EPx = B.L.Int.NV} LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) LINESTRING(20 110, 200 110) true L/nsL.10-6-1: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.EPx-NVx}] LINESTRING(90 200, 90 130, 110 110, 150 200) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true L/nsL.10-6-2: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.NVx-EPx}] LINESTRING(200 110, 110 110, 90 130, 90 200) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true L/mL-3-1: a line's end point touching a non-vertex with crossing line segments of a MultiLineString [dim(0){A.L.Bdy.SP = B.mL.Int.NVx] LINESTRING(80 80, 150 80, 210 80) MULTILINESTRING( (20 20, 140 140), (20 140, 140 20)) true LR/LR-1-1: two equal LinearRings, pointwise [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(40 80, 160 200, 260 20, 40 80) true LR/LR-1-2: two equal LinearRings with points in reverse sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.EP-SP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(40 80, 260 20, 160 200, 40 80) true LR/LR-1-3: two equal LinearRings with points in different sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.V = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(260 20, 40 80, 160 200, 260 20) true LR/LR-1-4: two equal LinearRings with different number of points [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.NV = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(100 140, 160 200, 260 20, 40 80, 100 140) true LR/LR-4-1: two LinearRings crossing at closing points [dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(100 100, 180 180, 20 180, 100 100) true LR/LR-4-2: two LinearRings crossing at two points [dim(0){A.LR.Int.CP = B.LR.Int.CP}, dim(0){A.LR.Int.V = B.LR.Int.V},] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 40, 170 20, 170 190, 40 150) true LR/LR-4-3: two LinearRings crossing at the closing and a non-vertex [dim(0){A.LR.Int.CP = B.LR.Int.NV}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(180 100, 20 100, 100 180, 180 100) true LR/LR-4-4: two LinearRings crossing at the closing and a vertex [dim(0){A.LR.Int.CP = B.LR.Int.V}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(180 180, 100 100, 20 180, 180 180) true LR/LR-4-5: two LinearRings crossing at a vertex and a non-vertex [dim(0){A.LR.Int.V = B.LR.Int.NV}] LINESTRING(20 180, 100 100, 20 20, 20 180) LINESTRING(100 20, 100 180, 180 100, 100 20) true LR/LR-4-6: two LinearRings crossing at two points [dim(0){A.LR.Int.V = B.LR.Int.NV}, dim(0){A.LR.Int.V = B.LR.Int.NV},] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(170 20, 20 170, 170 170, 170 20) true LR/LR-6-1: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.CP-V}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 150, 90 210, 40 150) true LR/LR-6-2: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.NV-NV}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(20 150, 170 150, 90 230, 20 150) true LR/LR-6-3: two LinearRings overlapping [dim(1){A.LR.Int.(V-V-V-EP) = B.LR.Int.(NV-V-V-SP)}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 150, 150 40, 20 40, 20 150, 40 150) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPb}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 200 200, 110 110, 20 200, 20 110, 200 110) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPo}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 20 110, 200 110, 50 110, 110 170) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPx}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 20 200, 110 200, 110 110, 200 200) true LR/nsL-6-1: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(200 20, 20 200, 200 200, 110 110, 110 40) true LR/nsL-6-2: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}, dim(1){A.nsL.Int.V-EP = B.nsL.Int.EP-NVx}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(200 20, 20 200, 200 200, 20 20) true nsL/nsL-4-1: non-simple LineStrings crossing at closing points [dim(0){A.nsL.Int.CP = B.nsL.Int.CP}] LINESTRING(110 110, 20 110, 110 20, 20 20, 110 110) LINESTRING(110 110, 200 200, 110 200, 200 110, 110 110) true nsL/nsL-4-2: non-simple LineStrings crossing at two points without vertices [dim(0){A.nsL.Int.NV = B.nsL.Int.NV}] LINESTRING(20 120, 120 120, 20 20, 120 20, 20 120) LINESTRING(170 100, 70 100, 170 170, 70 170, 170 100) true nsL/nsL-4-3: non-simple LineStrings crossing at a point [dim(0){A.nsL.Int.NV = B.nsL.Int.V}] LINESTRING(20 110, 110 110, 20 20, 110 20, 20 110) LINESTRING(110 160, 70 110, 60 160, 20 130, 110 160) true nsL/nsL-4-4: non-simple LineStrings crossing at self-crossing points [dim(0){A.nsL.Int.NVx = B.nsL.Int.NVx}] LINESTRING(20 200, 200 200, 20 20, 200 20, 20 200) LINESTRING(20 110, 200 110, 200 160, 20 60, 20 110) true nsL/nsL-4-5: non-simple LineStrings crossing at vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}] LINESTRING(20 110, 110 110, 20 20, 110 20, 20 110) LINESTRING(200 200, 110 110, 200 110, 110 200, 200 200) true nsL/nsL-4-6: non-simple LineStrings crossing at two points with vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}] LINESTRING(20 120, 120 120, 20 20, 120 20, 20 120) LINESTRING(220 120, 120 20, 220 20, 120 120, 220 120) true mL/mL-1: MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}] MULTILINESTRING( (70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) MULTILINESTRING( (70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) true mL/mL-1-1: non-simple MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) true mL/mL-1-2: equal non-simple MultiLineString with different sequence of lines and points [dim(1){A.mL.Int.SP-EP = B.mL.Int.EP-SP}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 140, 90 60, 90 20), (170 20, 130 20, 20 20)) true mL/mL-3-1: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPb}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90)) true mL/mL-3-2: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPo}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60)) true mL/mL-3-3: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60)) true mL/mL-3-4: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20)) true mL/mL-3-5: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true mL/mL-3-6: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPb}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true mL/mL-3-7: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPo}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20)) true mL/mL-3-8: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20)) true mL/mL-4-1: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vb}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60)) true mL/mL-4-2: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vo}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60)) true mL/mL-4-3: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vx}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 90 90, 160 60)) true rgeos/tests/testthat/testxml/general/0000755000176200001440000000000014025150746017514 5ustar liggesusersrgeos/tests/testthat/testxml/general/TestConvexHull.xml0000644000176200001440000001032314025150746023164 0ustar liggesusers Several points collinear and overlapping MULTIPOINT(130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240) LINESTRING(130 240, 650 240) Convex hull POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) POLYGON( (40 60, 40 320, 420 320, 420 60, 40 60)) Convex hull POLYGON( (10 10, 100 10, 100 100, 10 100, 10 10)) POLYGON( (10 10, 10 100, 100 100, 100 10, 10 10)) Point POINT(20 20) POINT(20 20) Horizontal Line LINESTRING(30 220, 240 220, 240 220) LINESTRING(30 220, 240 220) Vertical Line LINESTRING(110 290, 110 100, 110 100) LINESTRING(110 290, 110 100) Spiral LINESTRING(120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140) POLYGON( (140 50, 40 160, 60 310, 180 320, 240 230, 280 140, 140 50)) Starlike Polygon POLYGON( (200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360), (220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300)) POLYGON( (360 10, 100 190, 200 360, 490 230, 360 10)) Most of the points in one area MULTIPOINT(70 340, 70 50, 430 50, 420 340, 340 120, 390 110, 390 70, 350 100, 350 50, 370 90, 320 80, 360 120, 350 80, 390 90, 420 80, 410 60, 410 100, 370 100, 380 60, 370 80, 380 100, 360 80, 370 80, 380 70, 390 80, 390 70, 410 70, 400 60, 410 60, 410 60, 410 60, 370 70, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50) POLYGON( (70 50, 70 340, 420 340, 430 50, 70 50)) Multipoint MULTIPOINT(140 350, 510 140, 110 140, 250 290, 250 50, 300 370, 450 310, 440 160, 290 280, 220 160, 100 260, 320 230, 200 280, 360 130, 330 210, 380 80, 220 210, 380 310, 260 150, 260 110, 170 130) POLYGON( (250 50, 110 140, 100 260, 140 350, 300 370, 450 310, 510 140, 380 80, 250 50)) GeometryCollection GEOMETRYCOLLECTION( POINT(110 300), POINT(100 110), POINT(130 210), POINT(150 210), POINT(150 180), POINT(130 170), POINT(140 190), POINT(130 200), LINESTRING(240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON( (210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340), (230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270))) POLYGON( (240 50, 100 110, 110 300, 210 340, 360 240, 330 70, 240 50)) Collinear L MULTIPOINT(50 320, 50 280, 50 230, 50 160, 50 120, 100 120, 160 120, 210 120, 210 180, 210 150, 180 180, 140 180, 140 210, 140 260, 160 180, 140 300, 140 320, 110 320, 80 320) POLYGON( (50 120, 50 320, 140 320, 210 180, 210 120, 50 120)) rgeos/tests/testthat/testxml/general/TestRelateLC.xml0000644000176200001440000000302514025150746022531 0ustar liggesusers LC - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LC - intersection (containment) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (20 180, 20 80, 180 80, 180 180, 20 180))) true LC - intersection (overlap) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (60 180, 60 80, 180 80, 180 180, 60 180))) true LC - equal with boundary intersection LINESTRING(0 0, 60 0, 60 60, 60 0, 120 0) MULTILINESTRING( (0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true rgeos/tests/testthat/testxml/general/TestRelateLA.xml0000644000176200001440000000762214025150746022536 0ustar liggesusers LA - intersection at NV: {A-Bdy, A-Int} = {B-Bdy, B-Int} LINESTRING(100 120, 100 240) POLYGON( (40 60, 160 60, 160 180, 40 180, 40 60)) true LA - intersection at V: {A-Bdy, A-Int} = {B-Bdy, B-Int} LINESTRING(80 80, 140 140, 200 200) POLYGON( (40 40, 140 40, 140 140, 40 140, 40 40)) true LmA - intersection at NV, L contained in A LINESTRING(70 50, 70 150) MULTIPOLYGON( ( (0 0, 0 100, 140 100, 140 0, 0 0)), ( (20 170, 70 100, 130 170, 20 170))) true LA - A crosses B at {shell-NV, hole-V} LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true LA - A intersects B at {shell-NV}, B-Int, {hole-V} LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (111 110, 250 100, 140 30, 111 110)) true LA - A crosses B hole at {hole1-V, hole2-NV} LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true LA - A crosses B hole at {hole1-V}, B-Int, {hole2-NV} LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 131 40, 200 110, 130 180)) true LA - Line with endpoints in interior but crossing exterior of multipolygon LINESTRING(160 70, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true LA - Line with a very small piece in the exterior between parts of a multipolygon LINESTRING(100 140, 100 40) MULTIPOLYGON( ( (20 80, 180 79, 100 0, 20 80)), ( (20 160, 180 160, 100 80, 20 160))) true LA - Line contained completely and spanning parts of multipolygon LINESTRING(100 140, 100 40) MULTIPOLYGON( ( (20 80, 180 80, 100 0, 20 80)), ( (20 160, 180 160, 100 80, 20 160))) true LA - overlapping ring and triangle LINESTRING(110 60, 20 150, 200 150, 110 60) POLYGON( (20 20, 200 20, 110 110, 20 20)) true rgeos/tests/testthat/testxml/general/TestBoundary.xml0000644000176200001440000000472314025150746022667 0ustar liggesusers L - Line LINESTRING(10 10, 20 20) MULTIPOINT(10 10, 20 20) L - self-intersecting with boundary LINESTRING(40 40, 100 100, 180 100, 180 180, 100 180, 100 100) MULTIPOINT(40 40, 100 100) mL - 2 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 30)) MULTIPOINT(10 10, 30 30) mL - 3 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 20), (20 20, 30 30)) MULTIPOINT(10 10, 20 20, 30 20, 30 30) mL - 4 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40)) MULTIPOINT(10 10, 30 20, 30 30, 30 40) mL - 2 lines, one closed, with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20)) MULTIPOINT(10 10, 20 20) L - 1 line, self-intersecting, topologically equal to prev case MULTILINESTRING( (10 10, 20 20, 20 30, 30 30, 30 20, 20 20)) MULTIPOINT(10 10, 20 20) A - polygon with no holes POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60)) LINESTRING(40 60, 420 60, 420 320, 40 320, 40 60) A - polygon with 1 hole POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) MULTILINESTRING( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) rgeos/tests/testthat/testxml/general/TestValid2-big.xml0000644000176200001440000000113014025150746022751 0ustar liggesusers Test 92 POLYGON ((100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true Test 558 MULTIPOINT (-1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 0 0) true rgeos/tests/testthat/testxml/general/TestInteriorPoint.xml0000644000176200001440000000331514025150746023705 0ustar liggesusers P - single point POINT(10 10) POINT(10 10) P - single point MULTIPOINT (60 300, 200 200, 240 240, 200 300, 40 140, 80 240, 140 240, 100 160, 140 200, 60 200) POINT (140 240) L - linestring with single segment LINESTRING (0 0, 7 14) POINT (7 14) L - linestring with multiple segments LINESTRING (0 0, 3 15, 6 2, 11 14, 16 5, 16 18, 2 22) POINT (11 14) mL - complex linestrings MULTILINESTRING ((60 240, 140 300, 180 200, 40 140, 100 100, 120 220), (240 80, 260 160, 200 240, 180 340, 280 340, 240 180, 180 140, 40 200, 140 260)) POINT (180 200) A - box POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0)) POINT (5 5) mA - polygons with holes MULTIPOLYGON (((50 260, 240 340, 260 100, 20 60, 90 140, 50 260), (200 280, 140 240, 180 160, 240 140, 200 280)), ((380 280, 300 260, 340 100, 440 80, 380 280), (380 220, 340 200, 400 100, 380 220))) POINT (115 200) rgeos/tests/testthat/testxml/general/TestRelateAC.xml0000644000176200001440000000114114025150746022513 0ustar liggesusers AC A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true rgeos/tests/testthat/testxml/general/TestFunctionPLPrec.xml0000644000176200001440000000055314025150746023734 0ustar liggesusers PP - Point just off line. Causes non-robust algorithms to fail. LINESTRING(-123456789 -40, 381039468754763 123456789) POINT(0 0) false rgeos/tests/testthat/testxml/general/TestRelatePP.xml0000644000176200001440000000176114025150746022557 0ustar liggesusers same point POINT(20 20) POINT(20 20) true different point POINT(20 20) POINT(20 30) true some same, some different points MULTIPOINT(40 40, 80 60, 40 100) MULTIPOINT(40 40, 80 60, 120 100) true same points MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 80 60, 120 100) true rgeos/tests/testthat/testxml/general/TestCentroid.xml0000644000176200001440000001121614025150746022646 0ustar liggesusers P - single point POINT(10 10) POINT(10 10) mP - two points MULTIPOINT(10 10, 20 20 ) POINT(15 15) mP - 4 points MULTIPOINT(10 10, 20 20, 10 20, 20 10) POINT(15 15) L - single segment LINESTRING(10 10, 20 20) POINT(15 15) L - two segments LINESTRING (60 180, 120 100, 180 180) POINT (120 140) L - elongated horseshoe LINESTRING (80 0, 80 120, 120 120, 120 0)) POINT (100 69) mL - two single-segment lines MULTILINESTRING ((0 0, 0 100), (100 0, 100 100)) POINT (50 50) mL - two concentric rings, offset MULTILINESTRING ((0 0, 0 200, 200 200, 200 0, 0 0), (60 180, 20 180, 20 140, 60 140, 60 180)) POINT (90 110) mL - complicated symmetrical collection of lines MULTILINESTRING ((20 20, 60 60), (20 -20, 60 -60), (-20 -20, -60 -60), (-20 20, -60 60), (-80 0, 0 80, 80 0, 0 -80, -80 0), (-40 20, -40 -20), (-20 40, 20 40), (40 20, 40 -20), (20 -40, -20 -40)) POINT (0 0) A - box POLYGON ((40 160, 160 160, 160 40, 40 40, 40 160)) POINT (100 100) A - box with hole POLYGON ((0 200, 200 200, 200 0, 0 0, 0 200), (20 180, 80 180, 80 20, 20 20, 20 180)) POINT (116 100) A - box with offset hole (showing difference between area and line centroid) POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), (60 180, 20 180, 20 140, 60 140, 60 180)) POINT (103 98) A - box with 2 symmetric holes POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), (60 180, 20 180, 20 140, 60 140, 60 180), (180 60, 140 60, 140 20, 180 20, 180 60)) POINT (100 100) mA - symmetric angles MULTIPOLYGON (((0 40, 0 140, 140 140, 140 120, 20 120, 20 40, 0 40)), ((0 0, 0 20, 120 20, 120 100, 140 100, 140 0, 0 0))) POINT (70 70) GC - two adjacent polygons (showing that centroids are additive) GEOMETRYCOLLECTION (POLYGON ((0 200, 20 180, 20 140, 60 140, 200 0, 0 0, 0 200)), POLYGON ((200 200, 0 200, 20 180, 60 180, 60 140, 200 0, 200 200))) POINT (103 98) GC - heterogeneous collection of lines, points GEOMETRYCOLLECTION (LINESTRING (80 0, 80 120, 120 120, 120 0), MULTIPOINT (20 60, 40 80, 60 60)) POINT (100 69) GC - heterogeneous collection of polygons, line GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), LINESTRING (80 0, 80 80, 120 40)) POINT (20 20) GC - heterogeneous collection of polygons, lines, points GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), LINESTRING (80 0, 80 80, 120 40), MULTIPOINT (20 60, 40 80, 60 60)) POINT (20 20) GC - overlapping polygons GEOMETRYCOLLECTION (POLYGON ((20 100, 20 -20, 60 -20, 60 100, 20 100)), POLYGON ((-20 60, 100 60, 100 20, -20 20, -20 60))) POINT (40 40) rgeos/tests/testthat/testxml/general/TestConvexHull-big.xml0000644000176200001440000000134014025150746023722 0ustar liggesusers Big convex hull MULTIPOINT(-1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 0 0) POLYGON( (-1000000000000000000000000 -1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, -1000000000000000000000000 -1000000000000000000000000)) rgeos/tests/testthat/testxml/general/TestFunctionLL.xml0000644000176200001440000001712014025150746023114 0ustar liggesusers LL - A crosses B LINESTRING(0 0, 100 100) LINESTRING(0 100, 100 0) POINT(50 50) MULTILINESTRING( (0 0, 50 50), (0 100, 50 50), (50 50, 100 100), (50 50, 100 0)) MULTILINESTRING( (0 0, 50 50), (50 50, 100 100)) MULTILINESTRING( (0 0, 50 50), (0 100, 50 50), (50 50, 100 100), (50 50, 100 0)) LL - A shares one segment with B LINESTRING(0 0, 100 100, 200 0) LINESTRING(0 0, 100 100, 200 200) LINESTRING(0 0, 100 100) MULTILINESTRING( (0 0, 100 100), (100 100, 200 200), (100 100, 200 0)) LINESTRING(100 100, 200 0) MULTILINESTRING( (100 100, 200 200), (100 100, 200 0)) LL - A and B disjoint LINESTRING(40 360, 40 220, 120 360) LINESTRING(120 340, 60 220, 140 220, 140 360) MULTIPOINT(40 360, 120 360) POLYGON( (40 220, 40 360, 120 360, 40 220)) MULTILINESTRING( (40 360, 40 220, 120 360), (120 340, 60 220, 140 220, 140 360)) LINESTRING(40 360, 40 220, 120 360) MULTILINESTRING( (40 360, 40 220, 120 360), (120 340, 60 220, 140 220, 140 360)) LL - A and B intersect frequently LINESTRING(220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280) LINESTRING(220 240, 140 160, 120 180, 220 280, 200 300, 100 200) MULTIPOINT(220 240, 20 280) POLYGON( (160 180, 20 280, 60 320, 220 240, 160 180)) GEOMETRYCOLLECTION( POINT(113 213), POINT(133 233), POINT(137 197), POINT(153 253), POINT(157 217), POINT(177 237), LINESTRING(180 200, 160 180), LINESTRING(220 240, 200 220)) MULTILINESTRING( (113 213, 20 280), (133 233, 113 213), (113 213, 100 200), (137 197, 113 213), (153 253, 133 233), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (137 197, 157 217), (160 180, 140 160, 120 180, 137 197), (160 180, 137 197), (177 237, 220 280, 200 300, 153 253), (177 237, 153 253), (157 217, 177 237), (157 217, 180 200), (180 200, 160 180), (200 220, 177 237), (200 220, 180 200), (220 240, 200 220)) MULTILINESTRING( (200 220, 177 237), (177 237, 153 253), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (157 217, 180 200), (160 180, 137 197), (137 197, 113 213), (113 213, 20 280)) MULTILINESTRING( (200 220, 177 237), (177 237, 153 253), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (157 217, 180 200), (160 180, 137 197), (137 197, 113 213), (113 213, 20 280), (200 220, 180 200), (160 180, 140 160, 120 180, 137 197), (137 197, 157 217), (157 217, 177 237), (177 237, 220 280, 200 300, 153 253), (153 253, 133 233), (133 233, 113 213), (113 213, 100 200)) LL - A and B equal LINESTRING(80 320, 220 320, 220 160, 80 300) LINESTRING(80 320, 220 320, 220 160, 80 300) MULTIPOINT(80 320, 80 300) POLYGON( (220 160, 80 300, 80 320, 220 320, 220 160)) MULTILINESTRING( (220 160, 80 300), (80 320, 220 320), (220 320, 220 160)) MULTILINESTRING( (220 160, 80 300), (80 320, 220 320), (220 320, 220 160)) LL - A and B touch ends LINESTRING(60 200, 60 260, 140 200) LINESTRING(60 200, 60 140, 140 200) MULTIPOINT(60 200, 140 200) POLYGON( (60 200, 60 260, 140 200, 60 200)) MULTIPOINT(60 200, 140 200) MULTILINESTRING( (60 200, 60 260, 140 200), (60 200, 60 140, 140 200)) LINESTRING(60 200, 60 260, 140 200) MULTILINESTRING( (60 200, 60 260, 140 200), (60 200, 60 140, 140 200)) LL - intersecting rings LINESTRING(180 200, 100 280, 20 200, 100 120, 180 200) LINESTRING(100 200, 220 200, 220 80, 100 80, 100 200) POLYGON( (100 120, 20 200, 100 280, 180 200, 100 120)) MULTIPOINT(100 120, 180 200) MULTILINESTRING( (100 120, 180 200), (100 120, 100 200), (180 200, 100 280, 20 200, 100 120), (180 200, 220 200, 220 80, 100 80, 100 120), (100 200, 180 200)) MULTILINESTRING( (100 120, 180 200), (180 200, 100 280, 20 200, 100 120)) MULTILINESTRING( (100 120, 180 200), (100 120, 100 200), (180 200, 100 280, 20 200, 100 120), (180 200, 220 200, 220 80, 100 80, 100 120), (100 200, 180 200)) LrL - LinearRing bug LINEARRING(0 0, 0 5, 5 5, 5 0, 0 0) LINESTRING( 2 2, 5 5) POINT (5 5) rgeos/tests/testthat/testxml/general/TestRelatePA.xml0000644000176200001440000000333214025150746022534 0ustar liggesusers PA - disjoint POINT(20 20) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mPA - points in B: E, I MULTIPOINT(0 20, 40 20) POLYGON( (20 40, 20 0, 60 0, 60 40, 20 40)) true mPA - points in B: E, B MULTIPOINT(0 20, 20 20) POLYGON( (20 40, 20 0, 60 0, 60 40, 20 40)) true mPA - points in B: B, I MULTIPOINT(20 20, 40 20) POLYGON( (20 40, 20 0, 60 0, 60 40, 20 40)) true mPA - points in B: I, B, E MULTIPOINT(80 260, 140 260, 180 260) POLYGON( (40 320, 140 320, 140 200, 40 200, 40 320)) true PmA - point in B: mod-2 I POINT(40 40) MULTIPOLYGON( ( (0 40, 0 0, 40 0, 40 40, 0 40)), ( (40 80, 40 40, 80 40, 80 80, 40 80))) true rgeos/tests/testthat/testxml/general/TestFunctionPA.xml0000644000176200001440000000772214025150746023114 0ustar liggesusers PA - point contained in simple polygon POINT(100 100) POLYGON( (50 50, 200 50, 200 200, 50 200, 50 50)) POINT(100 100) mPmA - points on I, B and E of touching triangles MULTIPOLYGON( ( (120 320, 180 200, 240 320, 120 320)), ( (180 200, 240 80, 300 200, 180 200))) MULTIPOINT(120 320, 180 260, 180 320, 180 200, 300 200, 200 220) MULTILINESTRING( (120 320, 180 200, 240 320, 120 320), (180 200, 240 80, 300 200, 180 200)) POLYGON( (240 80, 120 320, 240 320, 300 200, 240 80)) MULTIPOINT(120 320, 180 200, 180 260, 180 320, 300 200) GEOMETRYCOLLECTION( POINT(200 220), POLYGON( (180 200, 120 320, 240 320, 180 200)), POLYGON( (180 200, 300 200, 240 80, 180 200))) MULTIPOLYGON( ( (180 200, 120 320, 240 320, 180 200)), ( (180 200, 300 200, 240 80, 180 200))) GEOMETRYCOLLECTION( POINT(200 220), POLYGON( (180 200, 120 320, 240 320, 180 200)), POLYGON( (180 200, 300 200, 240 80, 180 200))) mPmA - points on I, B and E of concentric doughnuts MULTIPOLYGON( ( (120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ( (200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) MULTIPOINT(200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200) MULTILINESTRING( (120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300), (200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220)) POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80)) MULTIPOINT(200 160, 220 180, 260 200, 340 120, 400 100, 420 340) GEOMETRYCOLLECTION( POINT(200 140), POINT(200 360), POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) MULTIPOLYGON( ( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) GEOMETRYCOLLECTION( POINT(200 140), POINT(200 360), POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) rgeos/tests/testthat/testxml/general/TestValid.xml0000644000176200001440000004423514025150746022145 0ustar liggesusers L - linear-ring bowtie LINEARRING(0 0, 100 100, 100 0, 0 100, 0 0) false L - linestring bowtie LINESTRING(0 0, 100 100, 100 0, 0 100, 0 0) true P - point POINT(10 10) true mP - no repeated points MULTIPOINT(10 10, 20 20, 30 30) true P - repeated points MULTIPOINT(10 10, 20 20, 30 30, 10 10) true L - no repeated points LINESTRING (40 180, 120 120, 140 200, 200 140, 240 200) true L - repeated points LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200) true L - linestring with two identical points LINESTRING(0 0, 0 0) false A - zero-area polygon POLYGON ((0 0, 0 0, 0 0, 0 0, 0 0)) false A - polygon with too few points POLYGON ((0 0, 10 0, 20 0, 0 0, 0 0)) false A - polygon with repeated point POLYGON ((107 246, 107 246, 250 285, 294 137, 151 90, 15 125, 157 174, 107 246)) true A - polygon with degenerate hole ring (A-B-A) POLYGON ((0 0, 0 240, 260 240, 260 0, 0 0), (220 200, 40 200, 40 20, 40 200, 220 200, 220 200)) false mA - multipolygon with component with too few points MULTIPOLYGON ( ((100 20, 180 20, 180 100, 100 100, 100 20)), ((20 100, 100 100, 100 180, 20 180, 20 100)), ((100 180, 180 180, 180 260, 100 260, 100 180)), ((180 100, 180 180, 180 180, 180 100))) false A - polygon self-intersects at non-vertex POLYGON ((0 40, 0 0, 40 40, 40 0, 0 40)) false A - polygon self-intersects at vertex MULTIPOLYGON ( ((0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40)) ) false A - polygon self-intersects at vertex/non-vertex POLYGON ((0 40, 20 20, 40 0, 40 40, 0 0, 0 40)) false A - hole self-intersects at non-vertex POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 0 0, 40 40, 40 0, 0 40)) false A - polygon self-intersects at vertex POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40)) false A - polygon self-intersects at vertex/non-vertex POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 0 0, 0 40)) false A - Valid doughnut POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40)) true A - shell has repeated points POLYGON ((0 60, 0 0, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40)) true A - shell touches hole without crossing it (valid) POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 60 20, 20 40)) true A - shell touches hole without crossing it, but does so twice (invalid) POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (0 40, 20 20, 60 20, 0 40)) false A - hole touches hole without crossing it (valid) POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), (100 100, 100 20, 120 20, 120 100, 100 100), (20 100, 20 40, 100 40, 20 100)) true A - holel touches hole without crossing it, but does so twice (invalid) POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), (100 100, 100 20, 120 20, 120 100, 100 100), (20 100, 20 40, 100 40, 80 60, 100 80, 20 100)) false A - hole touches hole without crossing it, but does so at an infinite number of points (invalid) POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), (100 100, 100 20, 120 20, 120 100, 100 100), (20 100, 20 40, 100 40, 100 80, 20 100)) false A - spike (invalid) POLYGON ((0 60, 0 0, 60 0, 60 20, 100 20, 60 20, 60 60, 0 60)) false A - puncture (invalid) POLYGON ((0 60, 0 0, 60 0, 60 20, 20 20, 60 20, 60 60, 0 60)) false A - hole within a hole (invalid) POLYGON ((0 140, 0 0, 180 0, 180 140, 0 140), (20 20, 160 20, 160 120, 20 120, 20 20), (40 100, 40 40, 140 40, 140 100, 40 100)) false A - hole overlapping shell at non-vertex POLYGON ((60 280, 260 180, 60 80, 60 280), (140 80, 120 180, 200 180, 140 80)) false A - shell self-overlaps POLYGON ((60 340, 60 100, 340 100, 340 280, 340 200, 340 340, 60 340)) false A - hole with repeated points POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260), (70 230, 80 230, 80 220, 80 220, 70 230)) true A - hole outside but adjacent to shell POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260), (180 160, 240 60, 120 60, 180 160)) false A - hole touches shell at two points POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), (140 180, 40 180, 140 260, 140 180)) false A - hole touches shell at one non-vertex point POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), (140 180, 40 180, 140 240, 140 180)) true A - hole touches shell at one vertex point POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), (140 180, 40 260, 140 240, 140 180)) true A - hole outside shell POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), (160 120, 180 100, 160 80, 160 120)) false A - hole identical to shell POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), (20 180, 20 20, 140 20, 140 180, 20 180)) false A - hole identical to shell POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), (20 180, 20 20, 140 20, 140 180, 20 180)) false A - hole self-intersects POLYGON ((380 340, 40 340, 40 20, 380 20, 380 340), (120 300, 300 280, 320 200, 160 140, 200 80, 320 120, 320 200, 360 60, 120 40, 120 300)) false A - holes overlap, first point is identical POLYGON ((20 320, 260 320, 260 20, 20 20, 20 320), (140 280, 80 100, 200 100, 140 280), (140 280, 40 80, 240 80, 140 280)) false A - holes do not overlap, first point is identical POLYGON ((20 320, 240 320, 240 40, 20 40, 20 320), (140 180, 60 120, 60 240, 140 180), (140 180, 200 120, 200 240, 140 180)) true A - shell self-touches at vertex POLYGON ((340 320, 340 200, 200 280, 200 80, 340 200, 340 20, 60 20, 60 340, 340 320)) false A - shell self-touches at non-vertex POLYGON ((300 320, 300 220, 260 260, 180 220, 360 220, 360 140, 120 140, 120 320, 300 320)) false A - chain of holes surrounds an island inside the polygon POLYGON ((40 300, 40 20, 280 20, 280 300, 40 300), (120 240, 80 180, 160 220, 120 240), (220 240, 160 220, 220 160, 220 240), (160 100, 80 180, 100 80, 160 100), (160 100, 220 160, 240 100, 160 100)) false A - chain of holes splits polygon in two (touching at vertices) POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320), (100 120, 40 20, 180 100, 100 120), (200 200, 180 100, 240 160, 200 200), (260 260, 240 160, 300 200, 260 260), (300 300, 300 200, 340 320, 300 300)) false A - chain of holes splits polygon in two (touching at non-vertex) POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320), (100 120, 40 20, 180 100, 100 120), (200 200, 180 100, 240 160, 200 200), (260 260, 240 160, 300 200, 260 260), (300 300, 300 200, 340 260, 300 300)) false A - holes touch in one point POLYGON ((190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true A - holes touch in one point POLYGON ((190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true A - hole disconnects interiors POLYGON ((0 0, 10 10, 10 0, 0 0), (5 5, 5 0, 10 5, 5 5)) false A - touching holes do NOT disconnect (isCCW bug) POLYGON ((60 40, 60 240, 460 240, 460 40, 60 40), (260 200, 340 60, 400 120, 260 200), (260 200, 120 100, 200 60, 260 200)) true mA - adjacent shells (shared vertices) MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), ((140 120, 40 120, 40 200, 140 200, 140 120))) false mA - adjacent shells (different vertices) MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), ((160 120, 60 120, 40 200, 140 200, 160 120))) false mA - nested overlapping shells MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)), ((120 240, 220 240, 220 140, 120 140, 120 240))) false mA - nested non-overlapping shells MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ((120 160, 140 160, 140 140, 120 160))) true mA - nested non-overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 180 240, 60 200, 180 160, 340 60, 240 220, 220 340)), ((180 240, 180 160, 240 220, 180 240))) true mA - nested overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 180 240, 60 200, 140 100, 340 60, 300 240, 220 340)), ((60 200, 340 60, 220 340, 60 200))) false mA - nested non-overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 80 320, 60 200, 140 100, 340 60, 300 240, 220 340)), ((60 200, 340 60, 220 340, 60 200))) true mA - nested overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 180 240, 60 200, 200 180, 340 60, 240 220, 220 340)), ((60 200, 340 60, 220 340, 60 200))) false mA - disconnected exterior MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)), ((20 100, 100 100, 100 180, 20 180, 20 100)), ((100 180, 180 180, 180 260, 100 260, 100 180)), ((180 100, 260 100, 260 180, 180 180, 180 100))) true mA - shells touch in single point MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), ((110 110, 150 20, 70 20, 110 110))) true mA - duplicate shells MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)), ((60 300, 320 220, 260 60, 60 100, 60 300))) false mA - shells are not nested but share all vertices MULTIPOLYGON (((180 60, 240 160, 300 60, 180 60)), ((80 80, 180 60, 160 140, 240 160, 360 140, 300 60, 420 100, 320 280, 120 260, 80 80))) true mA - shell is nested inside first hole MULTIPOLYGON (((0 0, 0 8, 8 8, 8 0, 0 0), (3 3, 7 3, 7 7, 3 7, 3 3), (1 1, 2 1, 2 2, 1 2, 1 1)), ((4 4, 4 6, 6 6, 6 4, 4 4))) true rgeos/tests/testthat/testxml/general/TestFunctionAA.xml0000644000176200001440000004324614025150746023076 0ustar liggesusers AA - simple polygons POLYGON( (10 10, 100 10, 100 100, 10 100, 10 10)) POLYGON( (50 50, 200 50, 200 200, 50 200, 50 50)) POLYGON( (50 50, 50 100, 100 100, 100 50, 50 50)) POLYGON( (10 10, 10 100, 50 100, 50 200, 200 200, 200 50, 100 50, 100 10, 10 10)) POLYGON( (10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)) MULTIPOLYGON( ( (10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)), ( (50 100, 50 200, 200 200, 200 50, 100 50, 100 100, 50 100))) AA - A with hole intersecting B POLYGON( (20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140)) POLYGON( (80 100, 220 100, 220 240, 80 240, 80 100)) POLYGON( (80 140, 80 160, 160 160, 160 100, 140 100, 140 140, 80 140)) POLYGON( (20 20, 20 160, 80 160, 80 240, 220 240, 220 100, 160 100, 160 20, 20 20), (80 100, 80 140, 40 140, 40 40, 140 40, 140 100, 80 100)) POLYGON( (20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)) MULTIPOLYGON( ( (20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)), ( (80 100, 80 140, 140 140, 140 100, 80 100)), ( (80 160, 80 240, 220 240, 220 100, 160 100, 160 160, 80 160))) AA - simple polygons #2 POLYGON( (20 340, 330 380, 50 40, 20 340)) POLYGON( (210 320, 140 270, 0 270, 140 220, 210 320)) POLYGON( (27 270, 140 270, 210 320, 140 220, 28 260, 27 270)) POLYGON( (20 340, 330 380, 50 40, 28 260, 0 270, 27 270, 20 340)) POLYGON( (20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)) MULTIPOLYGON( ( (20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)), ( (27 270, 28 260, 0 270, 27 270))) AA - simple polygons intersecting in P, L and A POLYGON((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0)) POLYGON((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0)) GEOMETRYCOLLECTION( POINT(110 260), LINESTRING(110 0, 110 60), POLYGON( (110 100, 40 140, 110 180, 180 140, 110 100))) POLYGON( (110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0), (110 260, 40 220, 110 180, 180 220, 110 260), (110 100, 40 60, 110 60, 180 60, 110 100)) POLYGON( (110 0, 0 0, 0 260, 110 260, 40 220, 110 180, 40 140, 110 100, 40 60, 110 60, 110 0)) POLYGON( (110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0), (110 260, 40 220, 110 180, 180 220, 110 260), (110 180, 40 140, 110 100, 180 140, 110 180), (110 100, 40 60, 110 60, 180 60, 110 100)) AA - simple polygons with two touching holes in their symDifference POLYGON( (0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0)) POLYGON( (230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0)) POLYGON( (120 0, 0 0, 0 190, 120 190, 230 190, 230 0, 120 0), (120 100, 50 50, 120 50, 190 50, 120 100), (120 100, 190 150, 120 150, 50 150, 120 100)) AmA - A simple, symDiff contains inversion POLYGON( (0 0, 210 0, 210 230, 0 230, 0 0)) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 90, 60 60, 90 60, 90 90, 60 90)), ( (70 120, 90 90, 100 120, 70 120)), ( (120 70, 90 90, 120 100, 120 70))) POLYGON( (0 0, 0 230, 210 230, 210 0, 0 0), (0 0, 40 20, 60 60, 20 40, 0 0), (60 60, 90 60, 90 90, 60 90, 60 60), (90 90, 120 70, 120 100, 90 90), (90 90, 100 120, 70 120, 90 90)) AmA - A simple, B connected multiPolygon touching A at vertex POLYGON( (0 0, 340 0, 340 300, 0 300, 0 0)) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 100, 60 60, 100 60, 100 100, 60 100))) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 60, 60 100, 100 100, 100 60, 60 60))) POLYGON( (0 0, 0 300, 340 300, 340 0, 0 0), (0 0, 40 20, 60 60, 20 40, 0 0), (60 60, 100 60, 100 100, 60 100, 60 60)) AmA - A simple, B connected multiPolygon touching A at interior of edge POLYGON( (0 0, 120 0, 120 120, 0 120, 0 0)) MULTIPOLYGON( ( (60 20, 0 20, 60 60, 60 20)), ( (60 100, 60 60, 100 60, 100 100, 60 100))) MULTIPOLYGON( ( (60 20, 0 20, 60 60, 60 20)), ( (60 60, 60 100, 100 100, 100 60, 60 60))) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20)) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20), (0 20, 60 20, 60 60, 0 20), (60 60, 100 60, 100 100, 60 100, 60 60)) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20), (0 20, 60 20, 60 60, 0 20), (60 60, 100 60, 100 100, 60 100, 60 60)) AA - simple polygons with holes POLYGON( (160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) POLYGON( (300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240)) POLYGON( (251 104, 217 57, 176 89, 210 130, 210 210, 172 226, 190 270, 217 285, 260 250, 263 218, 240 200, 240 110, 251 104)) MULTIPOLYGON( ( (217 57, 190 20, 60 40, 20 150, 60 260, 160 330, 217 285, 190 270, 172 226, 140 240, 80 190, 90 100, 160 70, 176 89, 217 57)), ( (217 57, 251 104, 290 80, 330 170, 290 240, 263 218, 260 250, 217 285, 300 330, 380 250, 380 50, 250 30, 217 57)), ( (263 218, 270 130, 251 104, 240 110, 240 200, 263 218)), ( (172 226, 210 210, 210 130, 176 89, 150 110, 150 170, 172 226))) AA - simple polygons with hole touching shell POLYGON ((20 0, 20 160, 200 160, 200 0, 20 0)) POLYGON ((220 80, 0 80, 0 240, 220 240, 220 80), (100 80, 120 120, 80 120, 100 80)) POLYGON ((20 80, 20 160, 200 160, 200 80, 100 80, 20 80), (100 80, 120 120, 80 120, 100 80)) POLYGON ((20 0, 20 80, 0 80, 0 240, 220 240, 220 80, 200 80, 200 0, 20 0)) MULTIPOLYGON (((20 0, 20 80, 100 80, 200 80, 200 0, 20 0)), ((100 80, 80 120, 120 120, 100 80))) MULTIPOLYGON (((20 0, 20 80, 100 80, 200 80, 200 0, 20 0)), ((200 80, 200 160, 20 160, 20 80, 0 80, 0 240, 220 240, 220 80, 200 80)), ((100 80, 80 120, 120 120, 100 80))) mAmA - complex polygons touching and overlapping MULTIPOLYGON( ( (120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ( (360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200))) MULTIPOLYGON( ( (100 220, 100 200, 300 200, 300 220, 100 220)), ( (280 180, 280 160, 300 160, 300 180, 280 180)), ( (220 140, 220 120, 240 120, 240 140, 220 140)), ( (180 220, 160 240, 200 240, 180 220))) MULTILINESTRING( (120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340), (360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200)) POLYGON( (220 100, 120 200, 120 340, 220 340, 360 200, 360 100, 220 100)) GEOMETRYCOLLECTION( POINT(200 240), LINESTRING(300 200, 220 200), LINESTRING(280 180, 300 180), LINESTRING(300 180, 300 160), LINESTRING(300 160, 280 160), LINESTRING(220 140, 240 140), LINESTRING(240 120, 220 120), POLYGON( (120 200, 120 220, 140 220, 140 200, 120 200)), POLYGON( (160 200, 160 220, 180 220, 180 200, 160 200)), POLYGON( (180 240, 180 220, 160 240, 180 240)), POLYGON( (200 200, 200 220, 220 220, 220 200, 200 200))) POLYGON( (120 220, 120 340, 220 340, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200, 200 200, 180 200, 160 200, 140 200, 120 200, 100 200, 100 220, 120 220), (200 240, 200 280, 180 280, 180 240, 200 240), (200 240, 180 220, 200 220, 200 240), (160 240, 160 280, 140 280, 140 220, 160 220, 160 240), (240 120, 300 120, 300 140, 240 140, 240 120)) MULTIPOLYGON( ( (120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240, 160 240, 160 280, 140 280, 140 220, 120 220)), ( (160 220, 160 240, 180 220, 160 220)), ( (300 200, 360 200, 360 100, 220 100, 220 120, 240 120, 300 120, 300 140, 240 140, 220 140, 220 160, 280 160, 300 160, 300 180, 280 180, 220 180, 220 200, 300 200))) MULTIPOLYGON( ( (120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240, 160 240, 160 280, 140 280, 140 220, 120 220)), ( (120 220, 120 200, 100 200, 100 220, 120 220)), ( (140 200, 140 220, 160 220, 160 200, 140 200)), ( (160 220, 160 240, 180 220, 160 220)), ( (180 200, 180 220, 200 220, 200 200, 180 200)), ( (180 220, 180 240, 200 240, 180 220)), ( (220 200, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200), (240 120, 300 120, 300 140, 240 140, 240 120))) mAmA - complex polygons touching MULTIPOLYGON( ( (100 200, 100 180, 120 180, 120 200, 100 200)), ( (60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ( (280 220, 240 180, 260 160, 300 200, 280 220))) MULTIPOLYGON( ( (80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ( (220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220))) MULTILINESTRING( (100 200, 100 180, 120 180, 120 200, 100 200), (60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220), (280 220, 240 180, 260 160, 300 200, 280 220)) POLYGON( (60 140, 60 240, 220 240, 280 220, 300 200, 260 160, 220 140, 60 140)) GEOMETRYCOLLECTION( POINT(240 180), POINT(260 160), POINT(280 220), POINT(300 200), LINESTRING(100 200, 100 180), LINESTRING(100 180, 120 180), LINESTRING(120 180, 120 200), LINESTRING(120 200, 100 200), LINESTRING(220 140, 220 160), LINESTRING(220 160, 160 160), LINESTRING(160 160, 160 180), LINESTRING(160 180, 200 180), LINESTRING(200 200, 160 200), LINESTRING(160 200, 160 220), LINESTRING(160 220, 220 220), LINESTRING(220 220, 220 240), LINESTRING(80 220, 80 160), LINESTRING(80 160, 140 160), LINESTRING(140 160, 140 220), LINESTRING(140 220, 80 220)) MULTIPOLYGON( ( (220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140), (200 200, 200 180, 220 180, 220 200, 200 200), (240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) MULTIPOLYGON( ( (100 180, 100 200, 120 200, 120 180, 100 180)), ( (220 140, 60 140, 60 240, 220 240, 220 220, 160 220, 160 200, 200 200, 200 180, 160 180, 160 160, 220 160, 220 140), (80 220, 80 160, 140 160, 140 220, 80 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) MULTIPOLYGON( ( (220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140), (200 200, 200 180, 220 180, 220 200, 200 200), (240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) AA - hole intersecting boundary to produce line POLYGON( (60 160, 140 160, 140 60, 60 60, 60 160)) POLYGON( (160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140)) LINESTRING(60 160, 140 160, 140 60, 60 60, 60 160) POLYGON( (60 60, 60 160, 140 160, 140 60, 60 60)) GEOMETRYCOLLECTION( LINESTRING(140 140, 140 120), POLYGON( (100 160, 140 160, 140 140, 120 140, 120 120, 140 120, 140 100, 100 100, 100 160))) POLYGON( (60 160, 100 160, 140 160, 160 160, 160 100, 140 100, 140 60, 60 60, 60 160)) MULTIPOLYGON( ( (60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)), ( (140 140, 140 120, 120 120, 120 140, 140 140))) MULTIPOLYGON( ( (60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)), ( (140 140, 140 160, 160 160, 160 100, 140 100, 140 120, 120 120, 120 140, 140 140))) rgeos/tests/testthat/testxml/general/TestValid2.xml0000644000176200001440000041145214025150746022226 0ustar liggesusers Test 1 LINESTRING (-123456789 -40, 381039468754763 123456789) true Test 2 POINT (0 0) true Test 3 POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20)) true Test 4 POLYGON ((20 20, 140 20, 120 100, 20 100, 20 20)) true Test 5 POLYGON ((120 100, 140 20, 20 20, 20 100, 120 100)) true Test 6 POLYGON ((20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100)) true Test 7 POLYGON ((0 0, 80 0, 80 80, 0 80, 0 0)) true Test 8 POLYGON ((100 200, 100 140, 180 140, 180 200, 100 200)) true Test 9 POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120)) true Test 10 POLYGON ((140 120, 140 200, 240 200, 240 120, 140 120)) true Test 11 POLYGON ((80 180, 140 260, 260 200, 200 60, 80 180)) true Test 12 POLYGON ((240 80, 140 120, 180 240, 280 200, 240 80)) true Test 13 POLYGON ((140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) true Test 14 POLYGON ((140 40, 180 80, 120 100, 140 40)) true Test 15 POLYGON ((120 100, 180 80, 130 40, 120 100)) true Test 16 POLYGON ((20 20, 180 20, 140 140, 20 140, 20 20)) true Test 17 POLYGON ((180 100, 80 200, 180 280, 260 200, 180 100)) true Test 18 POLYGON ((140 140, 20 120, 0 220, 120 240, 140 140)) true Test 19 POLYGON ((160 200, 210 70, 120 70, 160 200)) true Test 20 POLYGON ((160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200)) false Test 21 POLYGON ((110 140, 200 70, 200 160, 110 140)) true Test 22 POLYGON ((110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140)) false Test 23 POLYGON ((20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120)) true Test 24 POLYGON ((20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120)) true Test 25 POLYGON ((20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120)) true Test 26 POLYGON ((20 120, 300 120, 140 240, 20 120)) true Test 27 POLYGON ((20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) true Test 28 POLYGON ((100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140)) true Test 29 POLYGON ((260 200, 180 80, 120 160, 200 160, 180 220, 260 200)) true Test 30 POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) true Test 31 POLYGON ((0 140, 300 140, 140 240, 0 140)) true Test 32 POLYGON ((20 240, 20 140, 320 140, 180 240, 20 240)) true Test 33 POLYGON ((20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240)) true Test 34 POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120)) true Test 35 POLYGON ((120 120, 220 20, 280 20, 240 160, 120 120)) true Test 36 POLYGON ((140 120, 160 20, 260 120, 220 200, 140 120)) true Test 37 POLYGON ((20 140, 120 40, 20 40, 20 140)) true Test 38 POLYGON ((190 140, 190 20, 140 20, 20 140, 190 140)) true Test 39 POLYGON ((300 20, 220 20, 120 120, 260 160, 300 20)) true Test 40 POLYGON ((140 120, 240 160, 280 60, 160 20, 140 120)) true Test 41 POLYGON ((280 60, 180 60, 120 120, 260 180, 280 60)) true Test 42 POLYGON ((120 200, 120 120, 40 120, 40 200, 120 200)) true Test 43 POLYGON ((160 220, 140 120, 60 120, 40 220, 160 220)) true Test 44 POLYGON ((140 120, 20 120, 20 220, 140 220, 140 120)) true Test 45 POLYGON ((320 20, 220 20, 80 160, 240 140, 320 20)) true Test 46 POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20)) true Test 47 POLYGON ((60 40, 60 140, 180 140, 180 40, 60 40)) true Test 48 POLYGON ((20 20, 80 140, 160 60, 20 20)) true Test 49 POLYGON ((160 60, 20 20, 100 140, 160 60)) true Test 50 POLYGON ((20 100, 140 160, 160 40, 20 100)) true Test 51 POLYGON ((160 40, 20 100, 160 160, 160 40)) true Test 52 POLYGON ((20 180, 180 120, 80 40, 20 180)) true Test 53 POLYGON ((180 120, 100 40, 20 180, 180 120)) true Test 54 POLYGON ((20 20, 140 40, 140 120, 20 160, 80 80, 20 20)) true Test 55 POLYGON ((20 20, 140 40, 140 140, 20 180, 80 100, 20 20)) true Test 56 POLYGON ((40 180, 60 100, 180 100, 200 180, 120 120, 40 180)) true Test 57 POLYGON ((20 180, 60 80, 180 80, 220 180, 120 120, 20 180)) true Test 58 POLYGON ((40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60)) true Test 59 POLYGON ((60 100, 180 100, 220 180, 120 140, 20 180, 60 100)) true Test 60 POLYGON ((20 20, 20 140, 120 120, 120 40, 20 20)) true Test 61 POLYGON ((20 20, 20 180, 140 140, 140 60, 20 20)) true Test 62 POLYGON ((20 20, 120 40, 120 120, 20 140, 20 20)) true Test 63 POLYGON ((120 40, 20 20, 20 140, 120 120, 120 40)) true Test 64 POLYGON ((20 20, 140 60, 140 140, 20 180, 20 20)) true Test 65 POLYGON ((140 60, 20 20, 20 180, 140 140, 140 60)) true Test 66 POLYGON ((20 20, 60 120, 140 120, 180 20, 20 20)) true Test 67 POLYGON ((20 40, 120 40, 120 120, 20 140, 20 40)) true Test 68 POLYGON ((20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20)) true Test 69 POLYGON ((150 150, 330 150, 250 70, 70 70, 150 150)) true Test 70 POLYGON ((150 150, 270 150, 140 20, 20 20, 150 150)) true Test 71 POLYGON ((150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150)) true Test 72 POLYGON ((150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150)) true Test 73 POLYGON ((20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20)) true Test 74 POLYGON ((190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true Test 75 POLYGON ((70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150)) true Test 76 POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160)) true Test 77 POLYGON ((60 160, 20 200, 260 200, 220 160, 140 80, 60 160)) true Test 78 POLYGON ((60 160, 20 200, 260 200, 140 80, 60 160)) true Test 79 POLYGON ((20 200, 140 80, 260 200, 20 200)) true Test 80 POLYGON ((20 200, 60 160, 140 80, 220 160, 260 200, 20 200)) true Test 81 POLYGON ((20 200, 60 160, 140 80, 260 200, 20 200)) true Test 82 POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0)) true Test 83 POLYGON ((100 100, 1000000 110, 10000000 100, 100 100)) true Test 84 POLYGON ((100 0, 100 200, 200 200, 200 0, 100 0)) true Test 85 POLYGON ((120 0, 120 200, 200 200, 200 0, 120 0)) true Test 86 POLYGON ((0 0, 0 200, 110 200, 110 0, 0 0)) true Test 87 POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100)) true Test 88 POLYGON ((100 100, 2100 110, 2100 100, 100 100)) true Test 89 POLYGON ((100 100, 2101 110, 2101 100, 100 100)) true Test 90 POLYGON ((100 100, 200 200, 200 100, 100 100)) true Test 91 POLYGON ((100 100, 1000000 110, 1000000 100, 100 100)) true Test 93 POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100)) true Test 94 POLYGON ((100 100, 500 110, 500 100, 100 100)) true Test 95 POLYGON ((100 100, 501 110, 501 100, 100 100)) true Test 96 POLYGON ((120 100, 130 200, 200 200, 200 100, 120 100)) true Test 97 POLYGON ((120 100, 17 200, 200 200, 200 100, 120 100)) true Test 98 POLYGON ((101 99, 101 1000000, 102 1000000, 101 99)) true Test 99 POLYGON ((100 100, 200 101, 200 100, 100 100)) true Test 100 POLYGON ((16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319)) true Test 101 POLYGON ((10 307, 22 307, 153 34, 22 34, 10 307)) true Test 102 POLYGON ((160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200)) true Test 103 POLYGON ((170 120, 240 100, 260 50, 190 70, 170 120)) true Test 104 POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true Test 105 POLYGON ((270 90, 200 50, 150 80, 210 120, 270 90)) true Test 106 POLYGON ((170 120, 260 100, 240 60, 150 80, 170 120)) true Test 107 POLYGON ((220 120, 270 80, 200 60, 160 100, 220 120)) true Test 108 POLYGON ((260 50, 180 70, 180 110, 260 90, 260 50)) true Test 109 POLYGON ((230 110, 290 80, 190 60, 140 90, 230 110)) true Test 110 POLYGON ((170 120, 330 120, 260 50, 100 50, 170 120)) true Test 111 POLYGON ((170 120, 330 120, 280 70, 120 70, 170 120)) true Test 112 POLYGON ((170 120, 300 120, 250 70, 120 70, 170 120)) true Test 113 POLYGON ((190 100, 310 100, 260 50, 140 50, 190 100)) true Test 114 POLYGON ((280 130, 360 130, 270 40, 190 40, 280 130)) true Test 115 POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true Test 116 POLYGON ((220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80)) true Test 117 POLYGON ((260 130, 360 130, 280 40, 170 40, 260 130)) true Test 118 POLYGON ((240 110, 340 110, 290 60, 190 60, 240 110)) true Test 119 POLYGON ((250 120, 350 120, 280 50, 180 50, 250 120)) true Test 120 POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) true Test 121 POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) true Test 122 POLYGON ((280 190, 330 150, 200 110, 150 150, 280 190)) true Test 123 MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)), ((300 270, 420 270, 340 190, 220 190, 300 270))) true Test 124 POLYGON ((80 190, 220 190, 140 110, 0 110, 80 190)) true Test 125 POLYGON ((330 150, 200 110, 150 150, 280 190, 330 150)) true Test 126 POLYGON ((290 190, 340 150, 220 120, 170 170, 290 190)) true Test 127 POLYGON ((220 190, 340 190, 260 110, 140 110, 220 190)) true Test 128 POLYGON ((140 190, 220 190, 100 70, 20 70, 140 190)) true Test 129 POLYGON ((140 220, 60 140, 140 60, 220 140, 140 220)) true Test 130 MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)), ((20 100, 100 100, 100 180, 20 180, 20 100)), ((100 180, 180 180, 180 260, 100 260, 100 180)), ((180 100, 260 100, 260 180, 180 180, 180 100))) true Test 131 MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), ((110 110, 150 20, 70 20, 110 110))) true Test 132 MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110))) true Test 133 MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) true Test 134 MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true Test 135 MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) true Test 136 MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110))) true Test 137 MULTIPOLYGON (((110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true Test 138 POLYGON ((100 60, 140 100, 100 140, 60 100, 100 60)) true Test 139 MULTIPOLYGON (((80 40, 120 40, 120 80, 80 80, 80 40)), ((120 80, 160 80, 160 120, 120 120, 120 80)), ((80 120, 120 120, 120 160, 80 160, 80 120)), ((40 80, 80 80, 80 120, 40 120, 40 80))) true Test 140 LINESTRING (150 150, 40 230) true Test 141 POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150)) true Test 142 LINESTRING (40 40, 50 130, 130 130) true Test 143 LINESTRING (40 230, 150 150) true Test 144 LINESTRING (210 150, 330 150) true Test 145 LINESTRING (200 150, 310 150, 360 220) true Test 146 LINESTRING (180 150, 250 150, 230 250, 370 250, 410 150) true Test 147 LINESTRING (210 210, 220 150, 320 150, 370 210) true Test 148 LINESTRING (20 60, 150 60) true Test 149 LINESTRING (60 90, 310 180) true Test 150 LINESTRING (90 210, 210 90) true Test 151 LINESTRING (290 10, 130 170) true Test 152 LINESTRING (30 100, 100 100, 180 100) true Test 153 LINESTRING (20 100, 100 100, 360 100, 410 100) true Test 154 LINESTRING (90 210, 150 150, 210 90) true Test 155 LINESTRING (180 90, 280 120) true Test 156 LINESTRING (70 70, 80 20) true Test 157 LINESTRING (130 20, 150 60) true Test 158 LINESTRING (70 70, 80 20, 140 20, 150 60) true Test 159 LINESTRING (170 50, 170 20, 240 20, 260 60) true Test 160 LINESTRING (50 100, 140 190, 280 190) true Test 161 LINESTRING (140 60, 180 100, 290 100) true Test 162 LINESTRING (170 120, 210 80, 270 80) true Test 163 LINESTRING (170 120, 260 50) true Test 164 LINESTRING (190 90, 190 270) true Test 165 POLYGON ((190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true Test 166 LINESTRING (60 160, 150 70) true Test 167 POLYGON ((190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true Test 168 POLYGON ((190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true Test 169 LINESTRING (190 90, 190 190, 190 270) true Test 170 LINESTRING (60 160, 110 110, 150 70) true Test 171 POLYGON ((190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true Test 172 LINESTRING (130 110, 180 110, 190 60) true Test 173 POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true Test 174 LINESTRING (80 110, 180 110) true Test 175 POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true Test 176 LINESTRING (80 110, 170 110) true Test 177 POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true Test 178 LINESTRING (80 110, 130 110, 170 110) true Test 179 LINESTRING (80 110, 130 110, 180 110) true Test 180 LINESTRING (160 70, 320 230) true Test 181 LINESTRING (160 70, 200 110, 280 190, 320 230) true Test 182 LINESTRING (70 50, 70 150) true Test 183 MULTIPOLYGON (((0 0, 0 100, 140 100, 140 0, 0 0)), ((20 170, 70 100, 130 170, 20 170))) true Test 184 LINESTRING (110 110, 20 200, 200 200, 110 110) true Test 185 POLYGON ((20 20, 200 20, 110 110, 20 20)) true Test 186 LINESTRING (150 70, 160 110, 200 60, 150 70) true Test 187 LINESTRING (80 60, 120 40, 120 70, 80 60) true Test 188 POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true Test 189 LINESTRING (20 20, 200 20, 110 110, 20 20) true Test 190 LINESTRING (110 90, 170 30, 50 30, 110 90) true Test 191 LINESTRING (110 110, 170 50, 170 110, 110 110) true Test 192 LINESTRING (110 90, 70 50, 130 50, 110 90) true Test 193 LINESTRING (110 60, 20 150, 200 150, 110 60) true Test 194 LINESTRING (110 130, 110 70, 200 100, 110 130) true Test 195 LINESTRING (110 90, 160 40, 60 40, 110 90) true Test 196 LINESTRING (110 100, 40 30, 180 30, 110 100) true Test 197 POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true Test 198 LINESTRING (110 110, 180 30, 40 30, 110 110) true Test 199 LINESTRING (110 90, 180 30, 40 30, 110 90) true Test 200 LINESTRING (110 90, 50 30, 180 30, 110 90) true Test 201 LINESTRING (110 110, 200 200, 200 110, 110 200) true Test 202 POLYGON ((110 110, 200 20, 20 20, 110 110)) true Test 203 LINESTRING (110 110, 200 200, 110 110, 20 200, 20 110, 200 110) true Test 204 LINESTRING (110 110, 20 110, 200 110, 50 110, 110 170) true Test 205 LINESTRING (110 110, 20 200, 110 200, 110 110, 200 200) true Test 206 LINESTRING (110 110, 170 50, 20 200, 20 110, 200 110) true Test 207 LINESTRING (110 110, 180 40, 110 40, 110 180) true Test 208 LINESTRING (110 60, 50 30, 170 30, 90 70) true Test 209 LINESTRING (110 110, 180 40, 110 40, 110 110, 70 40) true Test 210 LINESTRING (230 70, 170 120, 190 60, 140 60, 170 120, 270 90) true Test 211 MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 210, 110 110)) true Test 212 MULTILINESTRING ((20 110, 200 110), (60 180, 60 110, 160 110, 110 110)) true Test 213 MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110)) true Test 214 MULTILINESTRING ((20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150)) true Test 215 MULTILINESTRING ((20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50)) true Test 216 MULTILINESTRING ((20 110, 200 110), (110 60, 110 160, 200 160)) true Test 217 MULTILINESTRING ((110 100, 40 30, 180 30), (170 30, 110 90, 50 30)) true Test 218 MULTILINESTRING ((110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80)) true Test 219 MULTILINESTRING ((20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150)) true Test 220 MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)), ((110 110, 20 200, 200 200, 110 110))) true Test 221 MULTILINESTRING ((20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110)) true Test 222 MULTILINESTRING ((20 110, 200 110), (110 110, 20 170, 20 130, 200 90)) true Test 223 LINESTRING (0 0, 0 50, 50 50, 50 0, 0 0) true Test 224 MULTILINESTRING ((0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true Test 225 LINESTRING (40 180, 140 180) true Test 226 MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((20 180, 20 80, 180 80, 180 180, 20 180))) false Test 227 MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((60 180, 60 80, 180 80, 180 180, 60 180))) false Test 228 LINESTRING (0 0, 60 0, 60 60, 60 0, 120 0) true Test 229 MULTILINESTRING ((0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true Test 230 LINESTRING (40 40, 120 120) true Test 231 LINESTRING (40 40, 60 120) true Test 232 LINESTRING (60 240, 40 40) true Test 233 LINESTRING (40 40, 180 180) true Test 234 LINESTRING (120 120, 20 200) true Test 235 LINESTRING (60 240, 120 120) true Test 236 LINESTRING (20 180, 140 140) true Test 237 LINESTRING (40 120, 120 40) true Test 238 LINESTRING (40 40, 100 100) true Test 239 LINESTRING (100 100, 40 40) true Test 240 LINESTRING (40 120, 120 160) true Test 241 LINESTRING (20 20, 180 180) true Test 242 LINESTRING (20 20, 110 110) true Test 243 LINESTRING (50 50, 140 140) true Test 244 LINESTRING (180 180, 40 40) true Test 245 LINESTRING (120 120, 260 260) true Test 246 LINESTRING (260 260, 120 120) true Test 247 LINESTRING (40 40, 100 100, 200 120, 80 240) true Test 248 LINESTRING (40 40, 20 100, 40 160, 20 200) true Test 249 LINESTRING (20 200, 40 160, 20 100, 40 40) true Test 250 LINESTRING (80 240, 200 120, 100 100, 40 40) true Test 251 LINESTRING (60 60, 60 230, 140 230, 250 160) true Test 252 LINESTRING (20 20, 60 60, 250 160, 310 230) true Test 253 LINESTRING (20 20, 110 110, 200 110, 320 230) true Test 254 LINESTRING (60 110, 60 250, 360 210) true Test 255 LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210) true Test 256 LINESTRING (360 210, 310 160, 110 160, 60 110) true Test 257 LINESTRING (160 160, 240 240) true Test 258 LINESTRING (240 240, 160 160) true Test 259 LINESTRING (60 150, 110 100, 170 100, 110 230) true Test 260 LINESTRING (200 120, 200 190, 150 240, 200 240) true Test 261 LINESTRING (200 240, 150 240, 200 200, 200 120) true Test 262 LINESTRING (60 230, 80 140, 120 140, 140 230) true Test 263 LINESTRING (60 110, 200 110, 250 160, 300 210) true Test 264 LINESTRING (60 110, 200 110, 250 160, 300 210, 360 210) true Test 265 LINESTRING (60 110, 220 110, 250 160, 280 110) true Test 266 LINESTRING (60 110, 150 110, 200 160, 250 110, 360 110, 360 210) true Test 267 LINESTRING (130 160, 160 110, 220 110, 250 160, 250 210) true Test 268 LINESTRING (130 160, 160 110, 190 110, 230 210) true Test 269 LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210) true Test 270 LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210) true Test 271 LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 380 210) true Test 272 LINESTRING (110 160, 160 110, 200 110, 250 160, 250 210) true Test 273 LINESTRING (110 160, 180 110, 250 160, 320 110) true Test 274 LINESTRING (140 160, 180 80, 220 160, 250 80) true Test 275 LINESTRING (40 40, 100 100, 200 120, 130 190) true Test 276 LINESTRING (20 130, 70 130, 160 40) true Test 277 LINESTRING (40 160, 40 100, 110 40, 170 40) true Test 278 LINESTRING (130 110, 180 160, 230 110, 280 160, 330 110) true Test 279 LINESTRING (30 140, 80 140, 100 100, 200 30) true Test 280 LINESTRING (110 110, 110 160, 180 110, 250 160, 250 110) true Test 281 LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140) true Test 282 LINESTRING (20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110) true Test 283 LINESTRING (20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200) true Test 284 LINESTRING (30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20) true Test 285 LINESTRING (80 240, 120 200, 200 120, 100 100, 80 80, 40 40) true Test 286 LINESTRING (260 210, 240 130, 280 120, 260 40) true Test 287 LINESTRING (100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150) true Test 288 LINESTRING (140 130, 100 110, 120 60, 170 60) true Test 289 LINESTRING (60 110, 110 160, 310 160, 360 210) true Test 290 LINESTRING (60 110, 110 160, 250 160) true Test 291 LINESTRING (110 160, 310 160, 340 190) true Test 292 LINESTRING (140 160, 250 160, 310 160, 340 190) true Test 293 LINESTRING (110 160, 250 160, 310 160) true Test 294 LINESTRING (200 120, 100 100, 40 40, 140 80, 200 40) true Test 295 LINESTRING (280 240, 240 140, 200 120, 100 100, 40 40) true Test 296 LINESTRING (80 190, 140 140, 40 40) true Test 297 LINESTRING (240 200, 200 260, 80 240, 140 180) true Test 298 LINESTRING (140 180, 80 240, 200 260, 240 200) true Test 299 LINESTRING (280 240, 240 140, 200 120, 80 240) true Test 300 LINESTRING (20 80, 120 80, 200 80, 260 20) true Test 301 LINESTRING (100 100, 200 120, 240 140, 280 240) true Test 302 LINESTRING (280 240, 240 140, 200 120, 100 100) true Test 303 LINESTRING (80 20, 80 80, 240 80, 300 20) true Test 304 LINESTRING (20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80) true Test 305 LINESTRING (100 100, 20 180, 180 180) true Test 306 LINESTRING (100 100, 180 20, 20 20, 100 100) true Test 307 LINESTRING (20 100, 180 100, 100 180) true Test 308 LINESTRING (100 40, 100 160, 180 160) true Test 309 LINESTRING (20 100, 100 100, 180 100, 100 180) true Test 310 LINESTRING (100 100, 160 40) true Test 311 LINESTRING (100 100, 180 20) true Test 312 LINESTRING (60 60, 100 100, 140 60) true Test 313 LINESTRING (100 100, 190 10, 190 100) true Test 314 LINESTRING (100 100, 160 40, 160 100) true Test 315 LINESTRING (60 140, 160 40, 160 140) true Test 316 LINESTRING (20 20, 140 140) true Test 317 LINESTRING (80 80, 20 80, 140 80, 80 20, 80 140) true Test 318 LINESTRING (80 80, 20 80, 140 80) true Test 319 LINESTRING (80 80, 140 80, 80 20, 80 140) true Test 320 LINESTRING (80 80, 20 80, 140 80, 80 20, 80 80) true Test 321 LINESTRING (80 80, 20 80, 140 80, 80 80) true Test 322 LINESTRING (80 80, 20 80, 20 140, 140 20, 80 20, 80 80) true Test 323 LINESTRING (20 140, 140 20, 100 20, 100 80) true Test 324 LINESTRING (140 80, 20 80, 120 80, 80 20, 80 140) true Test 325 LINESTRING (140 80, 20 80, 140 80) true Test 326 LINESTRING (140 80, 20 80, 80 140, 80 20) true Test 327 LINESTRING (140 80, 80 80, 20 80, 50 140, 50 60) true Test 328 LINESTRING (140 80, 20 80, 120 80, 80 20, 80 80, 80 140) true Test 329 LINESTRING (140 80, 20 80, 80 80, 140 80) true Test 330 LINESTRING (140 80, 20 80, 80 140, 80 80, 80 20) true Test 331 LINESTRING (130 150, 220 150, 220 240) true Test 332 LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150) true Test 333 LINESTRING (30 150, 130 150, 250 150) true Test 334 LINESTRING (30 150, 250 150) true Test 335 LINESTRING (130 240, 130 20, 30 20, 130 150) true Test 336 LINESTRING (120 240, 120 20, 20 20, 120 170) true Test 337 LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true Test 338 LINESTRING (110 110, 200 110) true Test 339 LINESTRING (20 110, 200 110) true Test 340 LINESTRING (90 200, 90 130, 110 110, 150 200) true Test 341 LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true Test 342 LINESTRING (200 110, 110 110, 90 130, 90 200) true Test 343 LINESTRING (80 80, 150 80, 210 80) true Test 344 MULTILINESTRING ((20 20, 140 140), (20 140, 140 20)) true Test 345 LINESTRING (40 80, 160 200, 260 20, 40 80) true Test 346 LINESTRING (40 80, 260 20, 160 200, 40 80) true Test 347 LINESTRING (260 20, 40 80, 160 200, 260 20) true Test 348 LINESTRING (100 140, 160 200, 260 20, 40 80, 100 140) true Test 349 LINESTRING (100 100, 180 180, 20 180, 100 100) true Test 350 LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150) true Test 351 LINESTRING (40 150, 150 40, 170 20, 170 190, 40 150) true Test 352 LINESTRING (180 100, 20 100, 100 180, 180 100) true Test 353 LINESTRING (180 180, 100 100, 20 180, 180 180) true Test 354 LINESTRING (20 180, 100 100, 20 20, 20 180) true Test 355 LINESTRING (100 20, 100 180, 180 100, 100 20) true Test 356 LINESTRING (170 20, 20 170, 170 170, 170 20) true Test 357 LINESTRING (40 150, 150 150, 90 210, 40 150) true Test 358 LINESTRING (20 150, 170 150, 90 230, 20 150) true Test 359 LINESTRING (40 150, 150 150, 150 40, 20 40, 20 150, 40 150) true Test 360 LINESTRING (110 110, 200 20, 20 20, 110 110) true Test 361 LINESTRING (200 20, 20 200, 200 200, 110 110, 110 40) true Test 362 LINESTRING (200 20, 20 200, 200 200, 20 20) true Test 363 LINESTRING (110 110, 20 110, 110 20, 20 20, 110 110) true Test 364 LINESTRING (110 110, 200 200, 110 200, 200 110, 110 110) true Test 365 LINESTRING (20 120, 120 120, 20 20, 120 20, 20 120) true Test 366 LINESTRING (170 100, 70 100, 170 170, 70 170, 170 100) true Test 367 LINESTRING (20 110, 110 110, 20 20, 110 20, 20 110) true Test 368 LINESTRING (110 160, 70 110, 60 160, 20 130, 110 160) true Test 369 LINESTRING (20 200, 200 200, 20 20, 200 20, 20 200) true Test 370 LINESTRING (20 110, 200 110, 200 160, 20 60, 20 110) true Test 371 LINESTRING (200 200, 110 110, 200 110, 110 200, 200 200) true Test 372 LINESTRING (220 120, 120 20, 220 20, 120 120, 220 120) true Test 373 MULTILINESTRING ((70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) true Test 374 MULTILINESTRING ((20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) true Test 375 MULTILINESTRING ((90 140, 90 60, 90 20), (170 20, 130 20, 20 20)) true Test 376 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90)) true Test 377 MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60)) true Test 378 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60)) true Test 379 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20)) true Test 380 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true Test 381 MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20)) true Test 382 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20)) true Test 383 MULTILINESTRING ((20 20, 90 90, 20 160), (90 160, 90 20)) true Test 384 MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60)) true Test 385 MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60)) true Test 386 MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 90 90, 160 60)) true Test 387 POINT (20 20) true Test 388 POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120)) true Test 389 POINT (70 170) true Test 390 POLYGON ((110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230)) true Test 391 POINT (110 130) true Test 392 POLYGON ((20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160)) true Test 393 POINT (100 70) true Test 394 POLYGON ((20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150)) true Test 395 POLYGON ((20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) false Test 396 POINT (60 120) true Test 397 POINT (110 120) true Test 398 POINT (160 120) true Test 399 POINT (100 150) true Test 400 POINT (100 80) true Test 401 POINT (60 160) true Test 402 POLYGON ((190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true Test 403 POINT (190 90) true Test 404 POINT (190 190) true Test 405 POINT (360 20) true Test 406 POINT (130 130) true Test 407 POINT (280 50) true Test 408 POINT (150 100) true Test 409 POINT (100 50) true Test 410 POINT (140 120) true Test 411 POINT (190 50) true Test 412 POLYGON ((190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true Test 413 POINT (180 90) true Test 414 POLYGON ((190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90)) true Test 415 MULTIPOINT (20 80, 110 160, 20 160) true Test 416 MULTIPOINT (20 80, 60 120, 20 160) true Test 417 MULTIPOINT (10 80, 110 170, 110 120) true Test 418 MULTIPOINT (10 80, 110 170, 160 120) true Test 419 MULTIPOINT (20 120, 60 120, 110 120, 160 120, 200 120) true Test 420 MULTIPOINT (60 120, 110 120, 160 120) true Test 421 MULTIPOINT (60 120, 160 120, 160 40, 60 40) true Test 422 MULTIPOINT (20 150, 60 120, 110 80) true Test 423 MULTIPOINT (110 80, 160 120, 200 160) true Test 424 MULTIPOINT (110 80, 110 120, 110 160) true Test 425 MULTIPOINT (110 170, 110 80) true Test 426 MULTIPOINT (60 120, 160 120, 110 80, 110 170) true Test 427 MULTIPOINT (90 80, 130 80) true Test 428 MULTIPOINT (60 120, 160 120, 110 80) true Test 429 MULTIPOINT (40 170, 40 90, 130 170) true Test 430 MULTIPOINT (90 170, 280 170, 190 90) true Test 431 MULTIPOINT (190 110, 150 70, 230 70) true Test 432 POINT (100 100) true Test 433 MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)), ((100 180, 100 100, 180 100, 180 180, 100 180))) true Test 434 POINT (20 100) true Test 435 POINT (60 100) true Test 436 POINT (110 110) true Test 437 MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ((110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110))) true Test 438 POINT (110 200) true Test 439 LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240) true Test 440 POINT (90 80) true Test 441 POINT (340 240) true Test 442 POINT (230 150) true Test 443 POINT (160 150) true Test 444 POINT (90 150) true Test 445 LINESTRING (150 150, 20 20, 280 20, 150 150) true Test 446 POINT (150 80) true Test 447 POINT (150 150) true Test 448 POINT (100 20) true Test 449 POINT (220 220) true Test 450 LINESTRING (110 110, 220 20, 20 20, 110 110, 220 220) true Test 451 LINESTRING (110 110, 220 20, 20 20, 220 220) true Test 452 POINT (110 20) true Test 453 POINT (220 20) true Test 454 LINESTRING (220 220, 20 20, 220 20, 110 110) true Test 455 POINT (20 110) true Test 456 LINESTRING (20 200, 20 20, 110 20, 20 110, 110 200) true Test 457 POINT (20 200) true Test 458 LINESTRING (20 200, 200 20, 20 20, 200 200) true Test 459 LINESTRING (20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true Test 460 POINT (80 140) true Test 461 LINESTRING (20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 462 LINESTRING (20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 463 LINESTRING (20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true Test 464 LINESTRING (20 200, 200 20, 20 20, 110 110, 200 200) true Test 465 LINESTRING (20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true Test 466 LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 467 LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 468 LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true Test 469 LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true Test 470 LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200) true Test 471 LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 200 200) true Test 472 LINESTRING (110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true Test 473 LINESTRING (110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200) true Test 474 LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true Test 475 LINESTRING (200 200, 20 20, 200 20, 20 200, 110 200, 110 110) true Test 476 LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110) true Test 477 LINESTRING (200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110) true Test 478 POINT (110 160) true Test 479 LINESTRING (110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true Test 480 LINESTRING (110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110) true Test 481 LINESTRING (110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110) true Test 482 LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true Test 483 LINESTRING (110 110, 200 200, 110 200, 110 20, 20 20, 110 110) true Test 484 POINT (140 200) true Test 485 LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true Test 486 POINT (90 130) true Test 487 LINESTRING (90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true Test 488 LINESTRING (90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true Test 489 LINESTRING (200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true Test 490 LINESTRING (110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110) true Test 491 LINESTRING (110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110) true Test 492 LINESTRING (110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110) true Test 493 LINESTRING (110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110) true Test 494 LINESTRING (200 200, 20 20, 200 20, 20 200, 200 200) true Test 495 LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200) true Test 496 LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200) true Test 497 LINESTRING (90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 498 LINESTRING (90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 499 LINESTRING (90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 500 LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true Test 501 LINESTRING (90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 502 LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true Test 503 POINT (110 150) true Test 504 LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true Test 505 LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true Test 506 MULTIPOINT (50 250, 90 220, 130 190) true Test 507 MULTIPOINT (180 180, 230 130, 280 80) true Test 508 MULTIPOINT (50 120, 90 80, 130 40) true Test 509 MULTIPOINT (300 280, 340 240, 380 200) true Test 510 MULTIPOINT (230 150, 260 120, 290 90) true Test 511 MULTIPOINT (200 190, 240 150, 270 110) true Test 512 MULTIPOINT (160 150, 190 120, 220 90) true Test 513 MULTIPOINT (120 190, 160 150, 200 110) true Test 514 MULTIPOINT (90 80, 160 150, 340 240) true Test 515 MULTIPOINT (90 80, 160 150, 300 150) true Test 516 MULTIPOINT (90 80, 160 150, 240 150) true Test 517 MULTIPOINT (90 80, 130 120, 210 150) true Test 518 MULTIPOINT (130 120, 210 150, 340 200) true Test 519 MULTIPOINT (160 150, 240 150, 340 210) true Test 520 MULTIPOINT (160 150, 300 150, 340 150) true Test 521 MULTIPOINT (160 150, 240 150, 340 240) true Test 522 POINT (40 60) true Test 523 POINT (40 40) true Test 524 MULTIPOINT (20 20, 80 80, 20 120) true Test 525 MULTIPOINT (40 40, 80 60, 120 100) true Test 526 MULTIPOINT (40 40, 120 100, 80 60) true Test 527 MULTIPOINT (40 40, 60 100, 100 60, 120 120) true Test 528 MULTIPOINT (20 120, 60 60, 100 100, 140 40) true Test 529 MULTIPOINT (20 20, 80 70, 140 120, 200 170) true Test 530 MULTIPOINT (20 20, 140 120, 80 70, 200 170) true Test 531 MULTIPOINT (80 70, 20 20, 200 170, 140 120) true Test 532 MULTIPOINT (80 70, 140 120) true Test 533 MULTIPOINT (140 120, 80 70) true Test 534 MULTIPOINT (80 170, 140 120, 200 80) true Test 535 MULTIPOINT (80 170, 140 120, 200 80, 80 70) true Test 536 POINT (10 10) true Test 537 MULTIPOINT (10 10, 20 20) true Test 538 LINESTRING (10 10, 20 20) true Test 539 LINESTRING (10 10, 20 20, 20 10, 10 10) true Test 540 LINESTRING (40 40, 100 100, 180 100, 180 180, 100 180, 100 100) true Test 541 MULTILINESTRING ((10 10, 20 20), (20 20, 30 30)) true Test 542 MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30)) true Test 543 MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40)) true Test 544 MULTILINESTRING ((10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20)) true Test 545 MULTILINESTRING ((10 10, 20 20, 20 30, 30 30, 30 20, 20 20)) true Test 546 POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60)) true Test 547 POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) true Test 548 MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240) true Test 549 POLYGON ((10 10, 100 10, 100 100, 10 100, 10 10)) true Test 550 LINESTRING (30 220, 240 220, 240 220) true Test 551 LINESTRING (110 290, 110 100, 110 100) true Test 552 LINESTRING (120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140) true Test 553 POLYGON ((200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360), (220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300)) true Test 554 MULTIPOINT (70 340, 70 50, 430 50, 420 340, 340 120, 390 110, 390 70, 350 100, 350 50, 370 90, 320 80, 360 120, 350 80, 390 90, 420 80, 410 60, 410 100, 370 100, 380 60, 370 80, 380 100, 360 80, 370 80, 380 70, 390 80, 390 70, 410 70, 400 60, 410 60, 410 60, 410 60, 370 70, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50) true Test 555 MULTIPOINT (140 350, 510 140, 110 140, 250 290, 250 50, 300 370, 450 310, 440 160, 290 280, 220 160, 100 260, 320 230, 200 280, 360 130, 330 210, 380 80, 220 210, 380 310, 260 150, 260 110, 170 130) true Test 556 GEOMETRYCOLLECTION (POINT (110 300), POINT (100 110), POINT (130 210), POINT (150 210), POINT (150 180), POINT (130 170), POINT (140 190), POINT (130 200), LINESTRING (240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON ((210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340), (230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270))) true Test 557 MULTIPOINT (50 320, 50 280, 50 230, 50 160, 50 120, 100 120, 160 120, 210 120, 210 180, 210 150, 180 180, 140 180, 140 210, 140 260, 160 180, 140 300, 140 320, 110 320, 80 320) true Test 559 POLYGON ((50 50, 200 50, 200 200, 50 200, 50 50)) true Test 560 POLYGON ((20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140)) true Test 561 POLYGON ((80 100, 220 100, 220 240, 80 240, 80 100)) true Test 562 POLYGON ((20 340, 330 380, 50 40, 20 340)) true Test 563 POLYGON ((210 320, 140 270, 0 270, 140 220, 210 320)) true Test 564 POLYGON ((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0)) true Test 565 POLYGON ((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0)) true Test 566 POLYGON ((0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0)) true Test 567 POLYGON ((230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0)) true Test 568 POLYGON ((0 0, 210 0, 210 230, 0 230, 0 0)) true Test 569 MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 90, 60 60, 90 60, 90 90, 60 90)), ((70 120, 90 90, 100 120, 70 120)), ((120 70, 90 90, 120 100, 120 70))) true Test 570 POLYGON ((0 0, 340 0, 340 300, 0 300, 0 0)) true Test 571 MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 100, 60 60, 100 60, 100 100, 60 100))) true Test 572 POLYGON ((0 0, 120 0, 120 120, 0 120, 0 0)) true Test 573 MULTIPOLYGON (((60 20, 0 20, 60 60, 60 20)), ((60 100, 60 60, 100 60, 100 100, 60 100))) true Test 574 POLYGON ((160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) true Test 575 POLYGON ((300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240)) true Test 576 MULTIPOLYGON (((120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ((360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200))) true Test 577 MULTIPOLYGON (((100 220, 100 200, 300 200, 300 220, 100 220)), ((280 180, 280 160, 300 160, 300 180, 280 180)), ((220 140, 220 120, 240 120, 240 140, 220 140)), ((180 220, 160 240, 200 240, 180 220))) true Test 578 MULTIPOLYGON (((100 200, 100 180, 120 180, 120 200, 100 200)), ((60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ((280 220, 240 180, 260 160, 300 200, 280 220))) true Test 579 MULTIPOLYGON (((80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ((220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220))) true Test 580 POLYGON ((60 160, 140 160, 140 60, 60 60, 60 160)) true Test 581 POLYGON ((160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140)) true Test 582 POLYGON ((10 10, 100 10, 10 11, 10 10)) true Test 583 POLYGON ((90 0, 200 0, 200 200, 90 200, 90 0)) true Test 584 POLYGON ((100 10, 10 10, 90 11, 90 20, 100 20, 100 10)) true Test 585 POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20)) true Test 586 POLYGON ((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10)) true Test 587 POLYGON ((60 40, 40 40, 40 20, 60 20, 60 40)) true Test 588 POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) true Test 589 POLYGON ((0 30, 0 0, 30 0, 30 30, 0 30)) true Test 590 MULTIPOLYGON (((0 0, 100 0, 100 20, 0 20, 0 0)), ((0 40, 0 21, 100 20, 100 40, 0 40))) true Test 591 POLYGON ((110 30, 90 30, 90 10, 110 10, 110 30)) true Test 592 POLYGON ((100 10, 0 10, 100 11, 100 10)) true Test 593 POLYGON ((100 10, 0 10, 90 11, 90 20, 100 20, 100 10)) true Test 594 POLYGON ((10 30, 10 0, 30 10, 30 30, 10 30)) true Test 595 POLYGON ((10 30, 10 10, 30 10, 30 30, 10 30)) true Test 596 POLYGON ((0 0, 200 0, 0 198, 0 0)) true Test 597 POLYGON ((280 60, 139 60, 280 70, 280 60)) true Test 598 POLYGON ((0 0, 140 10, 0 20, 0 0)) true Test 599 POLYGON ((280 0, 139 10, 280 1, 280 0)) true Test 600 MULTIPOLYGON (((1 4, 1 1, 2 1, 2 4, 1 4)), ((3 4, 3 1, 4 1, 4 4, 3 4)), ((5 4, 5 1, 6 1, 6 4, 5 4)), ((7 4, 7 1, 8 1, 8 4, 7 4)), ((9 4, 9 1, 10 1, 10 4, 9 4))) true Test 601 POLYGON ((0 2, 11 3, 11 2, 0 2)) true Test 602 POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) true Test 603 POLYGON ((200 160, 160 160, 160 80, 200 80, 200 160)) true Test 604 LINESTRING (160 140, 160 100) true Test 605 POLYGON ((20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160)) true Test 606 POLYGON ((200 160, 150 160, 150 80, 200 80, 200 160)) true Test 607 POLYGON ((83 33, 62 402, 68 402, 83 33)) true Test 608 POLYGON ((78 39, 574 76, 576 60, 78 39)) true Test 609 LINESTRING (240 190, 120 120) true Test 610 POLYGON ((110 240, 50 80, 240 70, 110 240)) true Test 611 LINESTRING (0 100, 100 100, 200 200) true Test 612 POLYGON ((30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140)) true Test 613 LINESTRING (40 340, 200 250, 120 180, 160 110, 270 40) true Test 614 MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ((120 160, 140 160, 140 140, 120 160))) true Test 615 MULTILINESTRING ((100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120)) true Test 616 MULTIPOLYGON (((60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ((100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200))) true Test 617 MULTILINESTRING ((40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320)) true Test 618 MULTIPOLYGON (((60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ((280 400, 320 400, 320 360, 280 360, 280 400)), ((300 240, 300 220, 320 220, 320 240, 300 240))) true Test 619 MULTILINESTRING ((80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360)) true Test 620 MULTIPOLYGON (((120 180, 60 80, 180 80, 120 180)), ((100 240, 140 240, 120 220, 100 240))) true Test 621 MULTILINESTRING ((180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100)) true Test 622 POLYGON ((95 9, 81 414, 87 414, 95 9)) true Test 623 LINESTRING (93 13, 96 13) true Test 624 LINESTRING (0 0, 100 100) true Test 625 LINESTRING (0 100, 100 0) true Test 626 LINESTRING (0 0, 100 100, 200 0) true Test 627 LINESTRING (0 0, 100 100, 200 200) true Test 628 LINESTRING (40 360, 40 220, 120 360) true Test 629 LINESTRING (120 340, 60 220, 140 220, 140 360) true Test 630 LINESTRING (220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280) true Test 631 LINESTRING (220 240, 140 160, 120 180, 220 280, 200 300, 100 200) true Test 632 LINESTRING (80 320, 220 320, 220 160, 80 300) true Test 633 LINESTRING (60 200, 60 260, 140 200) true Test 634 LINESTRING (60 200, 60 140, 140 200) true Test 635 LINESTRING (180 200, 100 280, 20 200, 100 120, 180 200) true Test 636 LINESTRING (100 200, 220 200, 220 80, 100 80, 100 200) true Test 637 LINESTRING (0 10, 620 10, 0 11) true Test 638 LINESTRING (400 60, 400 10) true Test 639 MULTIPOLYGON (((120 320, 180 200, 240 320, 120 320)), ((180 200, 240 80, 300 200, 180 200))) true Test 640 MULTIPOINT (120 320, 180 260, 180 320, 180 200, 300 200, 200 220) true Test 641 MULTIPOLYGON (((120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ((200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) true Test 642 MULTIPOINT (200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200) true Test 643 MULTIPOINT (40 90, 20 20, 70 70) true Test 644 LINESTRING (20 20, 100 100) true Test 645 LINESTRING (20 20, 110 110, 170 50, 130 10, 70 70) true Test 646 MULTILINESTRING ((100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) true Test 647 MULTIPOINT (100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320) true Test 648 MULTILINESTRING ((-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140)) true Test 649 MULTIPOINT (-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120) true Test 650 MULTILINESTRING ((180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280)) true Test 651 POINT (200 200) true Test 652 MULTIPOINT (100 100, 200 200) true Test 653 MULTIPOINT (100 100, 200 200, 300 300, 500 500) true Test 654 MULTIPOINT (100 100, 200 200, 400 400, 600 600) true Test 655 POINT (80 200) true Test 656 POINT (260 80) true Test 657 POINT (60 260) true Test 658 POINT (120 260) true Test 659 POINT (80 80) true Test 660 POINT (80 280) true Test 661 POLYGON ((0 0, 140 0, 140 140, 0 140, 0 0)) true Test 662 POLYGON ((140 0, 0 0, 0 140, 140 140, 140 0)) true Test 663 POLYGON ((40 60, 360 60, 360 300, 40 300, 40 60)) true Test 664 POLYGON ((120 100, 280 100, 280 240, 120 240, 120 100)) true Test 665 POLYGON ((80 100, 360 100, 360 280, 80 280, 80 100)) true Test 666 POLYGON ((0 280, 0 0, 260 0, 260 280, 0 280), (220 240, 40 240, 40 40, 220 40, 220 240)) true Test 667 POLYGON ((20 260, 240 260, 240 20, 20 20, 20 260), (160 180, 80 180, 120 120, 160 180)) true Test 668 POLYGON ((60 80, 200 80, 200 220, 60 220, 60 80)) true Test 669 POLYGON ((120 140, 260 140, 260 260, 120 260, 120 140)) true Test 670 POLYGON ((60 220, 220 220, 140 140, 60 220)) true Test 671 POLYGON ((100 180, 180 180, 180 100, 100 100, 100 180)) true Test 672 POLYGON ((40 40, 180 40, 180 180, 40 180, 40 40)) true Test 673 POLYGON ((180 40, 40 180, 160 280, 300 140, 180 40)) true Test 674 POLYGON ((40 280, 200 280, 200 100, 40 100, 40 280), (100 220, 120 220, 120 200, 100 180, 100 220)) true Test 675 POLYGON ((40 280, 180 260, 180 120, 60 120, 40 280)) true Test 676 POLYGON ((0 200, 0 0, 200 0, 200 200, 0 200), (20 180, 130 180, 130 30, 20 30, 20 180)) true Test 677 POLYGON ((60 90, 130 90, 130 30, 60 30, 60 90)) true Test 678 LINESTRING (100 120, 100 240) true Test 679 POLYGON ((40 60, 160 60, 160 180, 40 180, 40 60)) true Test 680 LINESTRING (80 80, 140 140, 200 200) true Test 681 POLYGON ((40 40, 140 40, 140 140, 40 140, 40 40)) true Test 682 POLYGON ((190 190, 360 20, 20 20, 190 190), (111 110, 250 100, 140 30, 111 110)) true Test 683 POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 131 40, 200 110, 130 180)) true Test 684 LINESTRING (100 140, 100 40) true Test 685 MULTIPOLYGON (((20 80, 180 79, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160))) true Test 686 MULTIPOLYGON (((20 80, 180 80, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160))) true Test 687 LINESTRING (60 0, 20 80, 100 80, 80 120, 40 140) true Test 688 LINESTRING (140 300, 220 160, 260 200, 240 260) true Test 689 LINESTRING (60 40, 140 40, 140 160, 0 160) true Test 690 LINESTRING (140 280, 240 280, 240 180, 140 180, 140 280) true Test 691 LINESTRING (140 0, 0 0, 40 60, 0 120, 60 200, 220 160, 220 40) true Test 692 LINESTRING (80 140, 180 100, 160 40, 100 40, 60 100, 80 140) true Test 693 LINESTRING (20 20, 80 80) true Test 694 LINESTRING (40 40, 160 160, 200 60, 60 140) true Test 695 LINESTRING (40 40, 200 40) true Test 696 LINESTRING (200 40, 140 40, 40 40) true Test 697 LINESTRING (0 0, 110 0, 60 0) true Test 698 LINESTRING (0 0, 110 0) true Test 699 LINESTRING (0 0, 80 0, 80 60, 80 0, 170 0) true Test 700 MULTILINESTRING ((0 0, 170 0), (80 0, 80 60)) true Test 701 LINESTRING (80 100, 180 200) true Test 702 LINESTRING (80 180, 180 120) true Test 703 LINESTRING (40 40, 100 100, 160 160) true Test 704 LINESTRING (160 60, 100 100, 60 140) true Test 705 LINESTRING (140 60, 60 140) true Test 706 LINESTRING (40 40, 180 180, 100 180, 100 100) true Test 707 LINESTRING (80 90, 50 50, 0 0) true Test 708 LINESTRING (40 140, 240 140) true Test 709 LINESTRING (40 140, 100 140, 80 80, 120 60, 100 140, 160 140, 160 100, 200 100, 160 140, 240 140) true Test 710 LINESTRING (20 20, 100 20, 20 20) true Test 711 LINESTRING (60 20, 200 20) true Test 712 LINESTRING (40 60, 180 60, 180 140, 100 140, 100 60, 220 60, 220 180, 80 180, 80 60, 280 60) true Test 713 LINESTRING (140 60, 180 60, 220 60, 260 60) true Test 714 MULTIPOINT (0 20, 40 20) true Test 715 POLYGON ((20 40, 20 0, 60 0, 60 40, 20 40)) true Test 716 MULTIPOINT (0 20, 20 20) true Test 717 MULTIPOINT (20 20, 40 20) true Test 718 MULTIPOINT (80 260, 140 260, 180 260) true Test 719 POLYGON ((40 320, 140 320, 140 200, 40 200, 40 320)) true Test 720 MULTIPOLYGON (((0 40, 0 0, 40 0, 40 40, 0 40)), ((40 80, 40 40, 80 40, 80 80, 40 80))) true Test 721 LINESTRING (40 40, 120 120, 200 120) true Test 722 LINESTRING (40 40, 100 100, 160 100) true Test 723 POINT (60 60) true Test 724 MULTIPOINT (40 40, 100 40) true Test 725 LINESTRING (40 40, 80 80) true Test 726 MULTIPOINT (40 40, 60 60) true Test 727 MULTIPOINT (60 60, 100 100) true Test 728 LINESTRING (40 40, 60 60, 80 80) true Test 729 POINT (20 30) true Test 730 MULTIPOINT (40 40, 80 60, 40 100) true Test 731 MULTIPOINT (80 280, 80 220, 160 220, 80 220) true Test 732 MULTIPOINT (80 280, 80 220, 160 220) true Test 734 LINESTRING (20 60, 160 60, 80 160, 80 20) true Test 735 LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20) true Test 736 LINESTRING (20 60, 100 60, 60 100, 60 60) true Test 737 LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60) true Test 738 LINESTRING (20 20, 80 20, 80 80, 20 20) true Test 739 LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80) true Test 741 MULTILINESTRING ((40 140, 160 40), (160 140, 40 40)) true Test 742 MULTILINESTRING ((20 160, 20 20), (100 160, 100 20)) true Test 743 MULTILINESTRING ((60 140, 20 80, 60 40), (60 40, 100 80, 60 140)) true Test 744 MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), (100 200, 200 120)) true Test 745 MULTILINESTRING ((40 120, 100 60), (160 120, 100 60), (40 60, 160 60)) true Test 746 MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), (80 160, 120 220, 120 100, 80 160)) true Test 747 MULTILINESTRING ((80 160, 40 220), (80 160, 120 220, 120 100, 80 160), (40 100, 80 160)) true Test 748 POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260)) true Test 750 MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true Test 751 MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true rgeos/tests/testthat/testxml/general/TestRelateAA.xml0000644000176200001440000001057014025150746022517 0ustar liggesusers AA disjoint POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) true AA equal but opposite orientation POLYGON( (0 0, 140 0, 140 140, 0 140, 0 0)) POLYGON( (140 0, 0 0, 0 140, 140 140, 140 0)) true AA A-shell contains B-shell POLYGON( (40 60, 360 60, 360 300, 40 300, 40 60)) POLYGON( (120 100, 280 100, 280 240, 120 240, 120 100)) true AA A-shell contains B-shell contains A-hole POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) POLYGON( (80 100, 360 100, 360 280, 80 280, 80 100)) true AA A-shell contains B-shell contains A-hole contains B-hole POLYGON( (0 280, 0 0, 260 0, 260 280, 0 280), (220 240, 40 240, 40 40, 220 40, 220 240)) POLYGON( (20 260, 240 260, 240 20, 20 20, 20 260), (160 180, 80 180, 120 120, 160 180)) true AA A-shell overlapping B-shell POLYGON( (60 80, 200 80, 200 220, 60 220, 60 80)) POLYGON( (120 140, 260 140, 260 260, 120 260, 120 140)) true AA A-shell overlapping B-shell at B-vertex POLYGON( (60 220, 220 220, 140 140, 60 220)) POLYGON( (100 180, 180 180, 180 100, 100 100, 100 180)) true AA A-shell overlapping B-shell at A & B-vertex POLYGON( (40 40, 180 40, 180 180, 40 180, 40 40)) POLYGON( (180 40, 40 180, 160 280, 300 140, 180 40)) true AmA A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true AA A-shell touches B-shell, which contains A-hole POLYGON( (40 280, 200 280, 200 100, 40 100, 40 280), (100 220, 120 220, 120 200, 100 180, 100 220)) POLYGON( (40 280, 180 260, 180 120, 60 120, 40 280)) true AA - A-hole contains B, boundaries touch in line POLYGON( (0 200, 0 0, 200 0, 200 200, 0 200), (20 180, 130 180, 130 30, 20 30, 20 180)) POLYGON( (60 90, 130 90, 130 30, 60 30, 60 90)) true AA - A-hole contains B, boundaries touch in points POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) POLYGON( (270 90, 200 50, 150 80, 210 120, 270 90)) true rgeos/tests/testthat/testxml/general/TestWithinDistance.xml0000644000176200001440000000752014025150746024017 0ustar liggesusers PP - disjoint points POINT(10 10) POINT(100 100) true false PP - overlapping points POINT(10 10) POINT(10 10) true true PL - point on linestring POINT (340 200) LINESTRING (80 280, 340 200, 80 80) true true PL - point not on linestring LINESTRING (100 100, 200 100, 200 200, 100 200, 100 100) POINT (10 10) true false PA - point inside polygon POINT (240 160) POLYGON ((100 260, 340 180, 100 60, 180 160, 100 260)) true true mPA - points outside polygon POLYGON ((200 180, 60 140, 60 260, 200 180)) MULTIPOINT (140 280, 140 320) true false LL - disjoint linestrings LINESTRING (40 300, 240 260, 60 160, 140 60) LINESTRING (140 360, 260 280, 240 120, 120 160) true false LL - crossing linestrings LINESTRING (40 300, 280 220, 60 160, 140 60) LINESTRING (140 360, 260 280, 240 120, 120 160) true true AA - overlapping polygons POLYGON ((60 260, 260 180, 100 60, 60 160, 60 260)) POLYGON ((220 280, 120 160, 300 60, 360 220, 220 280)) true true AA - disjoint polygons POLYGON ((100 320, 60 120, 240 180, 200 260, 100 320)) POLYGON ((420 320, 280 260, 400 100, 420 320)) true false mAmA - overlapping multipolygons MULTIPOLYGON (((40 240, 160 320, 40 380, 40 240)), ((100 240, 240 60, 40 40, 100 240))) MULTIPOLYGON (((220 280, 120 160, 300 60, 360 220, 220 280)), ((240 380, 280 300, 420 340, 240 380))) true true rgeos/tests/testthat/testxml/general/TestFunctionAAPrec.xml0000644000176200001440000004541114025150746023704 0ustar liggesusers AA - sliver triangle, cut by polygon POLYGON( (10 10, 100 10, 10 11, 10 10)) POLYGON( (90 0, 200 0, 200 200, 90 200, 90 0)) true LINESTRING(90 10, 100 10) MULTIPOLYGON( ( (90 10, 10 10, 10 11, 90 10)), ( (90 10, 90 200, 200 200, 200 0, 90 0, 90 10))) POLYGON( (90 10, 10 10, 10 11, 90 10)) MULTIPOLYGON( ( (90 10, 10 10, 10 11, 90 10)), ( (90 10, 90 200, 200 200, 200 0, 90 0, 90 10))) AA - polygon with outward sliver, cut by polygon POLYGON( (100 10, 10 10, 90 11, 90 20, 100 20, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 10 10) AA - narrow wedge in polygon POLYGON((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10)) POLYGON((60 40, 40 40, 40 20, 60 20, 60 40)) true POLYGON( (50 40, 50 20, 40 20, 40 30, 40 40, 50 40)) POLYGON( (50 20, 50 10, 10 10, 10 30, 40 30, 10 31, 10 50, 50 50, 50 40, 60 40, 60 20, 50 20)) MULTIPOLYGON( ( (50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)), ( (40 30, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30))) MULTIPOLYGON( ( (50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)), ( (50 20, 50 40, 60 40, 60 20, 50 20)), ( (40 30, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30))) AA - hole close to shell POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (0 30, 0 0, 30 0, 30 30, 0 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (30 10, 30 0, 0 0, 0 30, 10 30, 30 30, 30 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (30 10, 30 0, 0 0, 0 30, 10 30, 30 30, 30 10))) mAA - shells close together MULTIPOLYGON( ( (0 0, 100 0, 100 20, 0 20, 0 0)), ( (0 40, 0 21, 100 20, 100 40, 0 40))) POLYGON( (110 30, 90 30, 90 10, 110 10, 110 30)) true GEOMETRYCOLLECTION( LINESTRING(100 20, 90 20), POLYGON( (100 20, 100 10, 90 10, 90 20, 90 30, 100 30, 100 20))) POLYGON( (100 10, 100 0, 0 0, 0 20, 90 20, 0 21, 0 40, 100 40, 100 30, 110 30, 110 10, 100 10)) MULTIPOLYGON( ( (100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)), ( (90 20, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20))) MULTIPOLYGON( ( (100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)), ( (100 10, 100 20, 100 30, 110 30, 110 10, 100 10)), ( (90 20, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20))) AA - A sliver triangle cutting all the way across B POLYGON( (100 10, 0 10, 100 11, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 0 10) MULTIPOLYGON( ( (100 10, 20 10, 100 11, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) POLYGON( (100 10, 20 10, 100 11, 100 10)) MULTIPOLYGON( ( (100 10, 20 10, 100 11, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) AA - A polygon with sliver cutting all the way across B POLYGON( (100 10, 0 10, 90 11, 90 20, 100 20, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 0 10) MULTIPOLYGON( ( (100 10, 20 10, 90 11, 90 20, 100 20, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) AA - hole close to shell, B coincident with A POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (10 30, 10 0, 30 10, 30 30, 10 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 0, 10 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 0, 10 10))) AA - A hole close to shell, B coincident with A POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (10 30, 10 10, 30 10, 30 30, 10 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) AA - B hole close to shell, A coincident with B POLYGON( (10 30, 10 10, 30 10, 30 30, 10 30)) POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) POLYGON( (10 10, 10 30, 30 30, 30 10, 10 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) AA - B sliver crossing A triangle in line segment with length < 1 POLYGON( (0 0, 200 0, 0 198, 0 0)) POLYGON( (280 60, 139 60, 280 70, 280 60)) true POINT(139 60) MULTIPOLYGON( ( (139 60, 200 0, 0 0, 0 198, 139 60)), ( (280 60, 139 60, 280 70, 280 60))) POLYGON( (139 60, 200 0, 0 0, 0 198, 139 60)) MULTIPOLYGON( ( (139 60, 200 0, 0 0, 0 198, 139 60)), ( (280 60, 139 60, 280 70, 280 60))) AA - sliver triangles, at angle to each other POLYGON( (0 0, 140 10, 0 20, 0 0)) POLYGON( (280 0, 139 10, 280 1, 280 0)) LINESTRING(140 10, 139 10) AA - sliver triangle with multiple intersecting boxes MULTIPOLYGON( ( (1 4, 1 1, 2 1, 2 4, 1 4)), ( (3 4, 3 1, 4 1, 4 4, 3 4)), ( (5 4, 5 1, 6 1, 6 4, 5 4)), ( (7 4, 7 1, 8 1, 8 4, 7 4)), ( (9 4, 9 1, 10 1, 10 4, 9 4))) POLYGON( (0 2, 11 3, 11 2, 0 2)) POLYGON( (1 1, 1 4, 10 4, 10 1, 1 1)) GEOMETRYCOLLECTION( LINESTRING(1 2, 2 2), LINESTRING(3 2, 4 2), POLYGON( (6 3, 6 2, 5 2, 6 3)), POLYGON( (7 2, 7 3, 8 3, 8 2, 7 2)), POLYGON( (9 2, 9 3, 10 3, 10 2, 9 2))) GEOMETRYCOLLECTION( LINESTRING(0 2, 1 2), LINESTRING(2 2, 3 2), LINESTRING(4 2, 5 2), POLYGON( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), POLYGON( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), POLYGON( (5 2, 5 4, 6 4, 6 3, 7 3, 7 4, 8 4, 8 3, 9 3, 9 4, 10 4, 10 3, 11 3, 11 2, 10 2, 10 1, 9 1, 9 2, 8 2, 8 1, 7 1, 7 2, 6 2, 6 1, 5 1, 5 2))) MULTIPOLYGON( ( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), ( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), ( (5 2, 5 4, 6 4, 6 3, 5 2)), ( (6 2, 6 1, 5 1, 5 2, 6 2)), ( (7 3, 7 4, 8 4, 8 3, 7 3)), ( (8 2, 8 1, 7 1, 7 2, 8 2)), ( (9 3, 9 4, 10 4, 10 3, 9 3)), ( (10 2, 10 1, 9 1, 9 2, 10 2))) GEOMETRYCOLLECTION( LINESTRING(0 2, 1 2), LINESTRING(2 2, 3 2), LINESTRING(4 2, 5 2), POLYGON( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), POLYGON( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), POLYGON( (5 2, 5 4, 6 4, 6 3, 5 2)), POLYGON( (6 2, 6 1, 5 1, 5 2, 6 2)), POLYGON( (6 2, 6 3, 7 3, 7 2, 6 2)), POLYGON( (7 3, 7 4, 8 4, 8 3, 7 3)), POLYGON( (8 2, 8 1, 7 1, 7 2, 8 2)), POLYGON( (8 2, 8 3, 9 3, 9 2, 8 2)), POLYGON( (9 3, 9 4, 10 4, 10 3, 9 3)), POLYGON( (10 2, 10 1, 9 1, 9 2, 10 2)), POLYGON( (10 2, 10 3, 11 3, 11 2, 10 2))) AA - Polygon with hole with outward sliver, cut by polygon POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) POLYGON( (200 160, 160 160, 160 80, 200 80, 200 160)) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) GEOMETRYCOLLECTION( LINESTRING(180 120, 160 120), POLYGON( (180 160, 180 120, 180 80, 160 80, 160 120, 160 160, 180 160))) POLYGON( (20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 160 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) MULTIPOLYGON( ( (20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 160 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)), ( (180 120, 180 160, 200 160, 200 80, 180 80, 180 120))) AA - Polygon with hole with outward sliver, cut by line POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) LINESTRING(160 140, 160 100) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) MULTILINESTRING( (160 140, 160 120), (160 120, 160 100)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) AA - Polygon with inward sliver touching hole, cut by polygon POLYGON( (20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160)) POLYGON( (200 160, 150 160, 150 80, 200 80, 200 160)) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) MULTIPOLYGON( ( (180 160, 180 120, 150 120, 150 160, 180 160)), ( (150 120, 180 119, 180 80, 150 80, 150 120))) POLYGON( (20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)) POLYGON( (20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 150 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)) MULTIPOLYGON( ( (20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 150 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)), ( (150 120, 180 120, 180 160, 200 160, 200 80, 180 80, 180 119, 150 120))) AA - intersecting slivers, dimensional collapse POLYGON( (83 33, 62 402, 68 402, 83 33)) POLYGON( (78 39, 574 76, 576 60, 78 39)) LINESTRING(83 33, 62 402, 68 402, 83 33) POLYGON( (83 33, 62 402, 68 402, 83 33)) POINT(83 39) GEOMETRYCOLLECTION( LINESTRING(78 39, 83 39), LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39)), POLYGON( (83 39, 574 76, 576 60, 83 39))) GEOMETRYCOLLECTION( LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39))) GEOMETRYCOLLECTION( LINESTRING(78 39, 83 39), LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39)), POLYGON( (83 39, 574 76, 576 60, 83 39))) rgeos/tests/testthat/testxml/general/TestFunctionPP.xml0000644000176200001440000000725714025150746023136 0ustar liggesusers PP - point contained in both A and B POINT(100 100) POINT(100 100) POINT(100 100) PP - A different from B POINT(100 100) POINT(200 200) MULTIPOINT(100 100, 200 200) POINT(100 100) MULTIPOINT(100 100, 200 200) PmP - point in A contained in B POINT(100 100) MULTIPOINT(100 100, 200 200) POINT(100 100) MULTIPOINT(100 100, 200 200) POINT(200 200) mPmP - points in A only, B only, and in both MULTIPOINT(100 100, 200 200, 300 300, 500 500) MULTIPOINT(100 100, 200 200, 400 400, 600 600) MULTIPOINT(100 100, 200 200) MULTIPOINT(100 100, 200 200, 300 300, 400 400, 500 500, 600 600) MULTIPOINT(300 300, 500 500) MULTIPOINT(300 300, 400 400, 500 500, 600 600) PP - point contained in both A and B POINT(80 200) POINT(80 200) POINT(80 200) POINT(80 200) POINT(80 200) PP - A different from B POINT(80 200) POINT(260 80) POINT(80 200) MULTIPOINT(80 200, 260 80) POINT(80 200) MULTIPOINT(80 200, 260 80) PP - A different from B, same y POINT(60 260) POINT(120 260) POINT(60 260) MULTIPOINT(60 260, 120 260) POINT(60 260) MULTIPOINT(60 260, 120 260) PP - A different from B, same x POINT(80 80) POINT(80 280) POINT(80 80) MULTIPOINT(80 80, 80 280) POINT(80 80) MULTIPOINT(80 80, 80 280) rgeos/tests/testthat/testxml/general/TestFunctionLLPrec.xml0000644000176200001440000000100014025150746023714 0ustar liggesusers LL - narrow V LINESTRING(0 10, 620 10, 0 11) LINESTRING(400 60, 400 10) POINT(400 10) MULTILINESTRING( (0 10, 400 10), (400 10, 620 10, 400 10), (400 10, 0 11), (400 60, 400 10)) rgeos/tests/testthat/testxml/general/TestFunctionLAPrec.xml0000644000176200001440000000240014025150746023706 0ustar liggesusers LA - line and sliver intersecting, dimensional collapse POLYGON( (95 9, 81 414, 87 414, 95 9)) LINESTRING(93 13, 96 13) LINESTRING(95 9, 81 414, 87 414, 95 9) POLYGON( (95 9, 81 414, 87 414, 95 9)) POINT(95 13) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13)), LINESTRING(93 13, 95 13), LINESTRING(95 13, 96 13)) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13))) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13)), LINESTRING(93 13, 95 13), LINESTRING(95 13, 96 13)) rgeos/tests/testthat/testxml/general/TestFunctionPL.xml0000644000176200001440000001706314025150746023126 0ustar liggesusers mPL - points in I and E of line MULTIPOINT(40 90, 20 20, 70 70) LINESTRING(20 20, 100 100) MULTIPOINT(20 20, 70 70) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 100 100)) POINT(40 90) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 100 100)) mPL - points in I and E of line, line self-intersecting MULTIPOINT(40 90, 20 20, 70 70) LINESTRING(20 20, 110 110, 170 50, 130 10, 70 70) MULTIPOINT(20 20, 70 70) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 70 70), LINESTRING(70 70, 110 110, 170 50, 130 10, 70 70)) POINT(40 90) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 70 70), LINESTRING(70 70, 110 110, 170 50, 130 10, 70 70)) mPmL - points in I, B and E of lines, lines overlap, points overlap MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) MULTIPOINT(100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320) MULTIPOINT(100 220, 100 320) POLYGON( (100 180, 100 320, 220 320, 220 180, 100 180)) MULTIPOINT(100 180, 100 220, 100 260, 100 320, 120 180, 160 320, 200 180, 200 320, 220 180, 220 260, 220 320) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) mPmL - points in I, B and E of lines, lines overlap, points overlap, x <0, y < 0 MULTILINESTRING( (-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140)) MULTIPOINT(-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120) MULTIPOINT(-500 -340, -500 -140) POLYGON( (-500 -340, -500 -140, -320 -140, -320 -280, -500 -340)) MULTIPOINT(-500 -340, -500 -280, -500 -220, -500 -140, -420 -140, -320 -180, -320 -140) GEOMETRYCOLLECTION( POINT(-560 -180), POINT(-420 -180), POINT(-320 -120), POINT(-280 -140), LINESTRING(-500 -140, -500 -280), LINESTRING(-500 -280, -320 -280, -320 -140), LINESTRING(-320 -140, -500 -140), LINESTRING(-500 -280, -500 -340)) MULTILINESTRING( (-500 -140, -500 -280), (-500 -280, -320 -280, -320 -140), (-320 -140, -500 -140), (-500 -280, -500 -340)) GEOMETRYCOLLECTION( POINT(-560 -180), POINT(-420 -180), POINT(-320 -120), POINT(-280 -140), LINESTRING(-500 -140, -500 -280), LINESTRING(-500 -280, -320 -280, -320 -140), LINESTRING(-320 -140, -500 -140), LINESTRING(-500 -280, -500 -340)) mL - lines intersect at 1 point MULTILINESTRING( (180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280)) MULTIPOINT(180 100, 140 280) mPmL - points in I, B and E of lines, lines overlap, points overlap MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) MULTIPOINT(100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320) MULTIPOINT(100 220, 100 320) POLYGON( (100 180, 100 320, 220 320, 220 180, 100 180)) MULTIPOINT(100 180, 100 220, 100 260, 100 320, 120 180, 160 320, 200 180, 200 320, 220 180, 220 260, 220 320) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) rgeos/tests/testthat/testxml/general/TestRelatePL.xml0000644000176200001440000000373514025150746022556 0ustar liggesusers PL - disjoint POINT(60 120) LINESTRING(40 40, 120 120, 200 120) true PL - touches Bdy POINT(40 40) LINESTRING(40 40, 100 100, 160 100) true PL - touches non-vertex POINT(60 60) LINESTRING(40 40, 100 100) true mPL - touches Bdy and Ext MULTIPOINT(40 40, 100 40) LINESTRING(40 40, 80 80) true mPL - touches Int and Bdy MULTIPOINT(40 40, 60 60) LINESTRING(40 40, 80 80) true mPL - touches Int and Ext MULTIPOINT(60 60, 100 100) LINESTRING(40 40, 80 80) true mPL - touches IntNV and Ext MULTIPOINT(60 60, 100 100) LINESTRING(40 40, 80 80) true mPL - touches IntV and Ext MULTIPOINT(60 60, 100 100) LINESTRING(40 40, 60 60, 80 80) true rgeos/tests/testthat/testxml/general/TestFunctionLA.xml0000644000176200001440000003700614025150746023106 0ustar liggesusers LA - A and B simple LINESTRING(240 190, 120 120) POLYGON( (110 240, 50 80, 240 70, 110 240)) LINESTRING(177 153, 120 120) GEOMETRYCOLLECTION( LINESTRING(240 190, 177 153), POLYGON( (177 153, 240 70, 50 80, 110 240, 177 153))) LINESTRING(240 190, 177 153) GEOMETRYCOLLECTION( LINESTRING(240 190, 177 153), POLYGON( (177 153, 240 70, 50 80, 110 240, 177 153))) LA - A intersects B-hole LINESTRING(0 100, 100 100, 200 200) POLYGON( (30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140)) MULTILINESTRING( (30 100, 80 100), (110 110, 140 140)) GEOMETRYCOLLECTION( LINESTRING(0 100, 30 100), LINESTRING(80 100, 100 100, 110 110), LINESTRING(140 140, 200 200), POLYGON( (30 240, 140 140, 260 30, 30 30, 30 100, 30 240), (80 140, 80 100, 80 80, 140 80, 110 110, 80 140))) MULTILINESTRING( (0 100, 30 100), (80 100, 100 100, 110 110), (140 140, 200 200)) GEOMETRYCOLLECTION( LINESTRING(0 100, 30 100), LINESTRING(80 100, 100 100, 110 110), LINESTRING(140 140, 200 200), POLYGON( (30 240, 140 140, 260 30, 30 30, 30 100, 30 240), (80 140, 80 100, 80 80, 140 80, 110 110, 80 140))) LA - A intersects B-hole #2 LINESTRING(40 340, 200 250, 120 180, 160 110, 270 40) POLYGON( (160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) MULTILINESTRING( (114 298, 200 250, 173 226), (182 96, 225 68)) GEOMETRYCOLLECTION( LINESTRING(40 340, 114 298), LINESTRING(173 226, 120 180, 160 110, 182 96), LINESTRING(225 68, 270 40), POLYGON( (114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260, 114 298), (140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240))) MULTILINESTRING( (40 340, 114 298), (173 226, 120 180, 160 110, 182 96), (225 68, 270 40)) GEOMETRYCOLLECTION( LINESTRING(40 340, 114 298), LINESTRING(173 226, 120 180, 160 110, 182 96), LINESTRING(225 68, 270 40), POLYGON( (114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260, 114 298), (140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240))) mLmA - A and B complex, disjoint MULTIPOLYGON( ( (60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ( (120 160, 140 160, 140 140, 120 160))) MULTILINESTRING( (100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120)) POLYGON( (60 80, 60 320, 300 80, 60 80)) MULTILINESTRING( (60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280), (120 160, 140 160, 140 140, 120 160)) GEOMETRYCOLLECTION( LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120), LINESTRING(40 360, 40 60), LINESTRING(40 60, 340 60, 40 360), LINESTRING(40 60, 40 20), LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120), LINESTRING(120 120, 140 120), POLYGON( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), POLYGON( (120 160, 140 160, 140 140, 120 160))) MULTIPOLYGON( ( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ( (120 160, 140 160, 140 140, 120 160))) GEOMETRYCOLLECTION( LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120), LINESTRING(40 360, 40 60), LINESTRING(40 60, 340 60, 40 360), LINESTRING(40 60, 40 20), LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120), LINESTRING(120 120, 140 120), POLYGON( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), POLYGON( (120 160, 140 160, 140 140, 120 160))) mLmA - A and B complex, overlapping and touching #1 MULTIPOLYGON( ( (60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ( (100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200))) MULTILINESTRING( (40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320)) MULTILINESTRING( (60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240), (100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200)) POLYGON( (60 120, 60 260, 220 260, 220 120, 60 120)) MULTILINESTRING( (220 260, 140 260), (140 260, 120 260), (120 260, 60 260), (200 240, 140 240), (140 240, 120 240), (120 240, 80 240), (180 220, 140 220), (140 220, 120 220), (120 220, 100 220), (120 200, 120 180), (220 240, 200 240), (80 240, 60 240), (60 220, 80 220), (200 220, 220 220), (120 260, 120 240), (120 220, 120 200), (120 180, 120 160), (120 140, 120 120), (140 120, 140 140), (140 160, 140 180), (140 200, 140 220), (140 240, 140 260)) GEOMETRYCOLLECTION( LINESTRING(40 260, 60 260), LINESTRING(220 260, 240 260, 240 240, 220 240), LINESTRING(60 240, 40 240, 40 220, 60 220), LINESTRING(80 220, 100 220), LINESTRING(180 220, 200 220), LINESTRING(220 220, 240 220), LINESTRING(120 300, 120 260), LINESTRING(120 240, 120 220), LINESTRING(120 160, 120 140), LINESTRING(120 120, 120 80), LINESTRING(120 80, 140 80), LINESTRING(140 80, 140 120), LINESTRING(140 140, 140 160), LINESTRING(140 180, 140 200), LINESTRING(140 220, 140 240), LINESTRING(140 260, 140 300), LINESTRING(120 300, 120 320), POLYGON( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), POLYGON( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) MULTIPOLYGON( ( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), ( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) GEOMETRYCOLLECTION( LINESTRING(40 260, 60 260), LINESTRING(220 260, 240 260, 240 240, 220 240), LINESTRING(60 240, 40 240, 40 220, 60 220), LINESTRING(80 220, 100 220), LINESTRING(180 220, 200 220), LINESTRING(220 220, 240 220), LINESTRING(120 300, 120 260), LINESTRING(120 240, 120 220), LINESTRING(120 160, 120 140), LINESTRING(120 120, 120 80), LINESTRING(120 80, 140 80), LINESTRING(140 80, 140 120), LINESTRING(140 140, 140 160), LINESTRING(140 180, 140 200), LINESTRING(140 220, 140 240), LINESTRING(140 260, 140 300), LINESTRING(120 300, 120 320), POLYGON( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), POLYGON( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) mLmA - A and B complex, overlapping and touching #2 MULTIPOLYGON( ( (60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ( (280 400, 320 400, 320 360, 280 360, 280 400)), ( (300 240, 300 220, 320 220, 320 240, 300 240))) MULTILINESTRING( (80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360)) POLYGON( (60 120, 60 320, 280 400, 320 400, 320 220, 280 120, 60 120)) MULTILINESTRING( (60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260), (280 400, 320 400, 320 360, 280 360, 280 400), (300 240, 300 220, 320 220, 320 240, 300 240)) GEOMETRYCOLLECTION( LINESTRING(220 360, 220 320), LINESTRING(220 260, 220 240, 240 240), LINESTRING(280 240, 300 240), LINESTRING(300 240, 300 360), POLYGON( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), POLYGON( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), POLYGON( (300 240, 320 240, 320 220, 300 220, 300 240))) MULTIPOLYGON( ( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), ( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), ( (300 240, 320 240, 320 220, 300 220, 300 240))) GEOMETRYCOLLECTION( LINESTRING(220 360, 220 320), LINESTRING(220 260, 220 240, 240 240), LINESTRING(280 240, 300 240), LINESTRING(300 240, 300 360), POLYGON( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), POLYGON( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), POLYGON( (300 240, 320 240, 320 220, 300 220, 300 240))) GEOMETRYCOLLECTION( POINT(300 240), POINT(300 360), LINESTRING(80 300, 80 160), LINESTRING(80 160, 260 160, 260 240), LINESTRING(260 240, 260 300, 220 300), LINESTRING(220 300, 80 300), LINESTRING(80 160, 80 140), LINESTRING(220 320, 220 300), LINESTRING(220 300, 220 260), LINESTRING(240 240, 260 240), LINESTRING(260 240, 280 240)) mLmA - A and B complex, overlapping and touching #3 MULTIPOLYGON( ( (120 180, 60 80, 180 80, 120 180)), ( (100 240, 140 240, 120 220, 100 240))) MULTILINESTRING( (180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100)) POLYGON( (60 80, 100 240, 140 240, 180 80, 60 80)) MULTILINESTRING( (120 180, 60 80, 180 80, 120 180), (100 240, 140 240, 120 220, 100 240)) GEOMETRYCOLLECTION( LINESTRING(180 260, 120 180), LINESTRING(120 180, 60 260), LINESTRING(60 260, 180 260), LINESTRING(60 300, 60 260), LINESTRING(60 260, 60 80), LINESTRING(60 80, 60 40), POLYGON( (60 80, 120 180, 180 80, 60 80)), POLYGON( (100 240, 140 240, 120 220, 100 240))) MULTIPOLYGON( ( (60 80, 120 180, 180 80, 60 80)), ( (100 240, 140 240, 120 220, 100 240))) GEOMETRYCOLLECTION( LINESTRING(180 260, 120 180), LINESTRING(120 180, 60 260), LINESTRING(60 260, 180 260), LINESTRING(60 300, 60 260), LINESTRING(60 260, 60 80), LINESTRING(60 80, 60 40), POLYGON( (60 80, 120 180, 180 80, 60 80)), POLYGON( (100 240, 140 240, 120 220, 100 240))) GEOMETRYCOLLECTION( POINT(60 80), POINT(120 180), LINESTRING(100 100, 140 100)) rgeos/tests/testthat/testxml/general/TestSimple.xml0000644000176200001440000001074514025150746022336 0ustar liggesusers P - point POINT(10 10) true mP - multipoint with repeated points MULTIPOINT (80 280, 80 220, 160 220, 80 220) false mP - multipoint with no repeated points MULTIPOINT (80 280, 80 220, 160 220) true L - simple line LINESTRING(10 10, 20 20) true L - non-simple, proper interior intersection LINESTRING (20 60, 160 60, 80 160, 80 20) false L - non-simple, interior intersection at vertices LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20) false L - non-simple, interior intersection at Bdy/non-vertex LINESTRING (20 60, 100 60, 60 100, 60 60) false L - non-simple, interior intersection at Bdy/vertex LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60) false L - simple, intersection at Bdy/Bdy (ring) LINESTRING (20 20, 80 20, 80 80, 20 20) true L - simple, intersection at Bdy/Bdy + non-vertex LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80) false mL - intersection between elements at non-vertex MULTILINESTRING( (40 140, 160 40), (160 140, 40 40)) false mL - no intersection between elements MULTILINESTRING( (20 160, 20 20), (100 160, 100 20)) true mL - mutual intersection at endpoints only MULTILINESTRING ((60 140, 20 80, 60 40), (60 40, 100 80, 60 140)) true mL - one element is non-simple MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), (100 200, 200 120)) false mL - proper intersection between elements at vertex MULTILINESTRING ((40 120, 100 60), (160 120, 100 60), (40 60, 160 60)) false mL - intersection between closed lines MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), (80 160, 120 220, 120 100, 80 160)) false mL - intersection between closed and open lines MULTILINESTRING ((80 160, 40 220), (80 160, 120 220, 120 100, 80 160), (40 100, 80 160)) false A POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260)) true mA MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true mA - with touching elements MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true rgeos/tests/testthat/testxml/general/TestRelateLL.xml0000644000176200001440000001345514025150746022552 0ustar liggesusers LL - disjoint, non-overlapping envelopes LINESTRING(60 0, 20 80, 100 80, 80 120, 40 140) LINESTRING(140 300, 220 160, 260 200, 240 260) true LL - disjoint, overlapping envelopes LINESTRING(60 0, 20 80, 100 80, 80 120, 40 140) LINESTRING(60 40, 140 40, 140 160, 0 160) true LL - disjoint, non-overlapping envelopes, B closed LINESTRING(60 0, 20 80, 100 80, 80 120, 40 140) LINESTRING(140 280, 240 280, 240 180, 140 180, 140 280) true LL - disjoint, overlapping envelopes, B closed LINESTRING(140 0, 0 0, 40 60, 0 120, 60 200, 220 160, 220 40) LINESTRING(80 140, 180 100, 160 40, 100 40, 60 100, 80 140) true Line vs line - pointwise equal LINESTRING(20 20, 80 80) LINESTRING(20 20, 80 80) true Line vs line - pointwise equal LINESTRING(40 40, 160 160, 200 60, 60 140) LINESTRING(40 40, 160 160, 200 60, 60 140) true Line vs line - topologically equal LINESTRING(40 40, 200 40) LINESTRING(200 40, 140 40, 40 40) true LL - topographically equal with self-intersection LINESTRING(0 0, 110 0, 60 0) LINESTRING(0 0, 110 0) true LmL - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LmL - topographically equal with self intersections LINESTRING(0 0, 80 0, 80 60, 80 0, 170 0) MULTILINESTRING( (0 0, 170 0), (80 0, 80 60)) true LL - A-IntNV = B-IntNV LINESTRING(80 100, 180 200) LINESTRING(80 180, 180 120) true intersect in Int NV LINESTRING(40 40, 100 100, 160 160) LINESTRING(160 60, 100 100, 60 140) true LL - intersection: {A-Bdy, A-IntV} = B-IntNV LINESTRING(40 40, 100 100, 180 100, 180 180, 100 180, 100 100) LINESTRING(140 60, 60 140) true LL - intersection: {A-Bdy, A-IntNV} = B-IntNV LINESTRING(40 40, 180 180, 100 180, 100 100) LINESTRING(140 60, 60 140) true LL - intersection: A-IntNV = {B-Bdy, B-IntNV} LINESTRING(20 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true LL - one segment overlapping, one distinct LINESTRING(80 90, 50 50, 0 0) LINESTRING(0 0, 100 100) true LL - A contained in B LINESTRING(40 140, 240 140) LINESTRING(40 140, 100 140, 80 80, 120 60, 100 140, 160 140, 160 100, 200 100, 160 140, 240 140) true LL - simple overlapping lines LINESTRING(20 20, 100 20, 20 20) LINESTRING(60 20, 200 20) true LL - A-spiral, B-contained LINESTRING(40 60, 180 60, 180 140, 100 140, 100 60, 220 60, 220 180, 80 180, 80 60, 280 60) LINESTRING(140 60, 180 60, 220 60, 260 60) true test for LinearRing point location bug LINEARRING(0 0, 0 5, 5 5, 5 0, 0 0) LINESTRING( 2 2, 4 4) true rgeos/tests/testthat/testxml/general/TestRectanglePredicate.xml0000644000176200001440000000667214025150746024636 0ustar liggesusers A disjoint POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) false false A contained in rectangle POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POLYGON((10 10, 10 90, 90 90, 90 10, 10 10)) true true A containing rectangle POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POLYGON ((60 180, -100 120, -140 60, -40 20, -100 -80, 40 -20, 140 -100, 140 40, 260 160, 80 120, 60 180)) true false mA containing rectangle POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) MULTIPOLYGON (((-60 180, -60 -60, 40 -20, 140 -100, 180 120, -20 140, -60 180)), ((20 280, 0 180, 180 160, 200 280, 20 280))) true false true false true L overlaps thru Y axis side POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING(10 10, 200 10) true L overlaps thru X axis side POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING(10 10, 10 2000) true false false L line intersection POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING( 10 10, -10 -20 ) true false L in polygon boundary POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING( 10 0, 90 0 ) true false true true mL with one component contained POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) MULTILINESTRING( (10 10, 10 20), (200 10, 200 20) ) true false rgeos/tests/testthat/test-translate-lines.R0000644000176200001440000000431314025150746020605 0ustar liggesuserslibrary(testthat) library(rgeos) setScale() context("Translate Lines") test_that("translate lines", { l = readWKT("LINESTRING (1 1, 2 2, 3 3, 4 4)") ml1 = readWKT("MULTILINESTRING ((1 1, 2 2, 3 3, 4 4),(1 1, 2 2, 3 3, 4 4))") ml2 = readWKT("MULTILINESTRING ((1 1, 2 2, 3 3, 4 4),(4 1, 3 2, 2 3, 1 4))") gcl1 = readWKT("GEOMETRYCOLLECTION( LINESTRING (1 1, 2 2, 3 3, 4 4), LINESTRING (1 1, 2 2, 3 3, 4 4) )") gcl2 = readWKT("GEOMETRYCOLLECTION( LINESTRING (1 1, 2 2, 3 3, 4 4), MULTILINESTRING ((1 1, 2 2, 3 3, 4 4),(4 1, 3 2, 2 3, 1 4)), LINESTRING (1 1, 2 2, 3 3, 4 4) )") Line1 = Line(cbind( x=1:4,y=1:4 )) Line2 = Line(cbind( x=4:1,y=1:4 )) Linesl = Lines( list(Line1), ID = "1" ) Linesl2 = Lines( list(Line1), ID = "2" ) Linesml1 = Lines( list(Line1, Line1), ID = "1" ) Linesml2 = Lines( list(Line1, Line2), ID = "1" ) #FIXME - weirdness with rownames in the bbox spl = SpatialLines( list(Linesl) ); rownames(spl@bbox) = c("x","y") spml1 = SpatialLines( list(Linesml1) ); rownames(spml1@bbox) = c("x","y") spml2 = SpatialLines( list(Linesml2) ); rownames(spml2@bbox) = c("x","y") spgcl1 = SpatialLines( list(Linesl,Linesl2) ); rownames(spgcl1@bbox) = c("x","y") Linesml2@ID = "2" Linesl2@ID = "3" spgcl2 = SpatialLines( list(Linesl,Linesml2,Linesl2) ); rownames(spgcl2@bbox) = c("x","y") expect_that( l , is_identical_to(spl) ) expect_that( ml1 , is_identical_to(spml1) ) expect_that( ml2 , is_identical_to(spml2) ) expect_that( gcl1, is_identical_to(spgcl1) ) expect_that( gcl2, is_identical_to(spgcl2) ) expect_that( spl , is_identical_to( translate(spl))) expect_that( spml1 , is_identical_to( translate(spml1))) expect_that( spml2 , is_identical_to( translate(spml2))) expect_that( spgcl1, is_identical_to( translate(spgcl1))) expect_that( spgcl2, is_identical_to( translate(spgcl2))) expect_that( l , is_identical_to( translate(l) )) expect_that( ml1 , is_identical_to( translate(ml1) )) expect_that( ml2 , is_identical_to( translate(ml2) )) expect_that( gcl1, is_identical_to( translate(gcl1) )) expect_that( gcl2, is_identical_to( translate(gcl2) )) })rgeos/tests/testthat/test-translate-polygons.R0000644000176200001440000000643614025150746021355 0ustar liggesuserslibrary(testthat) library(rgeos) setScale() context("Translate Polygons") test_that("translate simple polygon", { p=readWKT("POLYGON((1 1,5 1,5 5,1 5,1 1))") ph1=readWKT("POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))") ph2=readWKT("POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2), (3 3,3 4,4 4,4 3,3 3) ) ") mp=readWKT("MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1)),((3 5,5 7, 1 7, 3 5)))") mph1=readWKT("MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((3 5,5 7, 1 7, 3 5)))") mph2=readWKT("MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1)),((3 5,5 7, 1 7, 3 5),(3 5.5,4 6.5, 2 6.5, 3 5.5) ))") mph3=readWKT("MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((3 5,5 7, 1 7, 3 5),(3 5.5,4 6.5, 2 6.5, 3 5.5)) )") Poly1 = Polygon(list(x=c(1,5,5,1,1),y=c(1,1,5,5,1)), hole=FALSE) Poly2 = Polygon(list(x=c(2,2,3,3,2),y=c(2,3,3,2,2)), hole=TRUE) Poly3 = Polygon(list(x=c(3,3,4,4,3),y=c(3,4,4,3,3)), hole=TRUE) Poly4 = Polygon(list(x=c(3,5,1,3),y=c(5,7,7,5)), hole=FALSE) Poly5 = Polygon(list(x=c(3,4,2,3),y=c(5.5,6.5,6.5,5.5)), hole=TRUE) Poly6 = Polygon(list(x=c(5,7,7,5),y=c(3,5,1,3)), hole=FALSE) Polysp = Polygons(list(Poly1), ID="1") Polysph1 = Polygons(list(Poly1,Poly2), ID="1") Polysph2 = Polygons(list(Poly1,Poly2,Poly3), ID="1") Polysmp = Polygons(list(Poly1,Poly4), ID="1" ) Polysmph1 = Polygons(list(Poly1,Poly2,Poly4), ID="1" ) Polysmph2 = Polygons(list(Poly1,Poly4,Poly5), ID="1" ) Polysmph3 = Polygons(list(Poly1,Poly2,Poly4,Poly5), ID="1" ) comment(Polysp) <- "0" comment(Polysph1) <- "0 1" comment(Polysph2) <- "0 1 1" comment(Polysmp) <- "0 0" comment(Polysmph1) <- "0 1 0" comment(Polysmph2) <- "0 0 2" comment(Polysmph3) <- "0 1 0 3" spp = SpatialPolygons( list(Polysp) ) spph1 = SpatialPolygons( list(Polysph1) ) spph2 = SpatialPolygons( list(Polysph2) ) spmp = SpatialPolygons( list(Polysmp) ) spmph1 = SpatialPolygons( list(Polysmph1) ) spmph2 = SpatialPolygons( list(Polysmph2) ) spmph3 = SpatialPolygons( list(Polysmph3) ) expect_that( identical(p , spp), is_true()) expect_that( identical(ph1 , spph1), is_true()) expect_that( identical(ph2 , spph2), is_true()) expect_that( identical(mp , spmp), is_true()) expect_that( identical(mph1 , spmph1), is_true()) expect_that( identical(mph2 , spmph2), is_true()) expect_that( identical(mph3 , spmph3), is_true()) expect_that( spp , is_identical_to( translate(spp))) expect_that( spph1 , is_identical_to( translate(spph1))) expect_that( spph2 , is_identical_to( translate(spph2))) expect_that( spmp , is_identical_to( translate(spmp))) expect_that( spmph1, is_identical_to( translate(spmph1))) expect_that( spmph2, is_identical_to( translate(spmph2))) expect_that( spmph3, is_identical_to( translate(spmph3))) expect_that( p , is_identical_to( translate(p))) expect_that( ph1 , is_identical_to( translate(ph1))) expect_that( ph2 , is_identical_to( translate(ph2))) expect_that( mp , is_identical_to( translate(mp))) expect_that( mph1, is_identical_to( translate(mph1))) expect_that( mph2, is_identical_to( translate(mph2))) expect_that( mph3, is_identical_to( translate(mph3))) }) rgeos/tests/testthat/test-jts-xml.R0000644000176200001440000000322214025150746017074 0ustar liggesuserssource("process_testxml.R") # xml files to skip fileSkip = c("TestValid2.xml","ExternalRobustness.xml","TestRobustOverlayFloat.xml","TestRobustOverlayFixed.xml") # tests to skip descSkip = c(# TestFunctionLAPrec.xml "LA - line and sliver intersecting, dimensional collapse", # TestFunctionAAPrec.xml "AA - intersecting slivers, dimensional collapse", "AA - sliver triangle with multiple intersecting boxes", "AA - sliver triangles, at angle to each other", "AA - B sliver crossing A triangle in line segment with length < 1", "AA - A hole close to shell, B coincident with A", "AA - hole close to shell, B coincident with A", "AA - sliver triangle, cut by polygon", "AA - polygon with outward sliver, cut by polygon", "AA - hole close to shell", "AA - A sliver triangle cutting all the way across B", "AA - A polygon with sliver cutting all the way across B", "AA - B hole close to shell, A coincident with B", # TestInteriorPoint.xml "L - linestring with single segment") xmldir = 'tests/testxml' testdirs = list.files(system.file(xmldir,package="rgeos")) for (d in testdirs) { testfiles = list.files(system.file(file.path(xmldir,d),package="rgeos")) for (f in testfiles) { # files to skip if (f %in% fileSkip) next xmlfile = system.file(file.path(xmldir,d,f),package="rgeos") n = which(f==testfiles) total = length(testfiles) process_testxml(xmlfile, n, total, descSkip) } } rgeos/tests/testthat/test-translate-points.R0000644000176200001440000000447114025150746021014 0ustar liggesuserslibrary(testthat) library(rgeos) setScale() context("Translate Points") test_that("translate points", { p = readWKT("POINT(1 1)") mp = readWKT("MULTIPOINT(1 1, 2 2, 3 3, 4 4, 5 5)") gcp1 = readWKT("GEOMETRYCOLLECTION( POINT(1 1), POINT(2 2), POINT(3 3), POINT(4 4), POINT(5 5))") gcp2 = readWKT("GEOMETRYCOLLECTION( POINT(1 1), POINT(2 2), MULTIPOINT(3 3, 4 4, 5 5))") gcp3 = readWKT("GEOMETRYCOLLECTION( POINT(1 1), POINT(2 2), MULTIPOINT(3 3, 4 4),POINT(5 5))") gcp4 = readWKT("GEOMETRYCOLLECTION( MULTIPOINT(1 1, 2 2), MULTIPOINT(3 3, 4 4, 5 5))") gcp5 = readWKT("GEOMETRYCOLLECTION( MULTIPOINT(1 1, 2 2), MULTIPOINT(3 3, 4 4),POINT(5 5))") spp = SpatialPoints(list(x=1,y=1)) spmp = SpatialPoints(list(x=1:5,y=1:5)) rownames(spp@coords) = c("1") expect_that( identical(p,spp), is_true()) expect_that( identical(spp, translate(spp)), is_true()) rownames(spmp@coords) = c("1","1","1","1","1") expect_that( identical(mp,spmp), is_true() ) expect_that( identical(spmp,translate(spmp)), is_true()) rownames(spmp@coords) = c("1","2","3","4","5") expect_that( identical(gcp1,spmp), is_true() ) expect_that( identical(spmp,translate(spmp)), is_true()) rownames(spmp@coords) = c("1","2","3","3","3") expect_that( identical(gcp2,spmp), is_true() ) expect_that( identical(spmp,translate(spmp)), is_true()) rownames(spmp@coords) = c("1","2","3","3","4") expect_that( identical(gcp3,spmp), is_true() ) expect_that( identical(spmp,translate(spmp)), is_true()) rownames(spmp@coords) = c("1","1","2","2","2") expect_that( identical(gcp4,spmp), is_true() ) expect_that( identical(spmp,translate(spmp)), is_true()) rownames(spmp@coords) = c("1","1","2","2","3") expect_that( identical(gcp5,spmp), is_true() ) expect_that( identical(spmp,translate(spmp)), is_true()) expect_that( identical(p, translate(p) ), is_true()) expect_that( identical(mp, translate(mp) ), is_true()) expect_that( identical(gcp1, translate(gcp1) ), is_true()) expect_that( identical(gcp2, translate(gcp2) ), is_true()) expect_that( identical(gcp3, translate(gcp3) ), is_true()) expect_that( identical(gcp4, translate(gcp4) ), is_true()) expect_that( identical(gcp5, translate(gcp5) ), is_true()) })rgeos/tests/testthat/test-translate-polygon-collection.R0000644000176200001440000001070414025150746023314 0ustar liggesuserslibrary(testthat) library(rgeos) setScale() context("Translation Polygon Collections") test_that("translate polygon collection", { gcp1=readWKT("GEOMETRYCOLLECTION( POLYGON((1 1,5 1,5 5,1 5,1 1)), POLYGON((3 5,5 7, 1 7, 3 5)), POLYGON((5 3,7 5,7 1,5 3)) )") gcp2=readWKT("GEOMETRYCOLLECTION( MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1)), ((3 5,5 7, 1 7, 3 5)) ), POLYGON((5 3,7 5,7 1,5 3)) )") gcp3=readWKT("GEOMETRYCOLLECTION( POLYGON((1 1,5 1,5 5,1 5,1 1)), MULTIPOLYGON( ((3 5,5 7, 1 7, 3 5)), ((5 3,7 5,7 1,5 3)) ))") gcp4=readWKT("GEOMETRYCOLLECTION( MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1)), ((3 5,5 7, 1 7, 3 5)), ((5 3,7 5,7 1,5 3)) ))") gcph1=readWKT("GEOMETRYCOLLECTION( POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)), POLYGON((3 5,5 7, 1 7, 3 5),(3 5.5,4 6.5, 2 6.5, 3 5.5)), POLYGON((5 3,7 5,7 1,5 3)) )") gcph2=readWKT("GEOMETRYCOLLECTION( MULTIPOLYGON( ((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)), ((3 5,5 7, 1 7, 3 5),(3 5.5,4 6.5, 2 6.5, 3 5.5)) ), POLYGON((5 3,7 5,7 1,5 3)) )") gcph3=readWKT("GEOMETRYCOLLECTION( POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)), MULTIPOLYGON( ((3 5,5 7, 1 7, 3 5),(3 5.5,4 6.5, 2 6.5, 3 5.5)), ((5 3,7 5,7 1,5 3)) ))") Poly1 = Polygon(list(x=c(1,5,5,1,1),y=c(1,1,5,5,1)), hole=FALSE) Poly2 = Polygon(list(x=c(2,2,3,3,2),y=c(2,3,3,2,2)), hole=TRUE) Poly3 = Polygon(list(x=c(3,3,4,4,3),y=c(3,4,4,3,3)), hole=TRUE) Poly4 = Polygon(list(x=c(3,5,1,3),y=c(5,7,7,5)), hole=FALSE) Poly5 = Polygon(list(x=c(3,4,2,3),y=c(5.5,6.5,6.5,5.5)), hole=TRUE) Poly6 = Polygon(list(x=c(5,7,7,5),y=c(3,5,1,3)), hole=FALSE) Polygcp11 = Polygons(list(Poly1), ID="1") Polygcp12 = Polygons(list(Poly4), ID="2") Polygcp13 = Polygons(list(Poly6), ID="3") Polygcp21 = Polygons(list(Poly1,Poly4), ID="1") Polygcp22 = Polygons(list(Poly6), ID="2") Polygcp31 = Polygons(list(Poly1), ID="1") Polygcp32 = Polygons(list(Poly4,Poly6), ID="2") Polygcp4 = Polygons(list(Poly1,Poly4,Poly6), ID="1") Polygcph11 = Polygons(list(Poly1,Poly2), ID="1") Polygcph12 = Polygons(list(Poly4,Poly5), ID="2") Polygcph13 = Polygons(list(Poly6), ID="3") Polygcph21 = Polygons(list(Poly1,Poly2,Poly4,Poly5), ID="1") Polygcph22 = Polygons(list(Poly6), ID="2") Polygcph31 = Polygons(list(Poly1,Poly2), ID="1") Polygcph32 = Polygons(list(Poly4,Poly5,Poly6), ID="2") comment(Polygcp11) <- "0" comment(Polygcp12) <- "0" comment(Polygcp13) <- "0" comment(Polygcp21) <- "0 0" comment(Polygcp22) <- "0" comment(Polygcp31) <- "0" comment(Polygcp32) <- "0 0" comment(Polygcp4) <- "0 0 0" comment(Polygcph11) <- "0 1" comment(Polygcph12) <- "0 1" comment(Polygcph13) <- "0" comment(Polygcph21) <- "0 1 0 3" comment(Polygcph22) <- "0" comment(Polygcph31) <- "0 1" comment(Polygcph32) <- "0 1 0" spgcp1 = SpatialPolygons( list(Polygcp11,Polygcp12,Polygcp13) ) spgcp2 = SpatialPolygons( list(Polygcp21,Polygcp22) ) spgcp3 = SpatialPolygons( list(Polygcp31,Polygcp32) ) spgcp4 = SpatialPolygons( list(Polygcp4) ) spgcph1 = SpatialPolygons( list(Polygcph11,Polygcph12,Polygcph13) ) spgcph2 = SpatialPolygons( list(Polygcph21,Polygcph22) ) spgcph3 = SpatialPolygons( list(Polygcph31,Polygcph32) ) expect_that( gcp1 , is_identical_to(spgcp1) ) expect_that( gcp2 , is_identical_to(spgcp2) ) expect_that( gcp3 , is_identical_to(spgcp3) ) expect_that( gcp4 , is_identical_to(spgcp4) ) expect_that( gcph1, is_identical_to(spgcph1) ) expect_that( gcph2, is_identical_to(spgcph2) ) expect_that( gcph3, is_identical_to(spgcph3) ) expect_that( spgcp1 , is_identical_to( translate(spgcp1))) expect_that( spgcp2 , is_identical_to( translate(spgcp2))) expect_that( spgcp3 , is_identical_to( translate(spgcp3))) expect_that( spgcp4 , is_identical_to( translate(spgcp4))) expect_that( spgcph1, is_identical_to( translate(spgcph1))) expect_that( spgcph2, is_identical_to( translate(spgcph2))) expect_that( spgcph3, is_identical_to( translate(spgcph3))) expect_that( gcp1 , is_identical_to( translate(gcp1))) expect_that( gcp2 , is_identical_to( translate(gcp2))) expect_that( gcp3 , is_identical_to( translate(gcp3))) expect_that( gcp4 , is_identical_to( translate(gcp4))) expect_that( gcph1, is_identical_to( translate(gcph1))) expect_that( gcph2, is_identical_to( translate(gcph2))) expect_that( gcph3, is_identical_to( translate(gcph3))) }) rgeos/tests/testthat/process_testxml.R0000644000176200001440000001454014025150746017764 0ustar liggesuserslibrary(testthat) library(XML) library(rgeos) # Some functions have different names between GEOS and JTS process_testxml = function(xmlfile, n, total, descSkip) { funcTranslate=list( "getboundary" = list(func=gBoundary,res=readWKT,arg1=readWKT), "getCentroid" = list(func=gCentroid,res=readWKT,arg1=readWKT), "convexhull" = list(func=gConvexHull,res=readWKT,arg1=readWKT), "getInteriorPoint" = list(func=gPointOnSurface,res=readWKT,arg1=readWKT), "isSimple" = list(func=gIsSimple,res=as.logical,arg1=readWKT), "isValid" = list(func=gIsValid,res=as.logical,arg1=readWKT), "isWithinDistance" = list(func=gWithinDistance,res=as.logical,arg1=readWKT,arg2=readWKT,arg3=as.numeric), "intersects" = list(func=gIntersects,res=as.logical,arg1=readWKT,arg2=readWKT), "contains" = list(func=gContains,res=as.logical,arg1=readWKT,arg2=readWKT), "within" = list(func=gWithin,res=as.logical,arg1=readWKT,arg2=readWKT), "intersection" = list(func=gIntersection,res=readWKT,arg1=readWKT,arg2=readWKT), "union" = list(func=gUnion,res=readWKT,arg1=readWKT,arg2=readWKT), "difference" = list(func=gDifference,res=readWKT,arg1=readWKT,arg2=readWKT), "symdifference" = list(func=gSymdifference,res=readWKT,arg1=readWKT,arg2=readWKT), "relate" = list(func=gRelate,res=as.logical,arg1=readWKT,arg2=readWKT,arg3=as.character), "covers" = list(func=gCovers,res=as.logical,arg1=readWKT,arg2=readWKT), "coveredBy" = list(func=gCoveredBy,res=as.logical,arg1=readWKT,arg2=readWKT)) context(paste('(',n,'/',total,')',basename(xmlfile))) #x = xmlRoot(xmlTreeParse(I(readLines(xmlfile)),ignoreBlanks=TRUE)) x = xmlRoot(xmlTreeParse(readLines(xmlfile),ignoreBlanks=TRUE)) nodes = xmlSApply(x,xmlName) test_that("valid node types",{ validNodeTypes = c("precisionModel","case","comment") expect_that( all(nodes %in% validNodeTypes), is_true() ) }) #Handle precisionModel nodes - only use the first model pmAttrs = xmlAttrs( x[[ which(nodes == "precisionModel")[1] ]] ) test_that("precisionModel attribute tests", { expect_that( length(pmAttrs) == 1 | length(pmAttrs) == 3, is_true() ) if (length(pmAttrs) == 1) { type = pmAttrs[["type"]] } else if (length(pmAttrs) == 3) { setScale(as.numeric( pmAttrs[["scale"]] )) expect_that( pmAttrs[["offsetx"]], equals("0.0") ) expect_that( pmAttrs[["offsety"]], equals("0.0") ) } }) #Handle case nodes for ( i in which(nodes == "case") ) { caseNodes = xmlSApply(x[[i]],xmlName) whichDesc = which(caseNodes == "desc") whichTests = which(caseNodes == "test") desc = xmlValue( x[[i]][[ whichDesc[1] ]] ) if (desc %in% descSkip) next whichArgs = which(caseNodes != "desc" & caseNodes != "test") args = rep( NA,length(whichArgs) ) # argument nodes can either contain the value or have a file attribute for ( j in whichArgs) { if (is.null( xmlAttrs(x[[i]][[j]]) )) { args[[ xmlName(x[[i]][[j]]) ]] = xmlValue(x[[i]][[j]]) } else { file = xmlAttrs(x[[i]][[j]])[["file"]] args[[ xmlName(x[[i]][[j]]) ]] = paste( readLines(file), collapse="" ) } } #make sure the arg names are lowercase for the sake of consistency names(args) = tolower(names(args)) for ( j in whichTests ) { test_that(paste(desc,'- test nodes in proper format') , { expect_that( xmlSize( x[[i]][[j]] ), equals(1) ) expect_that( xmlName( x[[i]][[j]][[1]] ), equals("op") ) }) if ( xmlSize( x[[i]][[j]] ) == 1 & xmlName( x[[i]][[j]][[1]] ) == "op" ) { opAttrs = xmlAttrs( x[[i]][[j]][[1]] ) opReturn = xmlValue( x[[i]][[j]][[1]] ) opNArgs = length(opAttrs)-1 # some ops seem to have a pattern argument that is not used if ( 'pattern' %in% names(opAttrs) ) opNArgs = opNArgs-1 opName = opAttrs[['name']] test_that(paste(desc,'-',opName), { funcdetails = funcTranslate[[opName]] expect_that( is.null(funcdetails), is_false() ) if ( !is.null(funcdetails) ) { funcNArgs = length( funcdetails )-2 expect_that(funcNArgs==opNArgs, is_true()) funcArgs = list() for (k in 1:funcNArgs) { argName = paste("arg",k,sep='') argVal = tolower(opAttrs[[argName]]) if (argVal %in% names(args)) argVal = args[[ argVal ]] funcArgs[k] = funcdetails[[argName]](argVal) } funcReturn = do.call(funcdetails[["func"]], funcArgs) expectedReturn = funcdetails[["res"]](opReturn) if (is.logical(funcReturn)) { expect_that(funcReturn == expectedReturn, is_true()) } else if (is.null(funcReturn)) { expect_that(is.null(funcReturn) & is.null(expectedReturn), is_true()) } else if (gIsEmpty(expectedReturn)) { expect_that(identical(funcReturn,expectedReturn), is_true()) } else { # if it isn't logical or NULL it should be a geometry expect_that(gEquals(funcReturn,expectedReturn),is_true()) } } }) } } } }rgeos/tests/testthat/test-translate-empty.R0000644000176200001440000002261714025150746020640 0ustar liggesusers#library(testthat) #library(rgeos) # #setScale() #context("Translation empty geometries") # #test_that("empty geometrycollection", { # gc1 = readWKT("GEOMETRYCOLLECTION EMPTY") # # expect_that( gc1, is_identical_to(translate(gc1)) ) #}) # # #test_that("empty points", { # p1 = readWKT("POINT EMPTY") # p2 = readWKT("MULTIPOINT EMPTY") # p3 = readWKT("GEOMETRYCOLLECTION(POINT EMPTY)") # p4 = readWKT("GEOMETRYCOLLECTION(MULTIPOINT EMPTY)") # # expect_that( p1, is_identical_to(p2) ) # expect_that( p2, is_identical_to(p3) ) # expect_that( p3, is_identical_to(p4) ) # # expect_that( p1, is_identical_to(translate(p1)) ) # expect_that( p2, is_identical_to(translate(p2)) ) # expect_that( p3, is_identical_to(translate(p3)) ) # expect_that( p4, is_identical_to(translate(p4)) ) # # pg1 = readWKT("GEOMETRYCOLLECTION(POINT EMPTY,POINT EMPTY)") # pg2 = readWKT("GEOMETRYCOLLECTION(POINT EMPTY,MULTIPOINT EMPTY)") # pg3 = readWKT("GEOMETRYCOLLECTION(MULTIPOINT EMPTY,POINT EMPTY)") # pg4 = readWKT("GEOMETRYCOLLECTION(MULTIPOINT EMPTY,MULTIPOINT EMPTY)") # # pg5 = readWKT("GEOMETRYCOLLECTION(POINT (1 1),POINT EMPTY)") # pg6 = readWKT("GEOMETRYCOLLECTION(POINT (1 1),MULTIPOINT EMPTY)") # pg7 = readWKT("GEOMETRYCOLLECTION(MULTIPOINT (1 1),POINT EMPTY)") # pg8 = readWKT("GEOMETRYCOLLECTION(MULTIPOINT (1 1),MULTIPOINT EMPTY)") # # pg9 = readWKT("GEOMETRYCOLLECTION(POINT EMPTY,POINT (1 1))") # pg10= readWKT("GEOMETRYCOLLECTION(POINT EMPTY,MULTIPOINT (1 1))") # pg11= readWKT("GEOMETRYCOLLECTION(MULTIPOINT EMPTY,POINT (1 1))") # pg12= readWKT("GEOMETRYCOLLECTION(MULTIPOINT EMPTY,MULTIPOINT (1 1))") # # expect_that( pg1, is_identical_to(pg2) ) # expect_that( pg2, is_identical_to(pg3) ) # expect_that( pg3, is_identical_to(pg4) ) # # expect_that( pg5, is_identical_to(pg5) ) # expect_that( pg6, is_identical_to(pg7) ) # expect_that( pg7, is_identical_to(pg8) ) # # expect_that( pg9, is_identical_to(pg10) ) # expect_that( pg10, is_identical_to(pg11) ) # expect_that( pg11, is_identical_to(pg12) ) # # expect_that( pg1, is_identical_to(translate(pg1)) ) # expect_that( pg2, is_identical_to(translate(pg2)) ) # expect_that( pg3, is_identical_to(translate(pg3)) ) # expect_that( pg4, is_identical_to(translate(pg4)) ) # expect_that( pg5, is_identical_to(translate(pg5)) ) # expect_that( pg6, is_identical_to(translate(pg6)) ) # expect_that( pg7, is_identical_to(translate(pg7)) ) # expect_that( pg8, is_identical_to(translate(pg8)) ) # expect_that( pg9, is_identical_to(translate(pg9)) ) # expect_that(pg10, is_identical_to(translate(pg10)) ) # expect_that(pg11, is_identical_to(translate(pg11)) ) # expect_that(pg12, is_identical_to(translate(pg12)) ) # #}) # #test_that("empty linestrings", { # # l1 = readWKT("LINESTRING EMPTY") # l2 = readWKT("MULTILINESTRING EMPTY") # l3 = readWKT("GEOMETRYCOLLECTION(LINESTRING EMPTY)") # l4 = readWKT("GEOMETRYCOLLECTION(MULTILINESTRING EMPTY)") # # expect_that( l1, is_identical_to(l2) ) # expect_that( l2, is_identical_to(l3) ) # expect_that( l3, is_identical_to(l4) ) # # expect_that( l1, is_identical_to(translate(l1)) ) # expect_that( l2, is_identical_to(translate(l2)) ) # expect_that( l3, is_identical_to(translate(l3)) ) # expect_that( l4, is_identical_to(translate(l4)) ) # # # ml1 = readWKT("MULTILINESTRING((1 1,2 2), EMPTY)") # ml2 = readWKT("MULTILINESTRING(EMPTY, (1 1,2 2))") # # expect_that( ml1, is_identical_to(translate(ml1)) ) # expect_that( ml2, is_identical_to(translate(ml2)) ) # # # lg1 = readWKT("GEOMETRYCOLLECTION(LINESTRING EMPTY,LINESTRING EMPTY)") # lg2 = readWKT("GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,MULTILINESTRING EMPTY)") # lg3 = readWKT("GEOMETRYCOLLECTION(LINESTRING EMPTY,MULTILINESTRING EMPTY)") # lg4 = readWKT("GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,LINESTRING EMPTY)") # # lg5 = readWKT("GEOMETRYCOLLECTION(LINESTRING EMPTY,LINESTRING(1 1,2 2))") # lg6 = readWKT("GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,MULTILINESTRING((1 1,2 2)))") # lg7 = readWKT("GEOMETRYCOLLECTION(LINESTRING EMPTY,MULTILINESTRING((1 1,2 2)))") # lg8 = readWKT("GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,LINESTRING(1 1,2 2))") # # lg9 = readWKT("GEOMETRYCOLLECTION(LINESTRING(1 1,2 2),LINESTRING EMPTY)") # lg10= readWKT("GEOMETRYCOLLECTION(MULTILINESTRING((1 1,2 2)),MULTILINESTRING EMPTY)") # lg11= readWKT("GEOMETRYCOLLECTION(LINESTRING(1 1,2 2),MULTILINESTRING EMPTY)") # lg12= readWKT("GEOMETRYCOLLECTION(MULTILINESTRING((1 1,2 2)),LINESTRING EMPTY)") # # expect_that( lg1, is_identical_to(lg2) ) # expect_that( lg2, is_identical_to(lg3) ) # expect_that( lg3, is_identical_to(lg4) ) # # expect_that( lg5, is_identical_to(lg5) ) # expect_that( lg6, is_identical_to(lg7) ) # expect_that( lg7, is_identical_to(lg8) ) # # expect_that( lg9, is_identical_to(lg10) ) # expect_that( lg10, is_identical_to(lg11) ) # expect_that( lg11, is_identical_to(lg12) ) # # expect_that( lg1, is_identical_to(translate(lg1)) ) # expect_that( lg2, is_identical_to(translate(lg2)) ) # expect_that( lg3, is_identical_to(translate(lg3)) ) # expect_that( lg4, is_identical_to(translate(lg4)) ) # expect_that( lg5, is_identical_to(translate(lg5)) ) # expect_that( lg6, is_identical_to(translate(lg6)) ) # expect_that( lg7, is_identical_to(translate(lg7)) ) # expect_that( lg8, is_identical_to(translate(lg8)) ) # expect_that( lg9, is_identical_to(translate(lg9)) ) # expect_that( lg10, is_identical_to(translate(lg10)) ) # expect_that( lg11, is_identical_to(translate(lg11)) ) # expect_that( lg12, is_identical_to(translate(lg12)) ) #}) # # #test_that("empty linearrings", { # # lr1 = readWKT("LINEARRING EMPTY") # lr2 = readWKT("GEOMETRYCOLLECTION(LINEARRING EMPTY)") # # expect_that( lr1, is_identical_to(lr2) ) # # expect_that( lr1, is_identical_to(translate(lr1)) ) # expect_that( lr2, is_identical_to(translate(lr2)) ) # # lrg1 = readWKT("GEOMETRYCOLLECTION(LINEARRING EMPTY,LINEARRING EMPTY)") # lrg2 = readWKT("GEOMETRYCOLLECTION(LINEARRING EMPTY,LINEARRING(1 1,2 2,3 1,1 1))") # lrg3 = readWKT("GEOMETRYCOLLECTION(LINEARRING(1 1,2 2,3 1,1 1),LINEARRING EMPTY)") # # expect_that( lrg1, is_identical_to(translate(lrg1)) ) # expect_that( lrg2, is_identical_to(translate(lrg2)) ) # expect_that( lrg3, is_identical_to(translate(lrg3)) ) # #}) # # #test_that("empty polygons", { # # p1 = readWKT("POLYGON EMPTY") # p2 = readWKT("MULTIPOLYGON EMPTY") # p3 = readWKT("GEOMETRYCOLLECTION(POLYGON EMPTY)") # p4 = readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY)") # # expect_that( p1, is_identical_to(p2) ) # expect_that( p2, is_identical_to(p3) ) # expect_that( p3, is_identical_to(p4) ) # # expect_that( p1, is_identical_to(translate(p1)) ) # expect_that( p2, is_identical_to(translate(p2)) ) # expect_that( p3, is_identical_to(translate(p3)) ) # expect_that( p4, is_identical_to(translate(p4)) ) # # # mp1 = readWKT("MULTIPOLYGON(((1 1,2 2,3 1,1 1)), EMPTY)") # mp2 = readWKT("MULTIPOLYGON(EMPTY, ((1 1,2 2,3 1,1 1)))") # # expect_that( mp1, is_identical_to(translate(mp1)) ) # expect_that( mp2, is_identical_to(translate(mp2)) ) # # # pg1 = readWKT("GEOMETRYCOLLECTION(POLYGON EMPTY,POLYGON EMPTY)") # pg2 = readWKT("GEOMETRYCOLLECTION(POLYGON EMPTY,MULTIPOLYGON EMPTY)") # pg3 = readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY,POLYGON EMPTY)") # pg4 = readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY,MULTIPOLYGON EMPTY)") # # pg5 = readWKT("GEOMETRYCOLLECTION(POLYGON EMPTY, POLYGON((1 1,2 2,3 1,1 1)) )") # pg6 = readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY, POLYGON((1 1,2 2,3 1,1 1)) )") # pg7 = readWKT("GEOMETRYCOLLECTION(POLYGON EMPTY, MULTIPOLYGON(((1 1,2 2,3 1,1 1))) )") # pg8 = readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY, MULTIPOLYGON(((1 1,2 2,3 1,1 1))) )") # # pg9 = readWKT("GEOMETRYCOLLECTION(POLYGON((1 1,2 2,3 1,1 1)), POLYGON EMPTY)") # pg10= readWKT("GEOMETRYCOLLECTION(POLYGON((1 1,2 2,3 1,1 1)), MULTIPOLYGON EMPTY)") # pg11= readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON(((1 1,2 2,3 1,1 1))), POLYGON EMPTY)") # pg12= readWKT("GEOMETRYCOLLECTION(MULTIPOLYGON(((1 1,2 2,3 1,1 1))), MULTIPOLYGON EMPTY)") # # expect_that( pg1, is_identical_to(pg2) ) # expect_that( pg2, is_identical_to(pg3) ) # expect_that( pg3, is_identical_to(pg4) ) # # expect_that( pg5, is_identical_to(pg6) ) # expect_that( pg6, is_identical_to(pg7) ) # expect_that( pg7, is_identical_to(pg8) ) # # expect_that( pg9, is_identical_to(pg10) ) # expect_that(pg10, is_identical_to(pg11) ) # expect_that(pg11, is_identical_to(pg12) ) # # expect_that( pg1, is_identical_to(translate(pg1)) ) # expect_that( pg2, is_identical_to(translate(pg2)) ) # expect_that( pg3, is_identical_to(translate(pg3)) ) # expect_that( pg4, is_identical_to(translate(pg4)) ) # expect_that( pg5, is_identical_to(translate(pg5)) ) # expect_that( pg6, is_identical_to(translate(pg6)) ) # expect_that( pg7, is_identical_to(translate(pg7)) ) # expect_that( pg8, is_identical_to(translate(pg8)) ) # expect_that( pg9, is_identical_to(translate(pg9)) ) # expect_that( pg10,is_identical_to(translate(pg10))) # expect_that( pg11,is_identical_to(translate(pg11))) # expect_that( pg12,is_identical_to(translate(pg12))) # #}) rgeos/tests/testthat/test-linearref.R0000644000176200001440000000427014025150746017451 0ustar liggesuserslibrary("testthat") library("rgeos") library("sp") context("Linear Referencing") coord <- function(x) unname(coordinates(x)) test_that("zero-length input arguments fail with error", { dat <- data.frame(x = 1) p <- SpatialPointsDataFrame(readWKT("POINT(0 0)"), dat) l <- SpatialLinesDataFrame(readWKT("LINESTRING (-1 0, 1 0)"), dat) expect_error(gProject(l, subset(p, x > 1))) expect_error(gProject(subset(l, x > 1), p, normalized = TRUE)) expect_error(gInterpolate(l, numeric(0))) expect_error(gInterpolate(subset(l, x > 1), d = 0.5, normalized = TRUE)) }) test_that("interpolation works with zero length line", { l <- readWKT("LINESTRING (10 0, 10 0)") expect_identical(coord(gInterpolate(readWKT("LINESTRING (10 0, 10 0)"), d = 0.5)), coord(head(as(l, "SpatialPoints"), 1))) }) test_that("repeated coordinates work", { l <- readWKT("LINESTRING (10 0, 10 0, 20 0)") p <- readWKT("POINT(11 0)") d <- gProject(l, p, normalized = TRUE) expect_identical(gInterpolate(l, d, normalized = TRUE), p) d <- gProject(l, p, normalized = FALSE) expect_identical(gInterpolate(l, d, normalized = FALSE), p) }) test_that("functions work with MultiLineStrings", { # https://trac.osgeo.org/geos/ticket/323 l <- readWKT("MULTILINESTRING ((0 -2, 0 2), (-2 0, 2 0))") p <- readWKT("MULTIPOINT(2 1.9, 2 2.1)") res <- readWKT("MULTIPOINT(2 0, 0 2)") expect_identical(coord(gInterpolate(l, gProject(l, p))), coord(res)) }) test_that("normalization works in gInterpolate", { l <- readWKT("LINESTRING(25 50, 100 125, 150 190)") expect_equal(gInterpolate(l, 0.5*gLength(l), normalized = FALSE), gInterpolate(l, 0.5, normalized = TRUE)) }) test_that("interpolation is correct at endpoints", { l <- readWKT("LINESTRING(25 50, 100 125, 150 190)") p <- as(l, "SpatialPoints") expect_identical(coord(gInterpolate(l, 0, TRUE)), coord(p[1, ])) expect_identical(coord(gInterpolate(l, 0, FALSE)), coord(p[1, ])) expect_identical(coord(gInterpolate(l, 1, TRUE)), coord(p[length(p), ])) expect_identical(coord(gInterpolate(l, gLength(l), FALSE)), coord(p[length(p), ])) }) rgeos/tests/testthat/test-translate-rings.R0000644000176200001440000000416714025150746020624 0ustar liggesuserslibrary(testthat) library(rgeos) setScale() context("Translate Rings") test_that("translate linear ring", { lr1 = readWKT("LINEARRING (1 1, 1 2, 2 2, 2 1, 1 1)") lr2 = readWKT("LINEARRING (1 1, 2 1, 2 2, 1 2, 1 1)") gclr1 = readWKT("GEOMETRYCOLLECTION( LINEARRING (1 1, 1 2, 2 2, 2 1, 1 1), LINEARRING (1 1, 1 2, 2 2, 2 1, 1 1) )") gclr2 = readWKT("GEOMETRYCOLLECTION( LINEARRING (1 1, 1 2, 2 2, 2 1, 1 1), LINEARRING (1 1, 2 1, 2 2, 1 2, 1 1) )") gclr3 = readWKT("GEOMETRYCOLLECTION( LINEARRING (1 1, 2 1, 2 2, 1 2, 1 1), LINEARRING (1 1, 2 1, 2 2, 1 2, 1 1) )") Ring11 = Ring(cbind( x=c(1,1,2,2,1),y=c(1,2,2,1,1) ),ID="1") Ring12 = Ring(cbind( x=c(1,1,2,2,1),y=c(1,2,2,1,1) ),ID="2") Ring21 = Ring(cbind( x=c(1,2,2,1,1),y=c(1,1,2,2,1) ),ID="1") Ring22 = Ring(cbind( x=c(1,2,2,1,1),y=c(1,1,2,2,1) ),ID="2") splr1 = SpatialRings( list(Ring11) ); #rownames(splr1@bbox) = c("x","y") splr2 = SpatialRings( list(Ring21) ); #rownames(splr2@bbox) = c("x","y") spgclr1 = SpatialRings( list(Ring11,Ring12) ); #rownames(spgclr1@bbox) = c("x","y") spgclr2 = SpatialRings( list(Ring11,Ring22) ); #rownames(spgclr2@bbox) = c("x","y") spgclr3 = SpatialRings( list(Ring21,Ring22) ); #rownames(spgclr3@bbox) = c("x","y") expect_that( lr1 , is_identical_to(splr1) ) expect_that( lr2 , is_identical_to(splr2) ) expect_that( gclr1, is_identical_to(spgclr1) ) expect_that( gclr2, is_identical_to(spgclr2) ) expect_that( gclr3, is_identical_to(spgclr3) ) expect_that( splr1 , is_identical_to( translate(splr1))) expect_that( splr2 , is_identical_to( translate(splr2))) expect_that( spgclr1, is_identical_to( translate(spgclr1))) expect_that( spgclr2, is_identical_to( translate(spgclr2))) expect_that( spgclr3, is_identical_to( translate(spgclr3))) expect_that( lr1 , is_identical_to( translate(lr1) )) expect_that( lr2 , is_identical_to( translate(lr2) )) expect_that( gclr1, is_identical_to( translate(gclr1) )) expect_that( gclr2, is_identical_to( translate(gclr2) )) expect_that( gclr3, is_identical_to( translate(gclr3) )) })rgeos/tests/testthat/test-misc.R0000644000176200001440000000650614441604607016443 0ustar liggesuserslibrary("testthat") library("rgeos") library("sp") context("Misc - gNearestPoints") coord <- function(x) unname(coordinates(x)) test_that("gNearestPoints works with different geometries as inputs", { g1 <- readWKT("POINT(0 0)") g2 <- readWKT("POINT(10 0)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(0 0, 10 0)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("POINT(0 0)") g2 <- readWKT("MULTIPOINT(10 0, 50 30)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(0 0, 10 0)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("POINT(3 0)") g2 <- readWKT("LINESTRING(0 10, 50 10, 100 50)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(3 0, 3 10)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("POINT(3 0)") g2 <- readWKT("MULTILINESTRING((34 54, 60 34), (0 10, 50 10, 100 50))") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(3 0, 3 10)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("POINT(35 60)") g2 <- readWKT("POLYGON((34 54, 60 34, 60 54, 34 54), (50 50, 52 50, 52 48, 50 48, 50 50))") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(35 60, 35 54)"))) expect_identical(gDistance(g1, g2), 6) g1 <- readWKT("POINT(35 60)") g2 <- readWKT("MULTIPOLYGON(((34 54, 60 34, 60 54, 34 54), (50 50, 52 50, 52 48, 50 48, 50 50)), ((100 100, 150 100, 150 150, 100 150, 100 100), (120 120, 120 130, 130 130, 130 120, 120 120)))") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(35 60, 35 54)"))) expect_identical(gDistance(g1, g2), 6) g1 <- readWKT("MULTIPOINT(10 0, 50 30)") g2 <- readWKT("POINT(10 0)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(10 0, 10 0)"))) expect_identical(gDistance(g1, g2), 0) g1 <- readWKT("MULTIPOINT(10 0, 50 30)") g2 <- readWKT("MULTIPOINT(0 0, 150 30)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(10 0, 0 0)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("MULTIPOINT(3 0, 200 30)") g2 <- readWKT("LINESTRING(0 10, 50 10, 100 50)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(3 0, 3 10)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("MULTIPOINT(3 0, 200 30)") g2 <- readWKT("LINESTRING(0 10, 50 10, 100 50)") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(3 0, 3 10)"))) expect_identical(gDistance(g1, g2), 10) g1 <- readWKT("MULTIPOINT(3 0, -50 30)") g2 <- readWKT("MULTILINESTRING((34 54, 60 34), (0 10, 50 10, 100 50))") expect_identical(coord(gNearestPoints(g1, g2)), coord(readWKT("MULTIPOINT(3 0, 3 10)"))) expect_identical(gDistance(g1, g2), 10) # empty geometry dat <- data.frame(x = 1) g1 <- SpatialPointsDataFrame(rgeos::readWKT("POINT(0 0)"), dat) g2 <- SpatialLinesDataFrame(readWKT("LINESTRING (-1 0, 1 0)"), dat) expect_null(gNearestPoints(subset(g1, x > 1), g2)) }) rgeos/tests/DP_simplify.R0000644000176200001440000000044714041736255015111 0ustar liggesuserssuppressPackageStartupMessages(library(rgeos)) nc34 <- readWKT(readLines(system.file("wkts/nc34.wkt", package="rgeos"))) xF <- gSimplify(nc34, tol=5, topologyPreserve=FALSE) xT <- gSimplify(nc34, tol=5, topologyPreserve=TRUE) # https://github.com/r-spatial/sf/issues/1655#issuecomment-826358383 rgeos/tests/leak_by_exception.R0000644000176200001440000000215214025150746016346 0ustar liggesuserssuppressPackageStartupMessages(library(rgeos)) # g1 is invalid g1 <- readWKT('POLYGON((0 0, 10 10, 0 10, 10 0, 0 0))') g2 <- readWKT('POLYGON((2 2, 8 2, 8 8, 2 8, 2 2))') # binary operators try(g3 <- gUnion(g1, g2)) try(g3 <- gDifference(g1, g2)) try(g3 <- gIntersection(g1, g2)) try(g3 <- gSymdifference(g1, g2)) # unary operators try(g3 <- gSimplify(g1, tol=0.1)) try(g3 <- gPolygonize(list(as(g1, "SpatialLines")))) try(g3 <- gEnvelope(g1)) try(g3 <- gConvexHull(g1)) try(g3 <- gBoundary(g1)) try(g3 <- gCentroid(g1)) try(g3 <- gPointOnSurface(g1)) # binary predicates try(res <- gContains(g1, g2)) try(res <- gIntersects(g1, g2)) try(res <- gContainsProperly(g1, g2)) try(res <- gCovers(g1, g2)) try(res <- gCoveredBy(g1, g2)) try(res <- gDisjoint(g1, g2)) try(res <- gTouches(g1, g2)) try(res <- gCrosses(g1, g2)) try(res <- gWithin(g1, g2)) try(res <- gOverlaps(g1, g2)) try(res <- gEquals(g1, g2)) try(res <- gEqualsExact(g1, g2)) try(res <- gRelate(g1, g2)) # unary predicates try(res <- gIsEmpty(g1)) try(res <- gIsSimple(g1)) try(res <- gIsRing(g1)) try(res <- gIsValid(g1)) try(res <- gIsValid(g1, reason = TRUE)) rgeos/tests/DP_simplify.Rout.save0000644000176200001440000000175214041736562016577 0ustar liggesusers R version 4.0.5 (2021-03-31) -- "Shake and Throw" Copyright (C) 2021 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > suppressPackageStartupMessages(library(rgeos)) > nc34 <- readWKT(readLines(system.file("wkts/nc34.wkt", package="rgeos"))) > xF <- gSimplify(nc34, tol=5, topologyPreserve=FALSE) > xT <- gSimplify(nc34, tol=5, topologyPreserve=TRUE) > # https://github.com/r-spatial/sf/issues/1655#issuecomment-826358383 > > proc.time() user system elapsed 0.336 0.024 0.353 rgeos/tests/leak_by_exception.Rout.save0000644000176200001440000000774514441604704020050 0ustar liggesusers R version 4.3.0 (2023-04-21) -- "Already Tomorrow" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > suppressPackageStartupMessages(library(rgeos)) > # g1 is invalid > g1 <- readWKT('POLYGON((0 0, 10 10, 0 10, 10 0, 0 0))') > g2 <- readWKT('POLYGON((2 2, 8 2, 8 8, 2 8, 2 2))') > > # binary operators > try(g3 <- gUnion(g1, g2)) g1 is invalid Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, : TopologyException: side location conflict at 5 5. This can occur if the input geometry is invalid. In addition: Warning messages: 1: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : Self-intersection at or near point 5 5 2: In gUnion(g1, g2) : Invalid objects found; consider using set_RGEOS_CheckValidity(2L) 3: GEOS support is provided by the sf and terra packages among others > try(g3 <- gDifference(g1, g2)) g1 is invalid Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, : TopologyException: side location conflict at 5 5. This can occur if the input geometry is invalid. In addition: Warning messages: 1: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : Self-intersection at or near point 5 5 2: In gDifference(g1, g2) : Invalid objects found; consider using set_RGEOS_CheckValidity(2L) 3: GEOS support is provided by the sf and terra packages among others > try(g3 <- gIntersection(g1, g2)) g1 is invalid Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, : TopologyException: side location conflict at 5 5. This can occur if the input geometry is invalid. In addition: Warning messages: 1: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : Self-intersection at or near point 5 5 2: In gIntersection(g1, g2) : Invalid objects found; consider using set_RGEOS_CheckValidity(2L) 3: GEOS support is provided by the sf and terra packages among others > try(g3 <- gSymdifference(g1, g2)) g1 is invalid Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, : TopologyException: side location conflict at 5 5. This can occur if the input geometry is invalid. In addition: Warning messages: 1: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : Self-intersection at or near point 5 5 2: In gSymdifference(g1, g2) : Invalid objects found; consider using set_RGEOS_CheckValidity(2L) 3: GEOS support is provided by the sf and terra packages among others > > # unary operators > try(g3 <- gSimplify(g1, tol=0.1)) > try(g3 <- gPolygonize(list(as(g1, "SpatialLines")))) > try(g3 <- gEnvelope(g1)) > try(g3 <- gConvexHull(g1)) > try(g3 <- gBoundary(g1)) > try(g3 <- gCentroid(g1)) > try(g3 <- gPointOnSurface(g1)) > > # binary predicates > try(res <- gContains(g1, g2)) > try(res <- gIntersects(g1, g2)) > try(res <- gContainsProperly(g1, g2)) > try(res <- gCovers(g1, g2)) > try(res <- gCoveredBy(g1, g2)) > try(res <- gDisjoint(g1, g2)) > try(res <- gTouches(g1, g2)) > try(res <- gCrosses(g1, g2)) > try(res <- gWithin(g1, g2)) > try(res <- gOverlaps(g1, g2)) > try(res <- gEquals(g1, g2)) > try(res <- gEqualsExact(g1, g2)) > try(res <- gRelate(g1, g2)) > > # unary predicates > try(res <- gIsEmpty(g1)) > try(res <- gIsSimple(g1)) > try(res <- gIsRing(g1)) > try(res <- gIsValid(g1)) Warning message: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : Self-intersection at or near point 5 5 > try(res <- gIsValid(g1, reason = TRUE)) > > > proc.time() user system elapsed 0.313 0.038 0.343 rgeos/configure.ac0000644000176200001440000001511314455462260013670 0ustar liggesusers# dnl Process this file with autoconf to produce a configure script. define([pkgversion], esyscmd([sh -c "grep Version: DESCRIPTION | cut -d' ' -f2 | tr -d '\n'"]))dnl AC_INIT([rgeos],[pkgversion],[Roger.Bivand@nhh.no]) AC_CONFIG_SRCDIR(src/rgeos.c) # find R home and set correct compiler + flags : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then AC_MSG_ERROR([cannot determine R_HOME. Make sure you use R CMD INSTALL!]) fi RBIN="${R_HOME}/bin/R" # pick all flags for testing from R : ${CC=`"${RBIN}" CMD config CC`} : ${CXX=`"${RBIN}" CMD config CXX`} #: ${CPP=`"${RBIN}" CMD config CPP`} : ${CFLAGS=`"${RBIN}" CMD config CFLAGS`} : ${CPPFLAGS=`"${RBIN}" CMD config CPPFLAGS`} : ${LDFLAGS=`"${RBIN}" CMD config LDFLAGS`} # AC_SUBST([CC],["clang"]) # AC_SUBST([CXX],["clang++"]) AC_MSG_NOTICE([CC: ${CC}]) AC_MSG_NOTICE([CXX: ${CXX}]) AC_MSG_NOTICE([${PACKAGE_NAME}: ${PACKAGE_VERSION}]) AC_CHECK_FILE([/usr/bin/svnversion], [SVN_VERSION=`svnversion -n '.'`], [SVN_VERSION=""]) if test -n "${SVN_VERSION}" && test "${SVN_VERSION}" != "exported" && test "${SVN_VERSION}" != "Unversioned directory"; then echo "${SVN_VERSION}" > inst/SVN_VERSION else SVN_VERSION=`cat inst/SVN_VERSION | tr -d '\n'` fi AC_MSG_NOTICE([svn revision: ${SVN_VERSION}]) GEOS_CONFIG="geos-config" GEOS_CONFIG_SET="no" AC_ARG_WITH([geos-config], AS_HELP_STRING([--with-geos-config=GEOS_CONFIG],[the location of geos-config]), [geos_config=$withval]) if test [ -n "$geos_config" ] ; then GEOS_CONFIG_SET="yes" AC_SUBST([GEOS_CONFIG],["${geos_config}"]) AC_MSG_NOTICE(geos-config set to $GEOS_CONFIG) fi if test ["$GEOS_CONFIG_SET" = "no"] ; then AC_PATH_PROG([GEOS_CONFIG], ["$GEOS_CONFIG"],["no"]) if test ["$GEOS_CONFIG" = "no"] ; then AC_MSG_RESULT(no) AC_MSG_ERROR([geos-config not found or not executable.]) fi else AC_MSG_CHECKING(geos-config exists) if test -r "${GEOS_CONFIG}"; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR([geos-config not found - configure argument error.]) fi AC_MSG_CHECKING(geos-config executable) if test -x "${GEOS_CONFIG}"; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR([geos-config not executable.]) fi fi AC_MSG_CHECKING(geos-config usability) if test `${GEOS_CONFIG} --version`; then GEOS_VER=`${GEOS_CONFIG} --version` MAJ_VER=`echo $GEOS_VER | cut -d "." -f 1` MIN_VER=`echo $GEOS_VER | cut -d "." -f 2` PAT_VER=`echo $GEOS_VER | cut -d "." -f 3 | cut -c 1` # GEOS_VER_DOT=`echo $GEOS_VER | tr -d "." | cut -c1-3` GEOS_CPPFLAGS=`${GEOS_CONFIG} --cflags` if test ${MAJ_VER} = 3 && test ${MIN_VER} -lt 7 ; then # if test ${GEOS_VER_DOT} -lt 370 ; then GEOS_LIBS=`${GEOS_CONFIG} --libs` else GEOS_LIBS=`${GEOS_CONFIG} --clibs` fi GEOS_DEP_CLIBS=`${GEOS_CONFIG} --static-clibs | sed 's/-m/-lm/g'` AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR([${GEOS_CONFIG} not usable]) fi AC_MSG_NOTICE([GEOS version: ${GEOS_VER}]) AC_MSG_CHECKING([geos version at least 3.2.0]) if test ${MAJ_VER} = 3 && test ${MIN_VER} -lt 2 ; then #if test ${GEOS_VER_DOT} -lt 320 ; then AC_MSG_RESULT(no) AC_MSG_ERROR([Upgrade GEOS to at least 3.2.0]) else AC_MSG_RESULT(yes) fi #AC_MSG_CHECKING([geos version not more than 3.8.0]) #if test ${GEOS_VER_DOT} -gt 380 ; then # AC_MSG_RESULT(no) # AC_MSG_ERROR([GEOS version number too high]) #else # AC_MSG_RESULT(yes) #fi TEST_332="no" if test ${MAJ_VER} -gt 3 ; then TEST_332="yes" fi if test ${MAJ_VER} = 3 && test ${MIN_VER} -gt 3 ; then TEST_332="yes" fi if test ${MAJ_VER} = 3 && test ${MIN_VER} = 3 && test ${PAT_VER} -ge 2 ; then TEST_332="yes" fi AC_MSG_CHECKING(geos-config clibs) if test ${TEST_332} = "yes" ; then #if test ${GEOS_VER_DOT} -lt 332 ; then GEOS_CLIBS=`${GEOS_CONFIG} --clibs` AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) GEOS_CLIBS="-lgeos_c" fi AC_SUBST([PKG_CPPFLAGS],["${PKG_CPPFLAGS} ${GEOS_CPPFLAGS}"]) #AC_SUBST([PKG_LIBS],["${PKG_LIBS} ${GEOS_LIBS} ${GEOS_CLIBS}"]) AC_SUBST([PKG_LIBS],["${PKG_LIBS} ${GEOS_CLIBS}"]) # honor PKG_xx overrides # for CPPFLAGS we will superfluously double R's flags # since we'll set PKG_CPPFLAGS with this, but that shouldn't hurt CPPFLAGS="${CPPFLAGS} ${PKG_CPPFLAGS}" LIBS="${LIBS} ${PKG_LIBS}" #geosok=yes #AC_CHECK_HEADERS(geos_c.h,,geosok=no) #if test "${geosok}" = no; then # AC_MSG_ERROR([geos_c.h not found in given locations.]) #fi AC_MSG_CHECKING(geos_c.h presence and usability) [cat > geos_test.c << _EOCONF #include #include #include int main() { printf("%d\n", GEOS_CAPI_VERSION); exit(0); } _EOCONF] if test `${CC} ${CPPFLAGS} -o geos_test geos_test.c 2> /dev/null; echo $?` = 0; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR([geos_c.h not found in standard or given locations.]) fi rm -f geos_test geos_test.c #AC_CHECK_LIB(geos_c,initGEOS_r,,geosok=no) [cat > geos_test.cc <<_EOCONF #include #ifdef __cplusplus extern "C" { #endif static void __errorHandler(const char *fmt, ...) { return; } static void __warningHandler(const char *fmt, ...) { return; } int main() { GEOSContextHandle_t r = initGEOS_r((GEOSMessageHandler) __warningHandler, (GEOSMessageHandler) __errorHandler); finishGEOS_r(r); } #ifdef __cplusplus } #endif _EOCONF] #echo "${CXX} ${CPPFLAGS} -o geos_test geos_test.cc ${LIBS}" AC_MSG_CHECKING(geos: linking with libgeos_c) ${CXX} ${CPPFLAGS} -o geos_test geos_test.cc ${LIBS} 2> errors.txt if test `echo $?` -ne 0 ; then geosok=no AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) fi if test "${geosok}" = no; then AC_MSG_CHECKING(geos: linking with ${GEOS_DEP_CLIBS}) ${CXX} ${CPPFLAGS} -o geos_test geos_test.cc ${GEOS_DEP_CLIBS} 2> errors.txt if test `echo $?` -ne 0 ; then geosok=no AC_MSG_RESULT(no) cat errors.txt AC_MSG_NOTICE([Install failure: compilation and/or linkage problems.]) AC_MSG_ERROR([initGEOS_r not found in libgeos_c.]) else geosok=yes AC_SUBST([PKG_LIBS], ["${PKG_LIBS} ${GEOS_DEP_CLIBS}"]) AC_MSG_RESULT(yes) fi fi if test "${geosok}" = no; then cat errors.txt AC_MSG_NOTICE([Install failure: compilation and/or linkage problems.]) AC_MSG_ERROR([initGEOS_r not found in libgeos_c.]) fi rm -f geos_test errors.txt geos_test.cc if test "${geosok}" = no; then AC_MSG_ERROR([libgeos_c not found in given locations.]) fi AC_MSG_NOTICE([PKG_CPPFLAGS: ${PKG_CPPFLAGS}]) AC_SUBST(PKG_CPPFLAGS) AC_MSG_NOTICE([PKG_LIBS: ${PKG_LIBS}]) AC_SUBST(PKG_LIBS) AC_CONFIG_FILES(src/Makevars) AC_OUTPUT rgeos/src/0000755000176200001440000000000014455462435012174 5ustar liggesusersrgeos/src/rgeos_R2geosMP.c0000644000176200001440000000601614025150745015127 0ustar liggesusers#include "rgeos.h" // sp Polygons to fish soup geometry collection (multipoint) GEOSGeom rgeos_Polygons2MP(SEXP env, SEXP obj) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int pc=0; SEXP pls; PROTECT(pls = GET_SLOT(obj, install("Polygons"))); pc++; int npls = length(pls); int nn = 0; for (int i=0; i #include #include // suggested BDR 111114 #if GEOS_VERSION_MAJOR == 3 #if GEOS_VERSION_MINOR >= 3 #define HAVE_UNARYUNION 1 #endif #endif #if GEOS_VERSION_MAJOR > 3 #define HAVE_UNARYUNION 1 #define HAVE_DELAUNAY 1 #define HAVE_NODE 1 #define HAVE_NEARESTPOINTS 1 #define HAVE_MAKEVALID 1 #define HAVE_COVERAGEUNION 1 #define HAVE_MINIMUMROTATEDRECTANGLE 1 #define HAVE_MAXIMUMINSSCRIBEDCIRCLE 1 #endif #if GEOS_VERSION_MAJOR == 3 #if GEOS_VERSION_MINOR >= 4 #define HAVE_DELAUNAY 1 #define HAVE_NODE 1 #define HAVE_NEARESTPOINTS 1 #endif #endif #if GEOS_VERSION_MAJOR == 3 #if GEOS_VERSION_MINOR >= 8 #define HAVE_MAKEVALID 1 #define HAVE_COVERAGEUNION 1 #endif #endif #if GEOS_VERSION_MAJOR == 3 #if GEOS_VERSION_MINOR >= 9 #define HAVE_MINIMUMROTATEDRECTANGLE 1 #define HAVE_MAXIMUMINSSCRIBEDCIRCLE 1 #endif #endif #if GEOS_VERSION_MAJOR == 3 #if GEOS_VERSION_MINOR >= 10 #define HAVE_MAKEVALIDPARAMS 1 #endif #endif /* use same define in package's local_stubs.c file */ #define SP_XPORT(x) RGEOS_ ## x #include "sp.h" #define R_OFFSET 1 // Utility functions SEXP rgeos_GEOSversion(SEXP runtime); SEXP rgeos_sp_linkingTo_version(void); SEXP rgeos_Init(void); SEXP rgeos_finish(SEXP env); //static void rgeos_finish_handle(SEXP ptr); GEOSContextHandle_t getContextHandle(SEXP env); double getScale(SEXP env); double makePrecise(double val, double scale); double sym_round(double val); double java_math_round(double val); double rint_vc(double val); double rgeos_round(double val); // Based on geos rounding methods, use just one global round function char* get_errbuf(void); void unset_errbuf(void); int is_errbuf_set(void); SEXP rgeos_double_translate(SEXP env, SEXP obj, SEXP id); SEXP rgeos_PolyCreateComment(SEXP env, SEXP pls); // Bounding Box functions - rgeos_bbox.c SEXP rgeos_geom2bbox(SEXP env, GEOSGeom geom); // Coordinate sequence and matrix functions - rgeos_coord.c void rgeos_Pt2xy(SEXP env, GEOSGeom point, double *x, double *y); GEOSGeom rgeos_xy2Pt(SEXP env, double x, double y); GEOSCoordSeq rgeos_crdMat2CoordSeq(SEXP env, SEXP mat, SEXP dim); GEOSGeom rgeos_crdMat2LineString(SEXP env, SEXP mat, SEXP dim); GEOSGeom rgeos_crdMat2LinearRing(SEXP env, SEXP mat, SEXP dim); GEOSGeom rgeos_crdMat2Polygon(SEXP env, SEXP mat, SEXP dim); SEXP rgeos_CoordSeq2crdMat(SEXP env, const GEOSCoordSequence *s, int HasZ, int rev); SEXP rgeos_geospoint2crdMat(SEXP env, GEOSGeom geom, SEXP idlist, int ntotal, int type); SEXP rgeos_formatcrdMat(SEXP crdMat, int n ); SEXP rgeos_crdMatFixDir(SEXP crd, int hole); // Translate functions GEOS to R - rgeos_geos2R.c SEXP rgeos_convert_geos2R(SEXP env, GEOSGeom geom, SEXP p4s, SEXP id); SEXP rgeos_geospoint2SpatialPoints(SEXP env, GEOSGeom mpt, SEXP p4s, SEXP id, int n); SEXP rgeos_geosline2SpatialLines(SEXP env, GEOSGeom geom, SEXP p4s, SEXP id, int ng); SEXP rgeos_geosring2SpatialRings(SEXP env, GEOSGeom geom, SEXP p4s, SEXP idlist, int nrings); SEXP rgeos_geospolygon2SpatialPolygons(SEXP env, GEOSGeom geom, SEXP p4s, SEXP IDs, int ng); SEXP rgeos_geospolygon2Polygons(SEXP env, GEOSGeom geom, SEXP id); SEXP rgeos_geosring2Polygon(SEXP env, GEOSGeom lr, int hole); //Translate functions R to GEOS - rgeos_R2geos.c GEOSGeom rgeos_convert_R2geos(SEXP env, SEXP obj); GEOSGeom rgeos_SpatialPoints2geospoint(SEXP env, SEXP obj); GEOSGeom rgeos_SpatialLines2geosline(SEXP env, SEXP obj); GEOSGeom rgeos_Lines2geosline(SEXP env, SEXP obj); GEOSGeom rgeos_SpatialRings2geosring(SEXP env, SEXP obj); GEOSGeom rgeos_SpatialPolygons2geospolygon(SEXP env, SEXP obj); GEOSGeom rgeos_Polygons2geospolygon(SEXP env, SEXP obj); GEOSGeom rgeos_Polygons2MP(SEXP env, SEXP obj); GEOSGeom rgeos_Lines2MP(SEXP env, SEXP obj); GEOSGeom rgeos_Polygon2MP(SEXP env, SEXP obj); GEOSGeom rgeos_Polygons_i_2Polygon(SEXP env, SEXP pls, SEXP vec); // WKT Functions - rgeos_wkt.c SEXP rgeos_readWKT(SEXP env, SEXP obj, SEXP p4s, SEXP id); SEXP rgeos_writeWKT(SEXP env, SEXP obj, SEXP byid); // Topology Functions - rgeos_topology.c SEXP rgeos_envelope(SEXP env, SEXP obj, SEXP id, SEXP byid); SEXP rgeos_convexhull(SEXP env, SEXP obj, SEXP id, SEXP byid); SEXP rgeos_boundary(SEXP env, SEXP obj, SEXP id, SEXP byid); SEXP rgeos_getcentroid(SEXP env, SEXP obj, SEXP id, SEXP byid); SEXP rgeos_pointonsurface(SEXP env, SEXP obj, SEXP id, SEXP byid); SEXP rgeos_linemerge(SEXP env, SEXP obj, SEXP id, SEXP byid); SEXP rgeos_unioncascaded(SEXP env, SEXP obj, SEXP id, SEXP byid ); #ifdef HAVE_UNARYUNION SEXP rgeos_unaryunion(SEXP env, SEXP obj, SEXP id, SEXP byid ); #endif #ifdef HAVE_DELAUNAY SEXP rgeos_delaunaytriangulation(SEXP env, SEXP obj, SEXP tol, SEXP onlyEdges); #endif #ifdef HAVE_COVERAGEUNION SEXP rgeos_coverageunion(SEXP env, SEXP obj, SEXP id, SEXP byid ); #endif #ifdef HAVE_MINIMUMROTATEDRECTANGLE SEXP rgeos_minimumrotatedrectangle(SEXP env, SEXP obj, SEXP id, SEXP byid); #endif #ifdef HAVE_MAXIMUMINSSCRIBEDCIRCLE SEXP rgeos_maximuminscribedcircle(SEXP env, SEXP obj, SEXP id, SEXP byid, SEXP tol); #endif typedef GEOSGeometry* (*p_topofunc)(GEOSContextHandle_t, const GEOSGeometry*); SEXP rgeos_topologyfunc(SEXP env, SEXP obj, SEXP id, SEXP byid, p_topofunc); SEXP rgeos_simplify(SEXP env, SEXP obj, SEXP tol, SEXP id, SEXP byid, SEXP topPres); SEXP rgeos_polygonize(SEXP env, SEXP obj, SEXP id, SEXP p4s, SEXP cutEdges); #ifdef HAVE_NODE SEXP rgeos_node(SEXP env, SEXP obj); #endif #ifdef HAVE_MAKEVALID SEXP rgeos_makevalid(SEXP env, SEXP obj, SEXP id, SEXP byid ); #endif #ifdef HAVE_MAKEVALIDPARAMS SEXP rgeos_makevalidparams(SEXP env, SEXP obj, SEXP id, SEXP byid ); #endif // Binary Topology Functions - rgeos_topology_binary.c SEXP rgeos_difference(SEXP env, SEXP geom1, SEXP geom2, SEXP byid, SEXP ids); SEXP rgeos_symdifference(SEXP env, SEXP geom1, SEXP geom2, SEXP byid, SEXP ids); SEXP rgeos_intersection(SEXP env, SEXP geom1, SEXP geom2, SEXP byid, SEXP ids); SEXP rgeos_union(SEXP env, SEXP geom1, SEXP geom2, SEXP byid, SEXP ids); typedef GEOSGeometry* (*p_bintopofunc)(GEOSContextHandle_t, const GEOSGeometry*, const GEOSGeometry*); SEXP rgeos_binarytopologyfunc(SEXP env, SEXP geom1, SEXP geom2, SEXP byid, SEXP ids, p_bintopofunc); // Binary Predicate Functions - rgeos_predicate_binary.c SEXP rgeos_intersects_prepared(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_contains_prepared(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_containsproperly_prepared(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_covers_prepared(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); typedef char (*p_binpredfunc_prepared)(GEOSContextHandle_t, const GEOSPreparedGeometry*, const GEOSGeometry*); SEXP rgeos_binpredfunc_prepared(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid, p_binpredfunc_prepared, int canSym); SEXP rgeos_disjoint(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_touches(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_intersects(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_crosses(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_within(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_contains(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_overlaps(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_equals(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_relate(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); typedef char (*p_binpredfunc)(GEOSContextHandle_t, const GEOSGeometry*, const GEOSGeometry*); SEXP rgeos_binpredfunc( SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid, p_binpredfunc, int canSym); SEXP rgeos_equalsexact(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP tol, SEXP byid); SEXP rgeos_relatepattern(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP pattern, SEXP byid); SEXP rgeos_binpredfunc_opt(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP opt, SEXP byid, int relpat, int canSym); // Unary Predicate Functions - rgeos_predicate_unary.c SEXP rgeos_isvalid(SEXP env, SEXP spgeom, SEXP byid); SEXP rgeos_isvalidreason(SEXP env, SEXP spgeom, SEXP byid); SEXP rgeos_issimple(SEXP env, SEXP spgeom, SEXP byid); SEXP rgeos_isring(SEXP env, SEXP spgeom, SEXP byid); SEXP rgeos_hasz(SEXP env, SEXP spgeom, SEXP byid); SEXP rgeos_isempty(SEXP env, SEXP spgeom, SEXP byid); typedef char (*p_unarypredfunc)(GEOSContextHandle_t, const GEOSGeometry*); SEXP rgeos_unarypredfunc(SEXP env, SEXP spgeom, SEXP byid, p_unarypredfunc); // Buffer Functions - rgeos_buffer.c SEXP rgeos_buffer(SEXP env, SEXP obj, SEXP byid, SEXP id, SEXP width, SEXP quadsegs, SEXP capStyle, SEXP joinStyle, SEXP mitreLimit); // Linear referencing functions SEXP rgeos_project(SEXP env, SEXP spgeom, SEXP sppoint, SEXP normalized); SEXP rgeos_interpolate(SEXP env, SEXP spgeom, SEXP d, SEXP normalized); // Miscellaneous functions - rgeos_misc.c SEXP rgeos_area(SEXP env, SEXP obj, SEXP byid); SEXP rgeos_length(SEXP env, SEXP obj, SEXP byid); typedef int (*p_miscfunc)(GEOSContextHandle_t, const GEOSGeometry*, double *); SEXP rgeos_miscfunc(SEXP env, SEXP obj, SEXP byid, p_miscfunc ); SEXP rgeos_distance(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); SEXP rgeos_hausdorffdistance(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid); typedef int (*p_distfunc)(GEOSContextHandle_t,const GEOSGeometry*,const GEOSGeometry*, double *); SEXP rgeos_distancefunc(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid, p_distfunc); SEXP rgeos_hausdorffdistancedensify(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP densifyFrac, SEXP byid); typedef int (*p_distdenfunc)(GEOSContextHandle_t,const GEOSGeometry*,const GEOSGeometry*, double, double *); SEXP rgeos_distancedensifyfunc(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP densifyFrac, SEXP byid, p_distdenfunc); SEXP rgeos_nearestpoints(SEXP env, SEXP spgeom1, SEXP spgeom2); // Needs to be classified SEXP rgeos_PolygonsContain(SEXP env, SEXP obj); SEXP GC_Contains(SEXP env, GEOSGeom GC); SEXP rgeos_poly_findInBox(SEXP env, SEXP pls, SEXP as_points); // STRtree functions SEXP rgeos_binary_STRtree_query(SEXP env, SEXP obj1, SEXP obj2); SEXP rgeos_unary_STRtree_query(SEXP env, SEXP obj); #endif rgeos/src/rgeos_coord.c0000644000176200001440000002313014025150745014633 0ustar liggesusers#include "rgeos.h" GEOSCoordSeq rgeos_crdMat2CoordSeq(SEXP env, SEXP mat, SEXP dim) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int n = INTEGER_POINTER(dim)[0]; int m = INTEGER_POINTER(dim)[1]; if (m != 2) error("Only 2D geometries permitted"); GEOSCoordSeq s = GEOSCoordSeq_create_r(GEOShandle, (unsigned int) n, (unsigned int) m); if (s == NULL) error("rgeos_crdMat2CoordSeq: NULL GEOSCoordSeq"); double scale = getScale(env); for(int i=0; i 0) ? TRUE : FALSE; if ( (hole && cw) || (!hole && !cw) ) { SEXP newcrd; PROTECT( newcrd = NEW_NUMERIC(n*2) ); pc++; for(int i=0; i length(id)) { PROTECT(n_id = NEW_CHARACTER(n)); pc++; char str[15]; for (i=0; i < n; i++) { snprintf(str, sizeof(str), "%d", i+R_OFFSET); //Rprintf("i %d, str %s\n", i, str); SET_STRING_ELT(n_id, i, COPY_TO_USER_STRING(str)); } warning("rgeos_buffer: geometry count/id count mismatch - id changed"); } else { PROTECT(n_id = NEW_CHARACTER(length(id))); pc++; for (i=0; i < length(id); i++) SET_STRING_ELT(n_id, i, STRING_ELT(id, i)); } } else { n = 1; PROTECT(n_id = NEW_CHARACTER(length(id))); pc++; for (i=0; i < length(id); i++) SET_STRING_ELT(n_id, i, STRING_ELT(id, i)); } GEOSGeometry** geoms = (GEOSGeometry**) R_alloc((size_t) n, sizeof(GEOSGeometry*)); SEXP newids; PROTECT(newids = NEW_CHARACTER(n)); pc++; GEOSGeometry* curgeom = geom; GEOSGeometry* thisgeom; int k = 0; for(i=0, k=0; i 1) { curgeom = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i); if (curgeom == NULL) error("rgeos_buffer: unable to get subgeometries"); } //Rprintf("i %d k %d curgeom is %s\n", i, k, GEOSGeomType_r(GEOShandle, curgeom)); thisgeom = GEOSBufferWithStyle_r(GEOShandle, curgeom,//VG FIXME NUMERIC_POINTER(width)[i], INTEGER_POINTER(quadsegs)[0], INTEGER_POINTER(capStyle)[0], INTEGER_POINTER(joinStyle)[0], NUMERIC_POINTER(mitreLimit)[0]); // modified 131004 RSB // https://stat.ethz.ch/pipermail/r-sig-geo/2013-October/019470.html if (!GEOSisEmpty_r(GEOShandle, thisgeom)) { geoms[k] = thisgeom; //Rprintf("i %d k %d thisgeom is %s\n", i, k, GEOSGeomType_r(GEOShandle, thisgeom)); //Rprintf("n_id %s\n", CHAR(STRING_ELT(n_id, i))); SET_STRING_ELT(newids, k, STRING_ELT(n_id, i)); k++; } } GEOSGeom_destroy_r(GEOShandle, geom); if (k == 0) { UNPROTECT(pc); return(R_NilValue); } GEOSGeometry* res; if (k == 1) res = geoms[0]; else res = GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, geoms, (unsigned int) k); //Rprintf("res is %s\n", GEOSGeomType_r(GEOShandle, res)); SEXP ans; PROTECT(ans = rgeos_convert_geos2R(env, res, p4s, newids)); pc++; // releases res UNPROTECT(pc); return(ans); } rgeos/src/rgeos.c0000644000176200001440000001205114345570343013452 0ustar liggesusers#include #include "rgeos.h" //static void rgeos_finish_handle(SEXP ptr); //static GEOSContextHandle_t sr; SEXP rgeos_GEOSversion(SEXP runtime) { int rt = LOGICAL_POINTER(runtime)[0]; SEXP ans; PROTECT(ans = NEW_CHARACTER(1)); if (rt) { SET_STRING_ELT(ans, 0, COPY_TO_USER_STRING(GEOSversion())); } else { SET_STRING_ELT(ans, 0, COPY_TO_USER_STRING(GEOS_CAPI_VERSION)); } UNPROTECT(1); return(ans); } SEXP rgeos_sp_linkingTo_version(void) { return(SP_PREFIX(sp_linkingTo_version)()); } // from line 79, postgis/liblwgeom/lwgeom_geos.c /* Free any non-null GEOSGeometry* pointers passed as arguments * * Called by GEOS_FREE, which populates 'count' */ /*static void geos_destroy(size_t count, ...) { va_list ap; va_start(ap, count); while (count--) { GEOSGeometry* g = va_arg(ap, GEOSGeometry*); if (g) { GEOSGeom_destroy(g); } } }*/ char errbuf[BUFSIZ]; int errbuf_set; char* get_errbuf(void) { if (errbuf_set) return(errbuf); else return(NULL); } void unset_errbuf(void) { if (errbuf_set) { errbuf[0] = '\0'; errbuf_set = 0; } } int is_errbuf_set(void) { return (errbuf_set); } static void __errorHandler(const char *fmt, ...) { char *p; va_list ap; // from line 56, postgis/liblwgeom/lwgeom_geos.c /* do { geos_destroy((sizeof((void*[])...)/sizeof(void*)), ...); } while (0);*/ va_start(ap, fmt); unset_errbuf(); vsnprintf(errbuf, BUFSIZ-1, fmt, ap); va_end(ap); p = errbuf + strlen(errbuf) - 1; if(strlen(errbuf) > 0 && *p == '\n') *p = '\0'; errbuf_set = 1; //Rprintf("ptr: %d\n", (int) sr); // finishGEOS_r(sr); // error(errbuf); return; } static void __warningHandler(const char *fmt, ...) { char buf[BUFSIZ], *p; va_list ap; va_start(ap, fmt); vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); p = buf + strlen(buf) - 1; if(strlen(buf) > 0 && *p == '\n') *p = '\0'; warning(buf); return; } GEOSContextHandle_t getContextHandle(SEXP env) { SEXP ptr = findVarInFrame(env, install("GEOSptr")); GEOSContextHandle_t r = R_ExternalPtrAddr(ptr); return(r); } SEXP rgeos_Init(void) { GEOSContextHandle_t r = initGEOS_r((GEOSMessageHandler) __warningHandler, (GEOSMessageHandler) __errorHandler); // rchk replace mkChar with install RSB 180602 // sr = initGEOS_r((GEOSMessageHandler) __warningHandler, (GEOSMessageHandler) __errorHandler); SEXP sxpHandle = R_MakeExternalPtr((void *) r, install("GEOSContextHandle"), R_NilValue); // SEXP sxpHandle = R_MakeExternalPtr((void *) sr, install("GEOSContextHandle"), R_NilValue); // R_RegisterCFinalizerEx(sxpHandle, rgeos_finish_handle, TRUE); return(sxpHandle); } //static void rgeos_finish_handle(SEXP ptr) { // // if(!R_ExternalPtrAddr(ptr)) return; // R_ClearExternalPtr(ptr); //} SEXP rgeos_finish(SEXP env) { GEOSContextHandle_t r = getContextHandle(env); finishGEOS_r(r); SEXP sxpHandle = findVarInFrame(env, install("GEOSptr")); // rgeos_finish_handle(sxpHandle); if(!R_ExternalPtrAddr(sxpHandle)) return(R_NilValue); R_ClearExternalPtr(sxpHandle); return(R_NilValue); } double getScale(SEXP env) { return( NUMERIC_POINTER( findVarInFrame(env, install("scale")) )[0] ); } double rgeos_round(double val) { return( java_math_round(val) ); } double makePrecise(double val, double scale) { return( rgeos_round(val*scale)/scale ); } // Symmetric Rounding Algorithm - equivalent to C99 round() double sym_round(double val) { double n; double f = fabs(modf(val, &n)); if (val >= 0) { if (f < 0.5) { return( floor(val) ); } else if (f > 0.5) { return( ceil(val) ); } else { return( n + 1.0 ); } } else { if (f < 0.5) { return( ceil(val) ); } else if (f > 0.5) { return( floor(val) ); } else { return( n - 1.0 ); } } } // Asymmetric Rounding Algorithm - equivalent to Java Math.round() double java_math_round(double val) { double n; double f = fabs(modf(val, &n)); if (val >= 0) { if (f < 0.5) { return( floor(val) ); } else if (f > 0.5) { return( ceil(val) ); } else { return( n + 1.0 ); } } else { if (f < 0.5) { return( ceil(val) ); } else if (f > 0.5) { return( floor(val) ); } else { return( n ); } } } // Implementation of rint() double rint_vc(double val) { double n; double f=fabs(modf(val,&n)); if (val>=0) { if (f<0.5) { return( floor(val) ); } else if (f>0.5) { return( ceil(val) ); } else { return( (floor(n/2)==n/2)?n:n+1.0 ); } } else { if (f<0.5) { return( ceil(val) ); } else if (f>0.5) { return( floor(val) ); } else { return(( floor(n/2)==n/2)?n:n-1.0 ); } } } rgeos/src/init.c0000644000176200001440000001152314040504373013271 0ustar liggesusers#include #include #include "rgeos.h" #include // TODO - do any of these functions need to be called from R? static const R_CMethodDef CEntries[] = { {NULL, NULL, 0} }; static R_CallMethodDef CallEntries[] = { //Utility Functions {"rgeos_Init", (DL_FUNC) &rgeos_Init, 0}, {"rgeos_finish", (DL_FUNC) &rgeos_finish, 1}, {"rgeos_GEOSversion", (DL_FUNC) &rgeos_GEOSversion, 1}, {"rgeos_double_translate", (DL_FUNC) &rgeos_double_translate, 4}, {"rgeos_PolyCreateComment", (DL_FUNC) &rgeos_PolyCreateComment, 2}, {"rgeos_sp_linkingTo_version", (DL_FUNC) &rgeos_sp_linkingTo_version, 0}, //WKT Functions {"rgeos_readWKT", (DL_FUNC) &rgeos_readWKT,4}, {"rgeos_writeWKT", (DL_FUNC) &rgeos_writeWKT, 3}, //Topology Functions {"rgeos_envelope", (DL_FUNC) &rgeos_envelope, 4}, {"rgeos_convexhull", (DL_FUNC) &rgeos_convexhull, 4}, {"rgeos_boundary", (DL_FUNC) &rgeos_boundary, 4}, {"rgeos_getcentroid", (DL_FUNC) &rgeos_getcentroid, 4}, {"rgeos_pointonsurface", (DL_FUNC) &rgeos_pointonsurface, 4}, {"rgeos_linemerge", (DL_FUNC) &rgeos_linemerge, 4}, {"rgeos_unioncascaded", (DL_FUNC) &rgeos_unioncascaded, 4}, #ifdef HAVE_UNARYUNION {"rgeos_unaryunion", (DL_FUNC) &rgeos_unaryunion, 4}, #endif #ifdef HAVE_DELAUNAY {"rgeos_delaunaytriangulation", (DL_FUNC) &rgeos_delaunaytriangulation, 4}, #endif #ifdef HAVE_MAKEVALID {"rgeos_makevalid", (DL_FUNC) &rgeos_makevalid, 4}, #endif #ifdef HAVE_MAKEVALIDPARAMS {"rgeos_makevalidparams", (DL_FUNC) &rgeos_makevalidparams, 4}, #endif #ifdef HAVE_COVERAGEUNION {"rgeos_coverageunion", (DL_FUNC) &rgeos_coverageunion, 4}, #endif #ifdef HAVE_MINIMUMROTATEDRECTANGLE {"rgeos_minimumrotatedrectangle", (DL_FUNC) &rgeos_minimumrotatedrectangle, 4}, #endif #ifdef HAVE_MAXIMUMINSSCRIBEDCIRCLE {"rgeos_maximuminscribedcircle", (DL_FUNC) &rgeos_maximuminscribedcircle, 5}, #endif {"rgeos_simplify", (DL_FUNC) &rgeos_simplify, 6}, {"rgeos_polygonize", (DL_FUNC) &rgeos_polygonize, 5}, #ifdef HAVE_NODE {"rgeos_node", (DL_FUNC) &rgeos_node, 2}, #endif //Binary Topology Functions {"rgeos_difference", (DL_FUNC) &rgeos_difference, 5}, {"rgeos_symdifference", (DL_FUNC) &rgeos_symdifference, 5}, {"rgeos_intersection", (DL_FUNC) &rgeos_intersection, 5}, {"rgeos_union", (DL_FUNC) &rgeos_union, 5}, //Binary Predicate Functions {"rgeos_intersects_prepared", (DL_FUNC) &rgeos_intersects_prepared, 4}, {"rgeos_contains_prepared", (DL_FUNC) &rgeos_contains_prepared, 4}, {"rgeos_containsproperly_prepared", (DL_FUNC) &rgeos_containsproperly_prepared, 4}, {"rgeos_covers_prepared", (DL_FUNC) &rgeos_covers_prepared, 4}, {"rgeos_disjoint", (DL_FUNC) &rgeos_disjoint, 4}, {"rgeos_touches", (DL_FUNC) &rgeos_touches, 4}, {"rgeos_intersects", (DL_FUNC) &rgeos_intersects, 4}, {"rgeos_crosses", (DL_FUNC) &rgeos_crosses, 4}, {"rgeos_within", (DL_FUNC) &rgeos_within, 4}, {"rgeos_contains", (DL_FUNC) &rgeos_contains, 4}, {"rgeos_overlaps", (DL_FUNC) &rgeos_overlaps, 4}, {"rgeos_equals", (DL_FUNC) &rgeos_equals, 4}, {"rgeos_relate", (DL_FUNC) &rgeos_relate, 4}, {"rgeos_relatepattern", (DL_FUNC) &rgeos_relatepattern, 5}, {"rgeos_equalsexact", (DL_FUNC) &rgeos_equalsexact, 5}, //Unary Predicate Functions {"rgeos_isvalid", (DL_FUNC) &rgeos_isvalid, 3}, {"rgeos_issimple", (DL_FUNC) &rgeos_issimple, 3}, {"rgeos_isring", (DL_FUNC) &rgeos_isring, 3}, {"rgeos_hasz", (DL_FUNC) &rgeos_hasz, 3}, {"rgeos_isempty", (DL_FUNC) &rgeos_isempty, 3}, {"rgeos_isvalidreason", (DL_FUNC) &rgeos_isvalidreason, 3}, //Buffer Functions {"rgeos_buffer", (DL_FUNC) &rgeos_buffer, 9}, //Linear referencing functions {"rgeos_interpolate", (DL_FUNC) &rgeos_interpolate, 4}, {"rgeos_project", (DL_FUNC) &rgeos_project, 4}, //Misc functions {"rgeos_area", (DL_FUNC) &rgeos_area, 3}, {"rgeos_length", (DL_FUNC) &rgeos_length, 3}, {"rgeos_distance", (DL_FUNC) &rgeos_distance, 4}, {"rgeos_hausdorffdistance", (DL_FUNC) &rgeos_hausdorffdistance, 4}, {"rgeos_hausdorffdistancedensify", (DL_FUNC) &rgeos_hausdorffdistancedensify, 5}, #ifdef HAVE_NEARESTPOINTS {"rgeos_nearestpoints", (DL_FUNC) &rgeos_nearestpoints, 3}, #endif {"rgeos_PolygonsContain", (DL_FUNC) &rgeos_PolygonsContain, 2}, {"rgeos_poly_findInBox", (DL_FUNC) &rgeos_poly_findInBox, 3}, {"rgeos_binary_STRtree_query", (DL_FUNC) &rgeos_binary_STRtree_query, 3}, {"rgeos_unary_STRtree_query", (DL_FUNC) &rgeos_unary_STRtree_query, 2}, {NULL, NULL, 0} }; void #ifdef HAVE_VISIBILITY_ATTRIBUTE __attribute__ ((visibility ("default"))) #endif R_init_rgeos(DllInfo *dll) { // SEXP INIT; R_registerRoutines(dll, CEntries, CallEntries, NULL, NULL); // RSB FIXME R_useDynamicSymbols(dll, FALSE); // INIT = rgeos_Init(); } rgeos/src/rgeos_topology.c0000644000176200001440000002635714345570343015424 0ustar liggesusers#include "rgeos.h" SEXP rgeos_envelope(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSEnvelope_r) ); } SEXP rgeos_convexhull(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSConvexHull_r) ); } SEXP rgeos_boundary(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSBoundary_r) ); } SEXP rgeos_getcentroid(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSGetCentroid_r) ); } SEXP rgeos_pointonsurface(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSPointOnSurface_r) ); } SEXP rgeos_linemerge(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSLineMerge_r) ); } SEXP rgeos_unioncascaded(SEXP env, SEXP obj, SEXP id, SEXP byid ) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSUnionCascaded_r) ); } #ifdef HAVE_UNARYUNION SEXP rgeos_unaryunion(SEXP env, SEXP obj, SEXP id, SEXP byid ) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSUnaryUnion_r) ); } #endif #ifdef HAVE_MINIMUMROTATEDRECTANGLE SEXP rgeos_minimumrotatedrectangle(SEXP env, SEXP obj, SEXP id, SEXP byid) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSMinimumRotatedRectangle_r) ); } #endif #ifdef HAVE_MAKEVALID SEXP rgeos_makevalid(SEXP env, SEXP obj, SEXP id, SEXP byid ) { return( rgeos_topologyfunc(env, obj, id, byid, &GEOSMakeValid_r) ); } #endif #ifdef HAVE_MAKEVALIDPARAMS SEXP rgeos_makevalidparams(SEXP env, SEXP obj, SEXP id, SEXP byid ) { SEXP original, keepCollapsed; original = getAttrib(byid, install("original")); keepCollapsed = getAttrib(byid, install("keepCollapsed")); GEOSContextHandle_t GEOShandle = getContextHandle(env); SEXP p4s = GET_SLOT(obj, install("proj4string")); GEOSGeom geom = rgeos_convert_R2geos(env, obj); int type = GEOSGeomTypeId_r(GEOShandle, geom); int n = 1; if (LOGICAL_POINTER(byid)[0] && type == GEOS_GEOMETRYCOLLECTION) n = GEOSGetNumGeometries_r(GEOShandle, geom); if (n < 1) error("rgeos_makevalidparams: invalid number of geometries"); GEOSMakeValidParams *p = GEOSMakeValidParams_create_r(GEOShandle); if (LOGICAL_POINTER(original)[0]) { GEOSMakeValidParams_setMethod_r(GEOShandle, p, GEOS_MAKE_VALID_LINEWORK); } else { GEOSMakeValidParams_setMethod_r(GEOShandle, p, GEOS_MAKE_VALID_STRUCTURE); } GEOSMakeValidParams_setKeepCollapsed_r(GEOShandle, p, (int) LOGICAL_POINTER(keepCollapsed)[0]); GEOSGeom *resgeoms = (GEOSGeom *) R_alloc((size_t) n, sizeof(GEOSGeom)); for(int i=0; i 1) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i) : geom; if (curgeom == NULL) error("rgeos_makevalidparams: unable to get subgeometries"); resgeoms[i] = GEOSMakeValidWithParams_r(GEOShandle, curgeom, p); if (resgeoms[i] == NULL) { GEOSGeom_destroy_r(GEOShandle, geom); GEOSMakeValidParams_destroy_r(GEOShandle, p); char* errbuf = get_errbuf(); error(errbuf); } } GEOSGeom_destroy_r(GEOShandle, geom); GEOSMakeValidParams_destroy_r(GEOShandle, p); GEOSGeom res = (n == 1) ? resgeoms[0] : GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, resgeoms, (unsigned int) n); return( rgeos_convert_geos2R(env, res, p4s, id) ); // releases res } #endif #ifdef HAVE_MAXIMUMINSSCRIBEDCIRCLE SEXP rgeos_maximuminscribedcircle(SEXP env, SEXP obj, SEXP id, SEXP byid, SEXP tol) { GEOSContextHandle_t GEOShandle = getContextHandle(env); SEXP p4s = GET_SLOT(obj, install("proj4string")); GEOSGeom geom = rgeos_convert_R2geos(env, obj); int type = GEOSGeomTypeId_r(GEOShandle, geom); int n = 1; if (LOGICAL_POINTER(byid)[0] && type == GEOS_GEOMETRYCOLLECTION) n = GEOSGetNumGeometries_r(GEOShandle, geom); if (n < 1) error("rgeos_maximuminscribedcircle: invalid number of geometries"); GEOSGeom *resgeoms = (GEOSGeom *) R_alloc((size_t) n, sizeof(GEOSGeom)); for(int i=0; i 1) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i) : geom; if (curgeom == NULL) error("rgeos_maximuminscribedcircle: unable to get subgeometries"); resgeoms[i] = GEOSMaximumInscribedCircle_r(GEOShandle, curgeom, NUMERIC_POINTER(tol)[0]); if (resgeoms[i] == NULL) { GEOSGeom_destroy_r(GEOShandle, geom); char* errbuf = get_errbuf(); error(errbuf); } } GEOSGeom_destroy_r(GEOShandle, geom); GEOSGeom res = (n == 1) ? resgeoms[0] : GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, resgeoms, (unsigned int) n); return( rgeos_convert_geos2R(env, res, p4s, id) ); // releases res } #endif #ifdef HAVE_DELAUNAY SEXP rgeos_delaunaytriangulation(SEXP env, SEXP obj, SEXP tol, SEXP onlyEdges) { GEOSContextHandle_t GEOShandle = getContextHandle(env); double tolerance = NUMERIC_POINTER(tol)[0]; int oE = INTEGER_POINTER(onlyEdges)[0]; int pc=0; SEXP ans, id; SEXP p4s = GET_SLOT(obj, install("proj4string")); GEOSGeom geom = rgeos_convert_R2geos(env, obj); GEOSGeom resgeom = GEOSDelaunayTriangulation_r(GEOShandle, geom, tolerance, oE); if (resgeom == NULL) error("rgeos_delaunaytriangulation: unable to compute"); GEOSGeom_destroy_r(GEOShandle, geom); // int type = GEOSGeomTypeId_r(GEOShandle, resgeom); int ng = GEOSGetNumGeometries_r(GEOShandle, resgeom); //Rprintf("ng: %d, type: %d, %s\n", ng, type, GEOSGeomType_r(GEOShandle, resgeom)); // FIXME convert type 5 to type 7 char buf[BUFSIZ]; PROTECT(id = NEW_CHARACTER(ng)); pc++; for (int i=0; i 1) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i) : geom; if (curgeom == NULL) error("rgeos_topologyfunc: unable to get subgeometries"); if ( topofunc == GEOSUnionCascaded_r && GEOSGeomTypeId_r(GEOShandle, curgeom) == GEOS_POLYGON) { resgeoms[i] = GEOSGeom_clone_r(GEOShandle, curgeom); } else { resgeoms[i] = topofunc(GEOShandle, curgeom); if (resgeoms[i] == NULL) { GEOSGeom_destroy_r(GEOShandle, geom); char* errbuf = get_errbuf(); error(errbuf); } // error("rgeos_topologyfunc: unable to calculate"); } } GEOSGeom_destroy_r(GEOShandle, geom); GEOSGeom res = (n == 1) ? resgeoms[0] : GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, resgeoms, (unsigned int) n); return( rgeos_convert_geos2R(env, res, p4s, id) ); // releases res } SEXP rgeos_simplify(SEXP env, SEXP obj, SEXP tol, SEXP id, SEXP byid, SEXP topPres) { GEOSContextHandle_t GEOShandle = getContextHandle(env); SEXP p4s = GET_SLOT(obj, install("proj4string")); GEOSGeom geom = rgeos_convert_R2geos(env, obj); int type = GEOSGeomTypeId_r(GEOShandle, geom); int preserve = LOGICAL_POINTER(topPres)[0]; double tolerance = NUMERIC_POINTER(tol)[0]; int n = 1; if (LOGICAL_POINTER(byid)[0] && type == GEOS_GEOMETRYCOLLECTION) n = GEOSGetNumGeometries_r(GEOShandle, geom); if (n < 1) error("rgeos_simplify: invalid number of geometries"); GEOSGeom *resgeoms = (GEOSGeom *) R_alloc((size_t) n, sizeof(GEOSGeom)); for(int i=0; i 1) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i) : geom; if (curgeom == NULL) error("rgeos_topologyfunc: unable to get subgeometries"); resgeoms[i] = (preserve) ? GEOSTopologyPreserveSimplify_r(GEOShandle, curgeom, tolerance) : GEOSSimplify_r(GEOShandle, curgeom, tolerance); } GEOSGeom_destroy_r(GEOShandle, geom); GEOSGeom res = (n == 1) ? resgeoms[0] : GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, resgeoms, (unsigned int) n); return( rgeos_convert_geos2R(env, res, p4s, id) ); } SEXP rgeos_polygonize(SEXP env, SEXP obj, SEXP id, SEXP p4s, SEXP cutEdges) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int getCutEdges = LOGICAL_POINTER(cutEdges)[0]; int n = length(obj); GEOSGeom *geoms = (GEOSGeom *) R_alloc((size_t) n, sizeof(GEOSGeom)); for(int i=0; i 1) ? GEOSGetGeometryN_r(GEOShandle, geom1, i) : geom1; if (curgeom1 == NULL) error("rgeos_bintopofunc: unable to get subgeometries from geometry 1"); for(int j=0; j 1) ? GEOSGetGeometryN_r(GEOShandle, geom2, j) : geom2; if (curgeom2 == NULL) error("rgeos_bintopofunc: unable to get subgeometries from geometry 2"); thisgeom = bintopofunc(GEOShandle, curgeom1, curgeom2);//VG FIXME if (thisgeom == NULL) { GEOSGeom_destroy_r(GEOShandle, geom1); GEOSGeom_destroy_r(GEOShandle, geom2); char* buf = get_errbuf(); error(buf); } if (!GEOSisEmpty_r(GEOShandle, thisgeom)) { // conditionally drop returned objects with lower topological dimension // than minimum TD of input objects drop_me = FALSE; if (drop_lower_td) { thistd = GEOSTopologicalDimension_r(GEOShandle, thisgeom); if (thistd >= 0) { if (thistd < min_tds) drop_me = TRUE; } else { if (GEOSGeomTypeId_r(GEOShandle, thisgeom) == GEOS_GEOMETRYCOLLECTION) { int nsGC = GEOSGetNumGeometries_r(GEOShandle, thisgeom); GEOSGeom *kgeoms = (GEOSGeom *) R_alloc( (size_t) nsGC, sizeof(GEOSGeom)); for (k1=0, kk=0; k1 1) { if (min_tds == 0) { thisgeom = GEOSGeom_createCollection_r( GEOShandle, GEOS_MULTIPOINT, kgeoms, (unsigned int) kk); } else if (min_tds == 1) { thisgeom = GEOSGeom_createCollection_r( GEOShandle, GEOS_MULTILINESTRING, kgeoms, (unsigned int) kk); } else if (min_tds == 2) { thisgeom = GEOSGeom_createCollection_r( GEOShandle, GEOS_MULTIPOLYGON, kgeoms, (unsigned int) kk); } } else { thisgeom = kgeoms[0]; } } } else { drop_me = TRUE; } } } if (!drop_me) { geoms[k] = thisgeom; SET_STRING_ELT(ids, k, STRING_ELT(ids, i*n+j)); //Rprintf("%d: %d %d %s %d\n", k, GEOSisEmpty_r(GEOShandle, geoms[k]), GEOSGeomTypeId_r(GEOShandle, geoms[k]), GEOSGeomType_r(GEOShandle, geoms[k]), GEOSGetNumGeometries_r(GEOShandle, geoms[k])); k++; } } //if (GEOSisEmpty_r(GEOShandle, geomsk)) continue; } } GEOSGeom_destroy_r(GEOShandle, geom1); GEOSGeom_destroy_r(GEOShandle, geom2); //Rprintf("m=%d n=%d k=%d\n", m, n, k); if (k == 0) return(R_NilValue); GEOSGeom res = (k > 1) ? GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, geoms, (unsigned int) k)//VG FIXME : geoms[0]; //Rprintf("res is %s\n", GEOSGeomType_r(GEOShandle, res)); return( rgeos_convert_geos2R(env, res, p4s, ids) ); } rgeos/src/dummy.cc0000644000176200001440000000000014025150745013613 0ustar liggesusersrgeos/src/rgeos_wkt.c0000644000176200001440000000312014025150745014327 0ustar liggesusers#include "rgeos.h" SEXP rgeos_readWKT(SEXP env, SEXP obj, SEXP p4s, SEXP id) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSWKTReader *reader = GEOSWKTReader_create_r(GEOShandle); GEOSGeom geom = GEOSWKTReader_read_r(GEOShandle,reader, CHAR(STRING_ELT(obj, 0))); //VG FIXME GEOSWKTReader_destroy_r(GEOShandle,reader); if (geom == NULL) error("rgeos_readWKT: unable to read wkt"); SEXP ans = rgeos_convert_geos2R(env, geom, p4s, id); // destroys geom return(ans); } SEXP rgeos_writeWKT(SEXP env, SEXP obj, SEXP byid) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom = rgeos_convert_R2geos(env, obj); int n = (LOGICAL_POINTER(byid)[0]) ? GEOSGetNumGeometries_r(GEOShandle, geom) : 1; int pc=0; SEXP ans; PROTECT(ans = NEW_CHARACTER(n)); pc++; GEOSWKTWriter *writer = GEOSWKTWriter_create_r(GEOShandle); GEOSGeom curgeom = geom; for(int i=0; i 1) { curgeom = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i); if (curgeom == NULL) error("rgeos_writeWKT: unable to get subgeometries"); } char *buf = GEOSWKTWriter_write_r(GEOShandle, writer, curgeom); if (buf == NULL) error("rgeos_writeWKT: unable to write wkt"); SET_STRING_ELT(ans, i, COPY_TO_USER_STRING(buf)); GEOSFree_r(GEOShandle, buf); } GEOSWKTWriter_destroy_r(GEOShandle,writer); GEOSGeom_destroy_r(GEOShandle, geom); UNPROTECT(pc); return(ans); } rgeos/src/Makevars.win0000644000176200001440000000165214400066466014462 0ustar liggesusers#VERSION = 2.2.3 #COMPILED_BY ?= gcc-4.6.3 #RWINLIB = ../windows/gdal2-$(VERSION) #TARGET = lib$(subst gcc,,$(COMPILED_BY))$(R_ARCH) #PKG_CPPFLAGS =\ # -I$(RWINLIB)/include/geos #PKG_LIBS = \ # -L$(RWINLIB)/$(TARGET) \ # -L$(RWINLIB)/lib$(R_ARCH) \ # -lgeos_c -lgeos #all: clean winlibs #CXX_STD = CXX11 #winlibs: # mkdir -p ../inst # "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" --vanilla "../tools/winlibs.R" $(VERSION) #clean: # rm -f $(SHLIB) $(OBJECTS) #.PHONY: all winlibs clean VERSION = 3.4.1 RWINLIB = ../windows/gdal3-$(VERSION) TARGET = lib$(subst gcc,,$(COMPILED_BY))$(R_ARCH) PKG_CPPFLAGS =\ -I$(RWINLIB)/include PKG_LIBS = \ -L$(RWINLIB)/$(TARGET) \ -L$(RWINLIB)/lib$(R_ARCH) \ -lgeos_c -lgeos all: clean winlibs #CXX_STD = CXX11 winlibs: mkdir -p ../inst "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" --vanilla "../tools/winlibs.R" $(VERSION) clean: rm -f $(SHLIB) $(OBJECTS) .PHONY: all winlibs clean rgeos/src/rgeos_poly2nb.c0000644000176200001440000002212314025150745015113 0ustar liggesusers#include "rgeos.h" struct ud { int count; int *ids; }; void cb(void *item, void *userdata) { struct ud *my_UD; my_UD = userdata; my_UD->ids[my_UD->count] = *((int *) item); // 110904 EJP my_UD->count++; } static struct ud UD; SEXP rgeos_poly_findInBox(SEXP env, SEXP pls, SEXP as_points) { GEOSGeom *bbs; int npls, i, j, jj, pc=0; GEOSGeom GC, bb; SEXP pl, bblist; GEOSSTRtree *str; int *icard, *ids, *oids; int asPTS = LOGICAL_POINTER(as_points)[0]; GEOSContextHandle_t GEOShandle = getContextHandle(env); str = (GEOSSTRtree *) GEOSSTRtree_create_r(GEOShandle, (size_t) 10); npls = length(pls); bbs = (GEOSGeom *) R_alloc((size_t) npls, sizeof(GEOSGeom)); ids = (int *) R_alloc((size_t) npls, sizeof(int)); UD.ids = (int *) R_alloc((size_t) npls, sizeof(int)); oids = (int *) R_alloc((size_t) npls, sizeof(int)); for (i=0; i i) jj++; icard[i] = jj; if (icard[i] > 0) SET_VECTOR_ELT(bblist, i, NEW_INTEGER(icard[i])); for (j=0, jj=0; j 0 && UD.ids[j] > i) { oids[jj] = UD.ids[j] + R_OFFSET; jj++; } } R_isort(oids, jj); for (j=0; j 0) { SET_VECTOR_ELT(bblist, i, NEW_INTEGER(icard[i])); for (j=0; j i) jj++; icard[i] = jj; if (icard[i] > 0) { SET_VECTOR_ELT(bblist, i, NEW_INTEGER(icard[i])); for (j=0, jj=0; j i) { oids[jj] = UD.ids[j] + R_OFFSET; jj++; } } R_isort(oids, jj); for (j=0; j SEXP rgeos_double_translate(SEXP env, SEXP obj, SEXP id) { GEOSGeom geom = rgeos_convert_R2geos( env, obj); SEXP p4s = (obj == R_NilValue) ? R_NilValue : GET_SLOT(obj, install("proj4string")); SEXP ans = rgeos_convert_geos2R(env, geom, p4s, id); return(ans); } GEOSGeom rgeos_convert_R2geos(SEXP env, SEXP obj) { GEOSContextHandle_t GEOShandle = getContextHandle(env); if (obj == R_NilValue) return(GEOSGeom_createCollection_r(GEOShandle, GEOS_GEOMETRYCOLLECTION, NULL, 0)); char classbuf[BUFSIZ]; strcpy(classbuf, CHAR( STRING_ELT(GET_CLASS(obj), 0) )); //TODO - handle DataFrame classes gracefully if ( !strcmp( classbuf,"SpatialPoints") || !strcmp(classbuf,"SpatialPointsDataFrame") ) { return( rgeos_SpatialPoints2geospoint( env, obj) ); } else if ( !strcmp(classbuf,"SpatialLines") || !strcmp(classbuf,"SpatialLinesDataFrame") ) { return( rgeos_SpatialLines2geosline( env, obj) ); } else if ( !strcmp(classbuf,"SpatialRings") || !strcmp(classbuf,"SpatialRingsDataFrame") ) { return( rgeos_SpatialRings2geosring( env, obj) ); } else if ( !strcmp(classbuf,"SpatialPolygons") || !strcmp(classbuf,"SpatialPolygonsDataFrame") ) { return( rgeos_SpatialPolygons2geospolygon( env, obj) ); } else if ( !strcmp(classbuf,"SpatialCollections") ) { SEXP pointobj = GET_SLOT(obj, install("pointobj")); SEXP lineobj = GET_SLOT(obj, install("lineobj")); SEXP ringobj = GET_SLOT(obj, install("ringobj")); SEXP polyobj = GET_SLOT(obj, install("polyobj")); GEOSGeom GCs[] = {NULL,NULL,NULL,NULL}; int cnts[] = {0,0,0,0}; if (pointobj != R_NilValue) { GCs[0] = rgeos_SpatialPoints2geospoint(env, pointobj); cnts[0] = GEOSGetNumGeometries_r(GEOShandle, GCs[0]); cnts[0] = cnts[0] ? cnts[0] : 1; } if (lineobj != R_NilValue) { GCs[1] = rgeos_SpatialLines2geosline(env, lineobj); cnts[1] = GEOSGetNumGeometries_r(GEOShandle, GCs[1]); cnts[1] = cnts[1] ? cnts[1] : 1; } if (ringobj != R_NilValue) { GCs[2] = rgeos_SpatialRings2geosring(env, ringobj); cnts[2] = GEOSGetNumGeometries_r(GEOShandle, GCs[2]); cnts[2] = cnts[2] ? cnts[2] : 1; } if (polyobj != R_NilValue) { GCs[3] = rgeos_SpatialPolygons2geospolygon(env, polyobj); cnts[3] = GEOSGetNumGeometries_r(GEOShandle, GCs[3]); cnts[3] = cnts[3] ? cnts[3] : 1; } int ng = cnts[0]+cnts[1]+cnts[2]+cnts[3]; GEOSGeom *geoms = (GEOSGeom *) R_alloc((size_t) ng, sizeof(GEOSGeom)); int k=0; for(int i=0;i<4;i++) { if (cnts[i] == 0) continue; int n = GEOSGetNumGeometries_r(GEOShandle, GCs[i]); n = n ? n : 1; if (n == 1) { geoms[k] = GEOSGeom_clone_r(GEOShandle, GCs[i]); k++; } else if (n > 1) { for(int j=0; j 1) { //Rprintf("in n>1 branch\n"); GEOSGeom *holes = (GEOSGeom *) R_alloc((size_t) (n-1), sizeof(GEOSGeom)); for (int j=1; j= INT_MAX) error("rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded"); PROTECT(ans = NEW_LOGICAL(m*n)); pc++; } else { PROTECT(ans = NEW_LIST(m)); pc++; listvec = (int *) R_alloc((size_t) n, sizeof(int)); vecn = 0; } for(int i=0; i 1) ? GEOSGetGeometryN_r(GEOShandle, geom1, i) : geom1; if (curgeom1 == NULL) error("rgeos_binpredfunc_prepared: unable to get subgeometries from geometry 1"); const GEOSPreparedGeometry *prepgeom = GEOSPrepare_r(GEOShandle, curgeom1); for(int j=0; j i && canSym && retDen) break; const GEOSGeometry *curgeom2 = (n > 1) ? GEOSGetGeometryN_r(GEOShandle, geom2, j) : geom2; if (curgeom2 == NULL) error("rgeos_binpredfunc_prepared: unable to get subgeometries from geometry 2"); int val = (int) binpredfunc_prepared(GEOShandle, prepgeom, curgeom2); if (val == 2) error("rgeos_binpredfunc_prepared: comparison failed"); if (retDen) { LOGICAL_POINTER(ans)[n*i+j] = val; if (S1isS2 && canSym) LOGICAL_POINTER(ans)[n*j+i] = val; } else { if (val == 1) { listvec[vecn] = j+R_OFFSET; vecn++; } } } if (!retDen && vecn > 0) { SET_VECTOR_ELT(ans, i, NEW_INTEGER(vecn)); for (int j=0; j= INT_MAX) error("rgeos_binpredfunc: maximum returned dense matrix size exceeded"); if (binpredfunc == (p_binpredfunc) GEOSRelate_r) { PROTECT(ans = NEW_CHARACTER(m*n)); pc++; } else { PROTECT(ans = NEW_LOGICAL(m*n)); pc++; } } else { PROTECT(ans = NEW_LIST(m)); pc++; listvec = (int *) R_alloc((size_t) n, sizeof(int)); vecn = 0; } for(int i=0; i 1) ? GEOSGetGeometryN_r(GEOShandle, geom1, i) : geom1; if (curgeom1 == NULL) error("rgeos_binpredfunc: unable to get subgeometries from geometry 1"); for(int j=0; j i && canSym && retDen) break; const GEOSGeometry *curgeom2 = (n > 1) ? GEOSGetGeometryN_r(GEOShandle, geom2, j) : geom2; if (curgeom2 == NULL) error("rgeos_binpredfunc: unable to get subgeometries from geometry 2"); if (binpredfunc == (p_binpredfunc) GEOSRelate_r) { char *buf = (char *) GEOSRelate_r(GEOShandle, curgeom1, curgeom2); if (buf == NULL) error("rgeos_isvalidreason: test failed"); SET_STRING_ELT(ans, n*i+j, COPY_TO_USER_STRING(buf)); if (S1isS2 && canSym) SET_STRING_ELT(ans, n*j+i, COPY_TO_USER_STRING(buf)); GEOSFree_r(GEOShandle, buf); } else { int val = (int) binpredfunc(GEOShandle, curgeom1, curgeom2); if (val == 2) error("rgeos_binpredfunc: comparison failed"); if (retDen) { LOGICAL_POINTER(ans)[n*i+j] = val; if (S1isS2 && canSym) LOGICAL_POINTER(ans)[n*j+i] = val; } else { if (val == 1) { listvec[vecn] = j+R_OFFSET; vecn++; } } } } if (!retDen && vecn > 0) { SET_VECTOR_ELT(ans, i, NEW_INTEGER(vecn)); for (int j=0; j 1) ? GEOSGetGeometryN_r(GEOShandle, geom1, i) : geom1; if (curgeom1 == NULL) error("rgeos_equalsexact: unable to get subgeometries from geometry 1"); for(int j=0; j i && canSym) break; const GEOSGeometry *curgeom2 = (n > 1) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom2, j) : geom2; if (curgeom2 == NULL) error("rgeos_equalsexact: unable to get subgeometries from geometry 2"); int val; if (relpat) { char patbuf[BUFSIZ]; strcpy(patbuf, CHAR( STRING_ELT(opt, 0) )); val = (int) GEOSRelatePattern_r(GEOShandle, curgeom1, curgeom2, patbuf); } else { val = (int) GEOSEqualsExact_r(GEOShandle, curgeom1, curgeom2, NUMERIC_POINTER(opt)[0] ); } if (val == 2) error("rgeos_equalsexact: comparison failed"); LOGICAL_POINTER(ans)[n*i+j] = val; if (S1isS2 && canSym) LOGICAL_POINTER(ans)[n*j+i] = val; } } if (LOGICAL_POINTER(byid)[0] || LOGICAL_POINTER(byid)[1]) { SEXP dims; PROTECT(dims = NEW_INTEGER(2)); pc++; INTEGER_POINTER(dims)[0] = n; INTEGER_POINTER(dims)[1] = m; setAttrib(ans, R_DimSymbol, dims); } GEOSGeom_destroy_r(GEOShandle, geom1); if (!S1isS2) GEOSGeom_destroy_r(GEOShandle, geom2); UNPROTECT(pc); return(ans); } rgeos/src/rgeos_linearref.c0000644000176200001440000000622214025150745015477 0ustar liggesusers#include "rgeos.h" // Return distance of points 'spppoints' projected on 'spgeom' from origin // of 'spgeom'. Geometry 'spgeom' must be a lineal geometry SEXP rgeos_project(SEXP env, SEXP spgeom, SEXP sppoint, SEXP normalized) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom = rgeos_convert_R2geos(env, spgeom); SEXP crds = GET_SLOT(sppoint, install("coords")); SEXP dim = getAttrib(crds, install("dim")); int nlines = length(GET_SLOT(spgeom, install("lines"))); if (nlines < 1) { error("rgeos_project: invalid number of lines"); } int n = INTEGER_POINTER(dim)[0]; if (n < 1) { error("rgeos_project: invalid number of points"); } int pc = 0; SEXP ans; PROTECT(ans = NEW_NUMERIC(n)); pc++; GEOSGeom p; // select projection function (normalized/unnormalized) double GEOS_DLL (*proj_fun)(GEOSContextHandle_t, const GEOSGeometry*, const GEOSGeometry*); if (LOGICAL_POINTER(normalized)[0]) { proj_fun = &GEOSProjectNormalized_r; } else { proj_fun = &GEOSProject_r; } // project points to line geometry for (int i = 0; i < n; i++) { p = rgeos_xy2Pt(env, NUMERIC_POINTER(crds)[i], NUMERIC_POINTER(crds)[i+n]); NUMERIC_POINTER(ans)[i] = (*proj_fun)(GEOShandle, geom, p); } GEOSGeom_destroy_r(GEOShandle, geom); GEOSGeom_destroy_r(GEOShandle, p); UNPROTECT(pc); return(ans); } // Return closest point to given distance within geometry. // 'spgeom' must be a LineString SEXP rgeos_interpolate(SEXP env, SEXP spgeom, SEXP d, SEXP normalized) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom = rgeos_convert_R2geos(env, spgeom); GEOSGeom res_geos; double dist; int nlines = length(GET_SLOT(spgeom, install("lines"))); if (nlines < 1) { error("rgeos_project: invalid number of lines"); } int n = LENGTH(d); if (n < 1) { error("rgeos_interpolate: invalid number of requested points"); } int pc = 0; SEXP crd; PROTECT(crd = NEW_NUMERIC(n*2)); pc++; double x; double y; SEXP ans; // select interpolation function (normalized/unnormalized) GEOSGeometry GEOS_DLL *(*interp_fun)(GEOSContextHandle_t, const GEOSGeometry*, double); if (LOGICAL_POINTER(normalized)[0]) { interp_fun = &GEOSInterpolateNormalized_r; } else { interp_fun = &GEOSInterpolate_r; } // interpolate points and store result in coord matrix for (int i = 0; i < n; i++) { dist = NUMERIC_POINTER(d)[i]; res_geos = (*interp_fun)(GEOShandle, geom, dist);//VG FIXME rgeos_Pt2xy(env, res_geos, &x, &y); NUMERIC_POINTER(crd)[i] = x; NUMERIC_POINTER(crd)[n+i] = y; } GEOSGeom_destroy_r(GEOShandle, geom); GEOSGeom_destroy_r(GEOShandle, res_geos); // return coordinates as matrix PROTECT(ans = rgeos_formatcrdMat(crd, n)); pc++; UNPROTECT(pc); return(ans); } rgeos/src/Makevars.ucrt0000644000176200001440000000122614400066444014633 0ustar liggesusers#VERSION = 2.2.3 #COMPILED_BY ?= gcc-4.6.3 #RWINLIB = ../windows/gdal2-$(VERSION) #TARGET = lib$(subst gcc,,$(COMPILED_BY))$(R_ARCH) #PKG_CPPFLGS =\ # -I$(RWINLIB)/include/geos #PKG_LIBS = \ # -L$(RWINLIB)/$(TARGET) \ # -L$(RWINLIB)/lib$(R_ARCH) \ # -lgeos_c -lgeos #all: clean winlibs #CXX_STD = CXX11 #winlibs: # mkdir -p ../inst # "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" --vanilla "../tools/winlibs.R" $(VERSION) #clean: # rm -f $(SHLIB) $(OBJECTS) #.PHONY: all winlibs clean TARGET = lib$(subst gcc,,$(COMPILED_BY))$(R_ARCH) PKG_LIBS = \ -lgeos_c -lgeos all: clean #CXX_STD = CXX11 clean: rm -f $(SHLIB) $(OBJECTS) .PHONY: all clean rgeos/src/rgeos_bbox.c0000644000176200001440000000434714025150745014470 0ustar liggesusers#include "rgeos.h" SEXP rgeos_geom2bbox(SEXP env, GEOSGeom geom) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int pc=0; if (GEOSisEmpty_r(GEOShandle, geom) == 1) return(R_NilValue); GEOSGeom envel = GEOSEnvelope_r(GEOShandle, geom); if (envel == NULL) return(R_NilValue); const GEOSGeometry *ext = (GEOSGeomTypeId_r(GEOShandle, envel) != GEOS_POLYGON) ? envel : GEOSGetExteriorRing_r(GEOShandle, envel); const GEOSCoordSequence *s = GEOSGeom_getCoordSeq_r(GEOShandle, ext); if (s == NULL) error("rgeos_geom2bbox: envelope has empty coordinate sequence"); unsigned int i, n; GEOSCoordSeq_getSize_r(GEOShandle, s, &n); if (n == 0) return(R_NilValue); SEXP bbmat; PROTECT(bbmat = rgeos_CoordSeq2crdMat(env, s, 0, FALSE)); pc++; GEOSGeom_destroy_r(GEOShandle, envel); SEXP ans; PROTECT(ans = NEW_NUMERIC(4)); pc++; NUMERIC_POINTER(ans)[0] = DBL_MAX; NUMERIC_POINTER(ans)[1] = DBL_MAX; NUMERIC_POINTER(ans)[2] = -DBL_MAX; NUMERIC_POINTER(ans)[3] = -DBL_MAX; for (i=0; i 1) ? GEOSGetGeometryN_r(GEOShandle, geom, i) : geom; if (curgeom == NULL) error("rgeos_unarypredfunc: unable to get subgeometries"); int val = (int) unarypredfunc(GEOShandle, curgeom); if (val == 2) error("rgeos_unarypredfunc: test failed"); LOGICAL_POINTER(ans)[i] = val; } GEOSGeom_destroy_r(GEOShandle, geom); UNPROTECT(pc); return(ans); } SEXP rgeos_isvalidreason(SEXP env, SEXP spgeom, SEXP byid) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int pc=0; GEOSGeom geom = rgeos_convert_R2geos(env, spgeom); int type = GEOSGeomTypeId_r(GEOShandle, geom); int n = (LOGICAL_POINTER(byid)[0] && type == GEOS_GEOMETRYCOLLECTION) ? GEOSGetNumGeometries_r(GEOShandle, geom) : 1; if (n == -1) error("rgeos_isvalidreason: invalid number of subgeometries"); SEXP ans; PROTECT(ans = NEW_CHARACTER(n)); pc++; for(int i=0; i 1) ? curgeom = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i) : geom; if (curgeom == NULL) error("rgeos_isvalidreason: unable to get subgeometries"); char *buf = (char *) GEOSisValidReason_r(GEOShandle, curgeom); if (buf == NULL) error("rgeos_isvalidreason: test failed"); SET_STRING_ELT(ans, i, COPY_TO_USER_STRING(buf)); GEOSFree_r(GEOShandle, buf); } GEOSGeom_destroy_r(GEOShandle, geom); UNPROTECT(pc); return(ans); } rgeos/src/rgeos_validate.c0000644000176200001440000001400214025150745015314 0ustar liggesusers#include "rgeos.h" SEXP rgeos_PolyCreateComment(const SEXP env, const SEXP pls) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int npls = length(pls); GEOSGeom *polys = (GEOSGeom *) R_alloc((size_t) npls, sizeof(GEOSGeom)); GEOSGeom *holes = (GEOSGeom *) R_alloc((size_t) npls, sizeof(GEOSGeom)); int *polyindex = (int *) R_alloc((size_t) npls, sizeof(int)); int *holeindex = (int *) R_alloc((size_t) npls, sizeof(int)); int nholes = 0; int npolys = 0; for(int i=0; i length(IDs)) error("rgeos_geospolygon2SpatialPolygons: ng > length(IDs)"); double polyT = NUMERIC_POINTER(findVarInFrame(env, install("polyThreshold")))[0]; int dropSlivers = LOGICAL_POINTER(findVarInFrame(env, install("dropSlivers")))[0]; int warnSlivers = LOGICAL_POINTER(findVarInFrame(env, install("warnSlivers")))[0]; double iarea = 0.0; int *keep = (int *) R_alloc((size_t) ng, sizeof(int)); int ing=0; for (int i=0; i 0.0) { int kk=0; kk1=0; double iiarea, maxiiarea=0.0; int n_maxarea=-1; for (int ii=0; ii maxiiarea) n_maxarea = kk; if (warnSlivers) warning("Exterior ring %d of object %s area %g", ii, CHAR(STRING_ELT(ID, 0)), iiarea); } else { kk1++; } kk++; int nirs = GEOSGetNumInteriorRings_r(GEOShandle, GC); for (int j=0; j maxiiarea) n_maxarea = kk; if (warnSlivers) warning("Interior ring %d of Polygon %d of object %s area %g", j, ii, CHAR(STRING_ELT(ID, 0)), iiarea); } else { kk1++; } kk++; } } if (kk1 == 0 && dropSlivers) { if (n_maxarea < 0 || n_maxarea >= npoly) error("n_maxarea %d out of bounds 0:%d", n_maxarea, npoly); keep[n_maxarea] = TRUE; kk1++; } } if (polyT > 0.0 && dropSlivers) { npoly = kk1; } SEXP polys; PROTECT(polys = NEW_LIST(npoly)); pc++; int *comm = (int *) R_alloc((size_t) npoly, sizeof(int)); int *po = (int *) R_alloc((size_t) npoly, sizeof(int)); double *areas = (double *) R_alloc((size_t) npoly, sizeof(double)); totalarea = 0.0; int k = 0; int ownerk=0; if (polyT > 0.0 && dropSlivers) { int kk = 0; for (int i=0; i length(idlist)) error("rgeos_geosline2SpatialLines: nlines > length(idlist)"); SEXP bbox, lines_list, cls_Line, cls_Lines; PROTECT(bbox = rgeos_geom2bbox(env, geom)); pc++; PROTECT(lines_list = NEW_LIST(nlines)); pc++; PROTECT(cls_Line = MAKE_CLASS("Line")); pc++; PROTECT(cls_Lines = MAKE_CLASS("Lines")); pc++; for(int j = 0; j < nlines; j++) { int jpc = 0; curgeom = (type == GEOS_GEOMETRYCOLLECTION) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, j) : geom; if (curgeom == NULL) error("rgeos_geosline2SpatialLines: unable to get geometry collection geometry"); int curtype = GEOSGeomTypeId_r(GEOShandle, curgeom); int n = GEOSGetNumGeometries_r(GEOShandle, curgeom); if (n == -1) error("rgeos_geosline2SpatialLines: invalid number of geometries in current geometry"); n = n ? n : 1; SEXP line_list; PROTECT(line_list = NEW_LIST(n)); jpc++; for(int i = 0; i < n; i++) { int ipc = 0; subgeom = (curtype == GEOS_MULTILINESTRING && !GEOSisEmpty_r(GEOShandle, curgeom)) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, curgeom, i) : curgeom; if(subgeom == NULL) error("rgeos_geosline2SpatialLines: unable to get subgeometry"); SEXP crdmat; if (GEOSisEmpty_r(GEOShandle, subgeom) == 0) { s = (GEOSCoordSeq) GEOSGeom_getCoordSeq_r(GEOShandle, subgeom); if (s == NULL) error("rgeos_geosline2SpatialLines: unable to generate coordinate sequence"); PROTECT( crdmat = rgeos_CoordSeq2crdMat(env, s, FALSE, FALSE)); ipc++; } else { error("rgeos_geosline2SpatialLines: empty line found"); // PROTECT( crdmat = R_NilValue); } SEXP line; // rchk PROTECT MAKE_CLASS RSB 180602 PROTECT(line = NEW_OBJECT(cls_Line)); ipc++; SET_SLOT(line, install("coords"), crdmat); SET_VECTOR_ELT(line_list, i, line ); UNPROTECT(ipc); } SEXP lines; // rchk PROTECT MAKE_CLASS RSB 180602 PROTECT( lines = NEW_OBJECT(cls_Lines) ); jpc++; SET_SLOT(lines, install("Lines"), line_list); char idbuf[BUFSIZ]; strcpy(idbuf, CHAR( STRING_ELT(idlist, j) )); SEXP id; PROTECT( id = NEW_CHARACTER(1) ); jpc++; SET_STRING_ELT(id, 0, COPY_TO_USER_STRING(idbuf)); SET_SLOT(lines, install("ID"), id); SET_VECTOR_ELT( lines_list, j, lines ); UNPROTECT(jpc); } SEXP ans; PROTECT(ans = NEW_OBJECT(MAKE_CLASS("SpatialLines"))); pc++; SET_SLOT(ans, install("lines"), lines_list); SET_SLOT(ans, install("bbox"), bbox); SET_SLOT(ans, install("proj4string"), p4s); UNPROTECT(pc); return(ans); } SEXP rgeos_geosring2SpatialRings(SEXP env, GEOSGeom geom, SEXP p4s, SEXP idlist, int nrings) { GEOSContextHandle_t GEOShandle = getContextHandle(env); int type = GEOSGeomTypeId_r(GEOShandle, geom); if (type != GEOS_LINEARRING && type != GEOS_GEOMETRYCOLLECTION ) error("rgeos_geosring2SpatialRings: invalid type"); if (nrings < 1) error("rgeos_geosring2SpatialRings: invalid number of geometries"); int pc=0; SEXP bbox, rings_list, cls_Ring; PROTECT(bbox = rgeos_geom2bbox(env, geom)); pc++; PROTECT(rings_list = NEW_LIST(nrings)); pc++; PROTECT(cls_Ring = MAKE_CLASS("Ring")); pc++; for(int j = 0; j < nrings; j++) { int lpc = 0; GEOSGeom curgeom = (type == GEOS_GEOMETRYCOLLECTION) ? (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, j) : geom; if (curgeom == NULL) { UNPROTECT(pc); error("rgeos_geosring2SpatialRings: unable to get geometry collection geometry"); } SEXP crdmat; if (GEOSisEmpty_r(GEOShandle, curgeom) == 0) { GEOSCoordSeq s = (GEOSCoordSeq) GEOSGeom_getCoordSeq_r(GEOShandle, curgeom); if (s == NULL) { UNPROTECT(pc); error("rgeos_geosring2SpatialRings: unable to generate coordinate sequence"); } PROTECT(crdmat = rgeos_crdMatFixDir(PROTECT(rgeos_CoordSeq2crdMat(env, s, FALSE, FALSE)), FALSE)); lpc += 2; } else { PROTECT( crdmat = R_NilValue); lpc++; } SEXP ring; PROTECT(ring = NEW_OBJECT(cls_Ring)); lpc++; SET_SLOT(ring, install("coords"), crdmat); SEXP id; PROTECT( id = NEW_CHARACTER(1) ); lpc++; char idbuf[BUFSIZ]; strcpy(idbuf, CHAR( STRING_ELT(idlist, j) )); SET_STRING_ELT(id, 0, COPY_TO_USER_STRING(idbuf)); SET_SLOT(ring, install("ID"), id); SET_VECTOR_ELT(rings_list, j, ring ); UNPROTECT(lpc); } SEXP ans, cls; PROTECT(cls = MAKE_CLASS("SpatialRings")); pc++; PROTECT(ans = NEW_OBJECT(cls)); pc++; SET_SLOT(ans, install("rings"), rings_list); SET_SLOT(ans, install("bbox"), bbox); SET_SLOT(ans, install("proj4string"), p4s); UNPROTECT(pc); return(ans); } rgeos/src/Makevars.in0000644000176200001440000000006114025150745014261 0ustar liggesusersPKG_CPPFLAGS=@PKG_CPPFLAGS@ PKG_LIBS=@PKG_LIBS@ rgeos/src/rgeos_misc.c0000644000176200001440000001677514025150745014501 0ustar liggesusers#include "rgeos.h" SEXP rgeos_area(SEXP env, SEXP obj, SEXP byid) { return( rgeos_miscfunc(env, obj, byid, &GEOSArea_r) ); } SEXP rgeos_length(SEXP env, SEXP obj, SEXP byid) { return( rgeos_miscfunc(env, obj, byid, &GEOSLength_r) ); } SEXP rgeos_miscfunc(SEXP env, SEXP obj, SEXP byid, p_miscfunc miscfunc) { SEXP ans; GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom = rgeos_convert_R2geos(env, obj); int type = GEOSGeomTypeId_r(GEOShandle, geom); int n = (LOGICAL_POINTER(byid)[0] && type == GEOS_GEOMETRYCOLLECTION) ? GEOSGetNumGeometries_r(GEOShandle, geom) : 1; int pc=0; PROTECT(ans = NEW_NUMERIC(n)); pc++; GEOSGeom curgeom = geom; for(int i=0; i 1) { curgeom = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom, i); if (curgeom == NULL) error("rgeos_miscfunc: unable to get subgeometries"); } double val; if (!miscfunc(GEOShandle, curgeom, &val)) error("rgeos_miscfunc: unable to calculate"); NUMERIC_POINTER(ans)[i] = val; } GEOSGeom_destroy_r(GEOShandle, geom); UNPROTECT(pc); return(ans); } SEXP rgeos_distance(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid) { return( rgeos_distancefunc(env, spgeom1, spgeom2, byid, &GEOSDistance_r) ); } SEXP rgeos_hausdorffdistance(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid) { return( rgeos_distancefunc(env, spgeom1, spgeom2, byid, &GEOSHausdorffDistance_r) ); } SEXP rgeos_distancefunc(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP byid, p_distfunc distfunc) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom1 = rgeos_convert_R2geos(env, spgeom1); int type1 = GEOSGeomTypeId_r(GEOShandle, geom1); GEOSGeom geom2; int type2; int sym_ans = FALSE; if (spgeom2 == R_NilValue) { sym_ans = TRUE; geom2 = geom1; type2 = GEOSGeomTypeId_r(GEOShandle, geom2); } else { geom2 = rgeos_convert_R2geos(env, spgeom2); type2 = GEOSGeomTypeId_r(GEOShandle, geom2); } int m = (LOGICAL_POINTER(byid)[0] && type1 == GEOS_GEOMETRYCOLLECTION) ? GEOSGetNumGeometries_r(GEOShandle, geom1) : 1; int n = (LOGICAL_POINTER(byid)[1] && type2 == GEOS_GEOMETRYCOLLECTION) ? GEOSGetNumGeometries_r(GEOShandle, geom2) : 1; if (m == -1) error("rgeos_distancefunc: invalid number of subgeometries in geometry 1"); if (n == -1) error("rgeos_distancefunc: invalid number of subgeometries in geometry 2"); int pc=0; SEXP ans; PROTECT(ans = NEW_NUMERIC(m*n)); pc++; GEOSGeom curgeom1 = geom1; GEOSGeom curgeom2 = geom2; for(int i=0; i 1) { curgeom1 = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom1, i); if (curgeom1 == NULL) error("rgeos_binpredfunc: unable to get subgeometries from geometry 1"); } for(int j=0; j i) break; if ( n > 1) { curgeom2 = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom2, j); if (curgeom2 == NULL) error("rgeos_binpredfunc: unable to get subgeometries from geometry 2"); } double dist; if (!distfunc(GEOShandle, curgeom1, curgeom2, &dist)) error("rgeos_distancefunc: unable to calculate distance"); NUMERIC_POINTER(ans)[n*i+j] = dist; if (sym_ans) NUMERIC_POINTER(ans)[n*j+i] = dist; } } if (LOGICAL_POINTER(byid)[0] || LOGICAL_POINTER(byid)[1]) { SEXP dims; PROTECT(dims = NEW_INTEGER(2)); pc++; INTEGER_POINTER(dims)[0] = n; INTEGER_POINTER(dims)[1] = m; setAttrib(ans, R_DimSymbol, dims); } GEOSGeom_destroy_r(GEOShandle, geom1); if (!sym_ans) GEOSGeom_destroy_r(GEOShandle, geom2); UNPROTECT(pc); return(ans); } SEXP rgeos_hausdorffdistancedensify(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP densifyFrac, SEXP byid) { return( rgeos_distancedensifyfunc(env, spgeom1, spgeom2, densifyFrac, byid, &GEOSHausdorffDistanceDensify_r) ); } SEXP rgeos_distancedensifyfunc(SEXP env, SEXP spgeom1, SEXP spgeom2, SEXP densifyFrac, SEXP byid, p_distdenfunc distfunc) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom1 = rgeos_convert_R2geos(env, spgeom1); int type1 = GEOSGeomTypeId_r(GEOShandle, geom1); GEOSGeom geom2; int type2; int sym_ans = FALSE; if (spgeom2 == R_NilValue) { sym_ans = TRUE; geom2 = geom1; type2 = GEOSGeomTypeId_r(GEOShandle, geom2); } else { geom2 = rgeos_convert_R2geos(env, spgeom2); type2 = GEOSGeomTypeId_r(GEOShandle, geom2); } int m = (LOGICAL_POINTER(byid)[0] && type1 == GEOS_GEOMETRYCOLLECTION) ? GEOSGetNumGeometries_r(GEOShandle, geom1) : 1; int n = (LOGICAL_POINTER(byid)[1] && type2 == GEOS_GEOMETRYCOLLECTION) ? GEOSGetNumGeometries_r(GEOShandle, geom2) : 1; if (m == -1) error("rgeos_distancefunc: invalid number of subgeometries in geometry 1"); if (n == -1) error("rgeos_distancefunc: invalid number of subgeometries in geometry 2"); double frac = NUMERIC_POINTER(densifyFrac)[0]; int pc=0; SEXP ans; PROTECT(ans = NEW_NUMERIC(m*n)); pc++; GEOSGeom curgeom1 = geom1; GEOSGeom curgeom2 = geom2; for(int i=0; i 1) { curgeom1 = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom1, i); if (curgeom1 == NULL) error("rgeos_binpredfunc: unable to get subgeometries from geometry 1"); } for(int j=0; j i) break; if ( n > 1) { curgeom2 = (GEOSGeom) GEOSGetGeometryN_r(GEOShandle, geom2, j); if (curgeom2 == NULL) error("rgeos_binpredfunc: unable to get subgeometries from geometry 2"); } double dist; if (!distfunc(GEOShandle, curgeom1, curgeom2, frac, &dist)) error("rgeos_distancefunc: unable to calculate distance"); NUMERIC_POINTER(ans)[n*i+j] = dist; if (sym_ans) NUMERIC_POINTER(ans)[n*j+i] = dist; } } if (n != 1 && m !=1) { SEXP dims; PROTECT(dims = NEW_INTEGER(2)); pc++; INTEGER_POINTER(dims)[0] = n; INTEGER_POINTER(dims)[1] = m; setAttrib(ans, R_DimSymbol, dims); } GEOSGeom_destroy_r(GEOShandle, geom1); if (!sym_ans) GEOSGeom_destroy_r(GEOShandle, geom2); UNPROTECT(pc); return(ans); } #ifdef HAVE_NEARESTPOINTS SEXP rgeos_nearestpoints(SEXP env, SEXP spgeom1, SEXP spgeom2) { GEOSContextHandle_t GEOShandle = getContextHandle(env); GEOSGeom geom1 = rgeos_convert_R2geos(env, spgeom1); GEOSGeom geom2 = rgeos_convert_R2geos(env, spgeom2); // Returns the closest points of the two geometries, 0 on exception. // The first point comes from geom1 geometry and // the second point comes from geom2. GEOSCoordSequence* s = GEOSNearestPoints_r(GEOShandle, geom1, geom2); SEXP coordmat; if (s == 0) { coordmat = R_NilValue; } else { coordmat = rgeos_CoordSeq2crdMat(env, s, 0, 0); } GEOSCoordSeq_destroy_r(GEOShandle, s); return(coordmat); } #endif rgeos/R/0000755000176200001440000000000014455442771011607 5ustar liggesusersrgeos/R/rgeos_misc.R0000644000176200001440000001311714025150746014056 0ustar liggesusersRGEOSMiscFunc = function(spgeom, byid, func) { stopifnot(is.logical(byid)) if (!is.na(is.projected(spgeom)) && !is.projected(spgeom)) warning("Spatial object is not projected; GEOS expects planar coordinates") byid = as.logical(byid) if (is.na(byid)) stop("Invalid value for byid, must be logical") if (inherits(spgeom, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) if (func == "rgeos_area") x <- .Call("rgeos_area", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else if (func == "rgeos_length") x <- .Call("rgeos_length", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else stop("no such function:", func) if(byid) names(x) <- unique(row.names(spgeom)) return(x) } gArea = function(spgeom, byid=FALSE) { return( RGEOSMiscFunc(spgeom,byid,"rgeos_area") ) } gLength = function(spgeom, byid=FALSE) { return(RGEOSMiscFunc(spgeom,byid,"rgeos_length")) } RGEOSDistanceFunc = function(spgeom1, spgeom2, byid, func, densifyFrac = 1) { stopifnot(is.logical(byid)) if (!is.na(is.projected(spgeom1)) && !is.projected(spgeom1)) warning("Spatial object 1 is not projected; GEOS expects planar coordinates") if (!is.null(spgeom2) && !is.na(is.projected(spgeom2)) && !is.projected(spgeom2)) warning("Spatial object 2 is not projected; GEOS expects planar coordinates") byid = as.logical(byid) if (any(is.na(byid)) ) stop("Invalid value for byid, must be logical") if( length(byid) < 1 || length(byid) > 2 ) stop("Invalid length for byid, must be of length 1 or 2") if (length(byid) == 1) byid <- rep(byid,2) if(!is.null(spgeom1) & !is.null(spgeom2)) { if(!identical(spgeom1@proj4string,spgeom2@proj4string)) warning("spgeom1 and spgeom2 have different proj4 strings") } if (func == "rgeos_hausdorffdistancedensify") x <- .Call("rgeos_hausdorffdistancedensify", .RGEOS_HANDLE, spgeom1, spgeom2, densifyFrac, byid, PACKAGE="rgeos") else if (func == "rgeos_hausdorffdistance") x <- .Call("rgeos_hausdorffdistance", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_distance") x <- .Call("rgeos_distance", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else stop("no such function:", func) if(any(byid)) { id1 = row.names(spgeom1) if (is.null(spgeom2)) id2 = id1 else id2 = row.names(spgeom2) if (length(id1) == ncol(x)) colnames(x) = id1 if (length(id2) == nrow(x)) rownames(x) = id2 } return(x) } gDistance = function(spgeom1, spgeom2=NULL, byid=FALSE, hausdorff=FALSE, densifyFrac = NULL) { if (hausdorff) { if(is.null(densifyFrac)) { return( RGEOSDistanceFunc(spgeom1, spgeom2, byid, "rgeos_hausdorffdistance") ) } else { if (!is.numeric(densifyFrac)) stop("densifyFrac must be numeric") if (densifyFrac > 1 | densifyFrac <= 0) stop("densifyFrac must be in the range (0,1]") return( RGEOSDistanceFunc(spgeom1, spgeom2, byid, "rgeos_hausdorffdistancedensify", densifyFrac) ) } } else { return( RGEOSDistanceFunc(spgeom1, spgeom2, byid, "rgeos_distance") ) } } gWithinDistance = function(spgeom1, spgeom2=NULL, dist, byid=FALSE, hausdorff=FALSE, densifyFrac=NULL) { #TODO - include a tolerance? return( gDistance(spgeom1,spgeom2,byid, hausdorff, densifyFrac) <= dist ) } gTopoDim <- function(obj) { td <- NULL if (inherits(obj, "SpatialPolygons")) td <- 2L if (inherits(obj, "SpatialRings")) td <- 2L if (inherits(obj, "SpatialLines")) td <- 1L if (inherits(obj, "SpatialPoints")) td <- 0L if (is.null(td)) stop("class not supported:", class(obj)) td } #' Closest Points of two Geometries #' #' Return closest points of two geometries. #' #' @param spgeom1,spgeom2 sp objects as defined in package sp. #' @return The closest points of the two geometries or NULL on exception. #' The first point comes from spgeom1 geometry and the second point comes #' from spgeom2. #' @seealso gDistance #' @rdname misc-gNearestPoints #' @author Rainer Stuetz #' @keywords spatial #' @examples #' g1 <- readWKT("MULTILINESTRING((34 54, 60 34), (0 10, 50 10, 100 50))") #' g2 <- readWKT("MULTIPOINT(30 0, 100 30)") #' plot(g1, pch=4, axes=TRUE) #' plot(g2, add=TRUE) #' plot(gNearestPoints(g1, g2), add=TRUE, col="red", pch=7) #' gDistance(g1, g2) #' @export gNearestPoints <- function(spgeom1, spgeom2) { if (version_GEOS0() < "3.4.0") stop("No NearestPoints in this version of GEOS") stopifnot(identical(proj4string(spgeom1), proj4string(spgeom2))) x <- .Call("rgeos_nearestpoints", .RGEOS_HANDLE, spgeom1, spgeom2, PACKAGE="rgeos") if (!is.null(x)) { rownames(x) <- seq_len(nrow(x)) SpatialPoints(x, proj4string=CRS(proj4string(spgeom1))) } else { x } } #Deprecated function names RGEOSArea = function(spgeom, byid=FALSE) { .Deprecated("gArea") return( gArea(spgeom, byid) ) } RGEOSLength = function(spgeom, byid=FALSE) { .Deprecated("gLength") return( gLength(spgeom, byid) ) } RGEOSDistance = function(spgeom1, spgeom2=NULL, byid=FALSE) { .Deprecated("gDistance") return( gDistance(spgeom1, spgeom2, byid) ) } RGEOSisWithinDistance = function(spgeom1, spgeom2=NULL, dist, byid=FALSE) { .Deprecated("gWithinDistance") return( gWithinDistance(spgeom1, spgeom2, dist, byid) ) } RGEOSHausdorffDistance = function(spgeom1, spgeom2=NULL, byid=FALSE) { .Deprecated("gDistance") return( gDistance(spgeom1, spgeom2, byid, TRUE) ) } rgeos/R/rgeos_spExtensions_Methods.R0000644000176200001440000003014714025150746017312 0ustar liggesusers######################### ### ### SpatialRings ### ######################### Ring <- function(coords,ID=as.character(NA)) { if (ncol(coords) != 2) stop("coords must be a two-column matrix") n = nrow(coords) area2 = sum( (coords[-1,1]-coords[-n,1])*(coords[-1,2]+coords[-n,2]) ) if (area2 < 0) { # if area2 is negative coordinates are ccw, reverse them coords[,1] = rev(coords[,1]) coords[,2] = rev(coords[,2]) } coords <- coordinates(coords) new("Ring", coords = coords, ID = ID) } .bboxSRs <- function(lst) { bb = sapply(lst, bbox) res = matrix(c(min(bb[1,]), min(bb[2,]), max(bb[3,]), max(bb[4,])), 2, 2) dimnames(res) = list(c("x", "y"), c("min", "max")) return(res) } SpatialRings <- function(RingList, proj4string=CRS(as.character(NA))) { if (any(sapply(RingList, function(x) !is(x, "Ring")))) stop("Ring list not exclusively filled with Ring objects") Sp <- new("Spatial", bbox = .bboxSRs(RingList), proj4string=proj4string) res <- new("SpatialRings", Sp, rings=RingList) return(res) } bbox.Ring <- function(obj) { rx <- range(obj@coords[,1]) ry <- range(obj@coords[,2]) res = rbind(r1 = rx, r2 = ry) dimnames(res)[[2]] <- c("min", "max") return(res) } setMethod("bbox", "Ring", bbox.Ring) plotSpatialRings <- function(SR, xlim = NULL, ylim = NULL, col = 1, lwd = 1, lty=1, add = FALSE, axes = FALSE, ..., setParUsrBB=FALSE) { if (!add) plot(as(SR, "Spatial"), xlim = xlim, ylim = ylim, axes = axes, ..., setParUsrBB=setParUsrBB) lst <- SR@rings if (length(col) != length(lst)) col <- rep(col[1], length(lst)) if (length(lwd) != length(lst)) lwd <- rep(lwd[1], length(lst)) if (length(lty) != length(lst)) lty <- rep(lty[1], length(lst)) for (i in seq(along.with=lst)) { crds <- coordinates(lst[[i]]) lines(crds, col = col[i], lwd = lwd[i], lty = lty[i], ...) } } setMethod("plot", signature(x = "SpatialRings", y = "missing"), function(x, y, ...) plotSpatialRings(x, ...) ) setMethod("coordinates", "Ring", function(obj) obj@coords) setMethod("coordinates", "SpatialRings", function(obj) lapply(obj@rings, coordinates)) #if (!isGeneric("lines")) # setGeneric("lines", function(x, y, ...) # standardGeneric("lines")) #setMethod("lines", "Ring", function(x, y = NULL, ...) invisible(lines(coordinates(x), ...))) #setMethod("lines", "SpatialRings", function(x, y = NULL, ...) { # f = function(x, ...) lines(x, ...) # invisible(lapply(x@rings, f, ...)) #}) if (!isGeneric("row.names")) setGeneric("row.names", function(x) standardGeneric("row.names")) if (!isGeneric("row.names<-")) setGeneric("row.names<-", function(x, value) standardGeneric("row.names<-")) setMethod("row.names", "SpatialRings", function(x) sapply(slot(x, "rings"), slot, "ID")) setReplaceMethod("row.names", signature(x = "SpatialRings", value = "character"), function(x, value) spChFIDs(x, value)) setMethod("[", "SpatialRings", function(x, i, j, ..., drop = TRUE) { if (any(is.na(i))) stop("NAs not permitted in row index") if (is.logical(i)) { if (length(i) == 1 && i) { i = 1:length(x@rings) } else { i <- which(i) } } else if (is.character(i)) { i <- match(i, row.names(x)) } x@rings = x@rings[i] x@bbox = .bboxSRs(x@rings) return(x) } ) setMethod("coordnames", signature(x = "SpatialRings"), function(x) coordnames(x@rings[[1]])) setMethod("coordnames", signature(x = "Ring"), function(x) dimnames(coordinates(x))[[2]]) setReplaceMethod("coordnames", signature(x = "SpatialRings", value = "character"), function(x, value) { dimnames(x@bbox)[[1]] = value for (i in seq(along = x@rings)) coordnames(x@rings[[i]]) = value return(x) } ) setReplaceMethod("coordnames",signature(x = "Ring", value = "character"), function(x, value) { dimnames(x@coords)[[2]] = value return(x) } ) chFIDsSpatialRings <- function(obj, x) { nl <- length(slot(obj, "rings")) if (length(x) != nl) stop("lengths differ") if (length(x) > length(unique(x))) stop("duplicate IDs") rings <- slot(obj, "rings") for (i in 1:nl) obj@rings[[i]]@ID = x[i] return(obj) } setMethod("spChFIDs", signature(obj="SpatialRings", x="character"), chFIDsSpatialRings) setAs("Ring", "SpatialPoints", function(from) { SpatialPoints(do.call("rbind", coordinates(from))) } ) setAs("SpatialRings", "SpatialPoints", function(from) { SpatialPoints(do.call("rbind", lapply(from@rings, function(x) as(x, "SpatialPoints"))), CRS(proj4string(from))) } ) ######################### ### ### SpatialRingsDataFrame ### ######################### SpatialRingsDataFrame = function(sr, data, match.ID = TRUE) { if (match.ID) { sr_IDs <- row.names(sr) data_IDs <- row.names(data) mtch <- match(sr_IDs, data_IDs) if (any(is.na(mtch))) stop("row.names of data and Rings IDs do not match") if (length(unique(mtch)) != length(sr_IDs)) stop("row.names of data and Rings IDs do not match") data <- data[mtch, , drop=FALSE] } if (nrow(data) != length(sr@rings)) stop("length of data.frame does not match number of Ring elements") return( new("SpatialRingsDataFrame", sr, data = data) ) } setAs("SpatialRingsDataFrame","SpatialRings", function(from) SpatialRings(from@rings)) setAs("SpatialRingsDataFrame", "data.frame", function(from) from@data) setMethod("names","SpatialRingsDataFrame", function(x) names(x@data)) setReplaceMethod("names", signature(x = "SpatialRingsDataFrame", value = "character"), function(x, value) { names(x@data)<-value; x }) setMethod("row.names","SpatialRingsDataFrame", function(x) sapply(slot(x, "rings"), slot, "ID")) setReplaceMethod("row.names", signature(x = "SpatialRingsDataFrame", value = "character"), function(x, value) spChFIDs(x, value)) setMethod("[", c("SpatialRingsDataFrame", "ANY", "ANY"), function(x, i, j, ... , drop = TRUE) { missing.i = missing(i) missing.j = missing(j) nargs = nargs() # e.g., a[3,] gives 2 for nargs, a[3] gives 1. if (missing.i && missing.j) { i = TRUE j = TRUE } else if (missing.j && !missing.i) { if (nargs == 2) { j = i i = TRUE } else { j = TRUE } } else if (missing.i && !missing.j) { i = TRUE } if (is.matrix(i)) stop("matrix argument not supported in SpatialRingsDataFrame selection") if (is.logical(i)) { if (length(i) == 1 && i) i = 1:length(x@rings) else i = which(i) } else if (is.character(i)) { i = match(i, row.names(x)) } if (any(is.na(i))) stop("NAs not permitted in row index") x@rings = x@rings[i] x@data = x@data[i, j, ..., drop = FALSE] x@bbox = .bboxSRs(x@rings) return(x) } ) #setMethod("lines","SpatialRingsDataFrame", function(x, y = NULL, ...) lines(as(x, "SpatialRings"), ...)) setMethod("dim","SpatialRingsDataFrame", function(x) dim(x@data)) chFIDsSpatialRingsDataFrame <- function(obj, x) { SR <- as(obj, "SpatialRings") SRx <- spChFIDs(SR, x) df <- as(obj, "data.frame") row.names(df) <- sapply(slot(SRx, "rings"), function(x) slot(x, "ID")) SpatialRingsDataFrame(SRx, data=df) } setMethod("spChFIDs", signature(obj="SpatialRingsDataFrame", x="character"), chFIDsSpatialRingsDataFrame) ######################### ### ### SpatialCollections ### ######################### SpatialCollections <- function( points = NULL, lines = NULL, rings = NULL, polygons = NULL, plotOrder = c(4,3,2,1), proj4string=CRS(as.character(NA))) { plotOrder=as.integer(plotOrder) stopifnot(is.integer(plotOrder)) stopifnot(length(plotOrder) == 4) stopifnot(inherits(points,"SpatialPoints") | is.null(points)) stopifnot(inherits(lines,"SpatialLines") | is.null(lines)) stopifnot(inherits(rings,"SpatialRings") | is.null(rings)) stopifnot(inherits(polygons,"SpatialPolygons") | is.null(polygons)) stopifnot(is(proj4string, "CRS")) bb = c() if (!is.null(points)) bb = rbind(bb,c(bbox(points))) if (!is.null(lines)) bb = rbind(bb,c(bbox(lines))) if (!is.null(rings)) bb = rbind(bb,c(bbox(rings))) if (!is.null(polygons)) bb = rbind(bb,c(bbox(polygons))) if (length(bb) == 0) { bbox = matrix( rep(NA, 2), 2, 2) } else { bbox = matrix(c(min(bb[,1]), min(bb[,2]), max(bb[,3]), max(bb[,4])), 2, 2) } dimnames(bbox) = list(c("x", "y"), c("min", "max")) Sp <- new("Spatial", bbox = bbox, proj4string=proj4string) res <- new("SpatialCollections", Sp, plotOrder=plotOrder, pointobj=points, lineobj=lines, ringobj=rings, polyobj=polygons) #validObject(res) return(res) } plotSpatialCollections <- function(SC, pointopt = list(), lineopt = list(), ringopt = list(), polyopt = list(), pch = 3, cex = 1, bg = 1, col = 1, lwd = 1, lty=1, border = par("fg"), xpd = NULL, density = NULL, angle = 45, pbg=NULL, xlim = NULL, ylim = NULL, add = FALSE, axes = FALSE, ..., setParUsrBB=FALSE) { if (!add) { plot(as(SC,"Spatial"), xlim=xlim, ylim=ylim, axes=axes, ..., setParUsrBB=setParUsrBB) } add=TRUE call = match.call() if (is.null(call$col) & is.null(polyopt[["col"]])) polyopt[["col"]] = NA for (i in order(SC@plotOrder)) { if (i == 1 & !is.null(SC@pointobj)) { # plot points ptcol = col ptlwd = lwd if (!is.null(pointopt[["pch"]])) ptpch = pointopt[["pch"]] if (!is.null(pointopt[["cex"]])) ptcex = pointopt[["cex"]] if (!is.null(pointopt[["col"]])) ptcol = pointopt[["col"]] if (!is.null(pointopt[["lwd"]])) ptlwd = pointopt[["lwd"]] if (!is.null(pointopt[["bg"]])) ptbg = pointopt[["bg"]] plot(SC@pointobj, pch=pch, axes=axes, add=add, xlim=xlim, ylim=ylim, cex=cex, col=ptcol, lwd=ptlwd, bg=bg, ..., setParUsrBB=setParUsrBB) } else if (i == 2 & !is.null(SC@lineobj)) { #plot lines lcol = col llwd = lwd llty = lty if (!is.null(lineopt[["col"]])) lcol = lineopt[["col"]] if (!is.null(lineopt[["lwd"]])) llwd = lineopt[["lwd"]] if (!is.null(lineopt[["lty"]])) llty = lineopt[["lty"]] plot(SC@lineobj, xlim=xlim, ylim=ylim, col=lcol, lwd=llwd, lty=llty, add=add, axes=axes, ..., setParUsrBB=setParUsrBB) } else if (i == 3 & !is.null(SC@ringobj)) { #plot rings rcol = col rlwd = lwd rlty = lty if (!is.null(ringopt[["col"]])) rcol = ringopt[["col"]] if (!is.null(ringopt[["lwd"]])) rlwd = ringopt[["lwd"]] if (!is.null(ringopt[["lty"]])) rlty = ringopt[["lty"]] plot(SC@ringobj, xlim=xlim, ylim=ylim, col=rcol, lwd=rlwd, lty=rlty, add=add, axes=axes, ..., setParUsrBB=setParUsrBB) } else if (i == 4 & !is.null(SC@polyobj)) { #plot polygons pcol = col if (!is.null(polyopt[["col"]])) pcol = polyopt[["col"]] plot(SC@polyobj, col=pcol, border=border, add=add, xlim=xlim, ylim=ylim, xpd=xpd, density=density, angle=angle, pbg=pbg, axes=axes, ..., setParUsrBB=setParUsrBB) } } } setMethod("plot", signature(x = "SpatialCollections", y = "missing"), function(x, y, ...) plotSpatialCollections(x, ...)) setMethod("row.names", "SpatialCollections", function(x) { ans = list() if (!is.null(x@pointobj)) ans$points = row.names(x@pointobj) if (!is.null(x@lineobj)) ans$lines = row.names(x@lineobj) if (!is.null(x@ringobj)) ans$rings = row.names(x@ringobj) if (!is.null(x@polyobj)) ans$polygons = row.names(x@polyobj) return(ans) }) rgeos/R/rgeos_spExtensions_Classes.R0000644000176200001440000000540414025150746017302 0ustar liggesusers######################### ### ### SpatialRings ### ######################### setClass("Ring", representation(coords = "matrix",ID = "character"), validity = function(object) { if (any(is.na(object@coords))) stop("coords cannot contain missing values") if (ncol(object@coords) != 2) stop("coords should have 2 columns") if (!all(object@coords[1,] == object@coords[nrow(object@coords),])) stop("invalid ring, start and end coordinates must be equal") return(TRUE) } ) setClass("SpatialRings", representation("Spatial", rings = "list"), prototype = list(bbox = matrix( rep(NA, 2), 2, 2, dimnames = list(NULL, c("min","max"))), proj4string = CRS(as.character(NA)), rings = list()), validity = function(object) { if (any(unlist(lapply(object@rings, function(x) !is(x, "Ring"))))) stop("rings not Ring objects") if (any(duplicated(sapply(slot(object, "rings"), function(i) slot(i, "ID"))))) return("non-unique Rings ID slot values") return(TRUE) } ) ######################### ### ### SpatialRingsDataFrame ### ######################### setClass("SpatialRingsDataFrame", representation("SpatialRings", data = "data.frame"), validity = function(object) { if (!inherits(object@data, "data.frame")) stop("data should be of class data.frame") if (nrow(object@data) != length(object@rings)) stop("number of rows in data.frame and SpatialRings don't match") return(TRUE) } ) ######################### ### ### SpatialCollections ### ######################### setClassUnion("SpatialPointsNULL", c("SpatialPoints", "NULL")) setClassUnion("SpatialLinesNULL", c("SpatialLines", "NULL")) setClassUnion("SpatialRingsNULL", c("SpatialRings", "NULL")) setClassUnion("SpatialPolygonsNULL", c("SpatialPolygons", "NULL")) setClass("SpatialCollections", representation("Spatial", pointobj = "SpatialPointsNULL", lineobj = "SpatialLinesNULL", ringobj = "SpatialRingsNULL", polyobj = "SpatialPolygonsNULL", plotOrder = "integer"), prototype = list(bbox = matrix( rep(NA, 2), 2, 2, dimnames = list(c("x","y"), c("min","max"))), proj4string = CRS(as.character(NA)), pointobj = NULL, lineobj = NULL, ringobj = NULL, polyobj = NULL ), validity = function(object) { if (!is.null(object@pointobj)) validObject(object@pointobj) if (!is.null(object@lineobj)) validObject(object@lineobj) if (!is.null(object@ringobj)) validObject(object@ringobj) if (!is.null(object@polyobj)) validObject(object@polyobj) return(TRUE) } ) rgeos/R/bbox2SP.R0000644000176200001440000000063514025150746013204 0ustar liggesusersbbox2SP <- function(n, s, w ,e ,bbox=NA, proj4string=CRS("+init=epsg:4326")){ if (all(!is.na(bbox), is.matrix(bbox), dim(bbox)==c(2,2))) { n<-bbox[2,2] s<-bbox[2,1] w<-bbox[1,1] e<-bbox[1,2] } box1 <- matrix(c(w, s, w, n, e, n, e, s, w, s), ncol=2, byrow=TRUE) box1 <- SpatialPolygons(list(Polygons(list(Polygon(box1)),ID=1)), proj4string=proj4string) box1 } rgeos/R/rgeos_topology.R0000644000176200001440000003104614041736462015003 0ustar liggesusersgSimplify = function(spgeom, tol, topologyPreserve=FALSE) { stopifnot(is.logical(topologyPreserve)) if (is.na(topologyPreserve)) stop("Invalid value for topologyPreserve, must be logical") if (inherits(spgeom, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) id = row.names(spgeom) return( .Call("rgeos_simplify", .RGEOS_HANDLE, spgeom, tol, id, FALSE, topologyPreserve, PACKAGE="rgeos") ) } gPolygonize = function( splist, getCutEdges=FALSE) { if (!is.list(splist)) splist = list(splist) if (!all(sapply(splist, inherits, "SpatialLines"))) stop("list of SpatialLines object required") p4slist = lapply(splist,function(x) x@proj4string) # splist <- lapply(splist, function(s) { # if (inherits(s, "SpatialPolygons") && get_do_poly_check() && notAllComments(s)) { # createSPComment(s) # } else { # s # } # }) p4s = p4slist[[1]] if (length(p4slist) != 1) { for(i in 2:length(p4slist)) { if (!identical(p4s, p4slist[[i]])) stop("spgeoms in splist have different proj4strings") } } getCutEdges = as.logical(getCutEdges) if (is.na(getCutEdges)) stop("Invalid value for getCutEdges, must be logical") nid = sum(sapply(splist, function(x) sapply(slot(x, "lines"), function(y) length(slot(y, "Lines"))))) # sum(sapply(splist,function(x) length(unlist(row.names(x))))) id = as.character(1:nid) return( .Call("rgeos_polygonize", .RGEOS_HANDLE, splist, id, p4s, getCutEdges, PACKAGE="rgeos") ) } TopologyFunc = function(spgeom, id, byid, func) { stopifnot(is.logical(byid)) # byid = as.logical(byid) if (is.na(byid)) stop("Invalid value for byid, must be logical") curids = unique(row.names(spgeom)) if (is.null(id)) { if (byid) id = curids else id = "1" } id = as.character(id) if (inherits(spgeom, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) if ( length(id) != length(unique(id)) ) stop("Non-unique values for id ") if ( !(!byid && length(id) == 1) && !(byid && length(id) == length(curids)) ) stop("Invalid number of values in id" ) if (func == "rgeos_envelope") x <- .Call("rgeos_envelope", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_convexhull") x <- .Call("rgeos_convexhull", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_boundary") x <- .Call("rgeos_boundary", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_getcentroid") x <- .Call("rgeos_getcentroid", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_pointonsurface") x <- .Call("rgeos_pointonsurface", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_unioncascaded") x <- .Call("rgeos_unioncascaded", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_makevalid") x <- .Call("rgeos_makevalid", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_makevalidparams") x <- .Call("rgeos_makevalidparams", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_coverageunion") x <- .Call("rgeos_coverageunion", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else if (func == "rgeos_minimumrotatedrectangle") x <- .Call("rgeos_minimumrotatedrectangle", .RGEOS_HANDLE, spgeom, id, byid, PACKAGE="rgeos") else stop("no such function:", func) return( x ) } gEnvelope = function(spgeom, byid=FALSE, id = NULL) { return( TopologyFunc(spgeom,id,byid,"rgeos_envelope") ) } gConvexHull = function(spgeom, byid=FALSE, id = NULL) { return( TopologyFunc(spgeom,id,byid,"rgeos_convexhull") ) } gBoundary = function(spgeom, byid=FALSE, id = NULL) { return( TopologyFunc(spgeom,id,byid,"rgeos_boundary") ) } gCentroid = function(spgeom, byid=FALSE, id = NULL) { return( TopologyFunc(spgeom,id,byid,"rgeos_getcentroid") ) } gPointOnSurface = function(spgeom, byid=FALSE, id = NULL) { return( TopologyFunc(spgeom,id,byid,"rgeos_pointonsurface") ) } gLineMerge = function(spgeom, byid=FALSE, id = NULL) { # return( TopologyFunc(spgeom,id,byid,"rgeos_linemerge") ) if (!inherits(spgeom,"SpatialLines")) stop("Invalid geometry, may only be applied to lines") spgeom <- as(spgeom, "SpatialLines") if (is.null(id)) id = rep("1",length(row.names(spgeom))) # if (any(is.na(id))) stop("No NAs permitted in id") ids <- split(1:length(id), id) out <- vector(mode="list", length=length(ids)) for (i in seq(along.with=ids)) { out[[i]] <- .Call("rgeos_linemerge", .RGEOS_HANDLE, spgeom[ids[[i]]], names(ids)[i], FALSE, PACKAGE="rgeos") } res <- do.call("rbind.SpatialLines", out) res } gUnionCascaded = function(spgeom, id = NULL) { if (!inherits(spgeom,"SpatialPolygons")) stop("Invalid geometry, may only be applied to polygons") spgeom <- as(spgeom, "SpatialPolygons") if (is.null(id)) id = rep("1",length(row.names(spgeom))) # if (any(is.na(id))) stop("No NAs permitted in id") if (get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) ids <- split(1:length(id), id) sl <- sapply(ids, length) out <- vector(mode="list", length=length(ids)) for (i in seq(along.with=ids)) { out[[i]] <- TopologyFunc(groupID(spgeom[ids[[i]]], id[ids[[i]]]), names(ids)[i], TRUE, "rgeos_unioncascaded") } res <- do.call("rbind.SpatialPolygons", out) res } gMakeValid = function(spgeom, byid=FALSE, id = NULL, original=NULL, keepCollapsed=NULL) { if (version_GEOS0() < "3.8.0") stop("No UnaryUnion in this version of GEOS") if (version_GEOS0() < "3.10.0") { return( TopologyFunc(spgeom, id, byid, "rgeos_makevalid") ) } else { if (is.null(original)) { envvar <- Sys.getenv("GEOS_MAKE_VALID") if (nzchar(envvar)) { original <- TRUE if (envvar == "STRUCTURE") original <- FALSE } else { original <- TRUE } } if (original) { keepCollapsed <- FALSE } else { if(is.null(keepCollapsed)) { envvar <- Sys.getenv("GEOS_MAKE_VALID_KEEPCOLLAPSED") if (nzchar(envvar)) { keepCollapsed <- FALSE if (envvar == "TRUE") keepCollapsed <- TRUE } else { keepCollapsed <- FALSE } } } stopifnot(is.logical(original)) stopifnot(is.logical(keepCollapsed)) attr(byid, "original") <- original attr(byid, "keepCollapsed") <- keepCollapsed return( TopologyFunc(spgeom, id, byid, "rgeos_makevalidparams") ) } } gCoverageUnion = function(spgeom, byid=FALSE, id = NULL) { if (version_GEOS0() < "3.8.0") stop("No CoverageUnion in this version of GEOS") return( TopologyFunc(spgeom, id, byid, "rgeos_coverageunion") ) } gMinumumRotatedRectangle <- function(spgeom, byid=FALSE, id = NULL) { if (version_GEOS0() < "3.9.0") stop("No MinumumRotatedRectangle in this version of GEOS") return( TopologyFunc(spgeom, id, byid, "rgeos_minimumrotatedrectangle") ) } gMaximumInscribedCircle <- function(spgeom, byid=FALSE, id = NULL, tol=.Machine$double.eps^(1/2), checkValidity=NULL) { if (version_GEOS0() < "3.9.0") stop("No MaximumInscribedCircle in this version of GEOS") if (!inherits(spgeom,"SpatialPolygons")) stop("Invalid geometry, may only be applied to polygons") stopifnot(is.logical(byid)) byid = as.logical(byid) if (is.na(byid)) stop("Invalid value for byid, must be logical") if (is.null(checkValidity)) checkValidity <- get_RGEOS_CheckValidity() if(checkValidity > 0L) { val1 <- isTRUE(all(gIsValid(spgeom, byid=TRUE))) nm_1 <- deparse(substitute(spgeom)) if (!val1) message(nm_1, " is invalid") if (checkValidity == 1L && !all(val1)) warning("Invalid objects found; consider using set_RGEOS_CheckValidity(2L)") if (checkValidity == 2L) { if (!val1) { spgeom <- gBuffer(spgeom, byid=TRUE, width=0.0) message("Attempting to make ", nm_1, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom, byid=TRUE)))) stop("Zero width buffer repair of spgeom1 failed") } } } spgeom <- as(spgeom, "SpatialPolygons") curids = unique(row.names(spgeom)) if (is.null(id)) { if (byid) id = curids else id = "1" } id = as.character(id) # if (any(is.na(id))) stop("No NAs permitted in id") if (get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) .Call("rgeos_maximuminscribedcircle", .RGEOS_HANDLE, spgeom, id, byid, tol, PACKAGE="rgeos") # return( TopologyFunc(spgeom, id, byid, tol, "rgeos_maximuminscribedcircle") ) } gUnaryUnion = function(spgeom, id = NULL, checkValidity=NULL) { if (version_GEOS0() < "3.3.0") stop("No UnaryUnion in this version of GEOS") if (!inherits(spgeom,"SpatialPolygons")) stop("Invalid geometry, may only be applied to polygons") if (is.null(checkValidity)) checkValidity <- get_RGEOS_CheckValidity() if(checkValidity > 0L) { val1 <- isTRUE(all(gIsValid(spgeom, byid=TRUE))) nm_1 <- deparse(substitute(spgeom)) if (!val1) message(nm_1, " is invalid") if (checkValidity == 1L && !all(val1)) warning("Invalid objects found; consider using set_RGEOS_CheckValidity(2L)") if (checkValidity == 2L) { if (!val1) { spgeom <- gBuffer(spgeom, byid=TRUE, width=0.0) message("Attempting to make ", nm_1, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom, byid=TRUE)))) stop("Zero width buffer repair of spgeom1 failed") } } } spgeom <- as(spgeom, "SpatialPolygons") if (is.null(id)) id = rep("1",length(row.names(spgeom))) # if (any(is.na(id))) stop("No NAs permitted in id") if (get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) ids <- split(1:length(id), id) out <- vector(mode="list", length=length(ids)) for (i in seq(along.with=ids)) { out[[i]] <- .Call("rgeos_unaryunion", .RGEOS_HANDLE, spgeom[ids[[i]]], names(ids)[i], FALSE, PACKAGE="rgeos") } res <- do.call("rbind.SpatialPolygons", out) res } gDelaunayTriangulation <- function(spgeom, tolerance=0.0, onlyEdges=FALSE) { if (version_GEOS0() < "3.4.0") stop("No DelaunayTriangulation in this version of GEOS") if (!inherits(spgeom, "SpatialPoints")) stop("Invalid geometry, may only be applied to points") if (nrow(zerodist(spgeom)) > 0) stop("duplicate points not permitted") stopifnot(is.numeric(tolerance)) stopifnot(length(tolerance) == 1) stopifnot(is.logical(onlyEdges)) stopifnot(length(onlyEdges) == 1) .Call("rgeos_delaunaytriangulation", .RGEOS_HANDLE, spgeom, tolerance, onlyEdges, PACKAGE="rgeos") } gNode <- function(spgeom){ if (version_GEOS0() < "3.4.0") stop("No noding in this version of GEOS") if (!inherits(spgeom, "SpatialLines")) stop("Invalid geometry, may only be applied to lines") .Call("rgeos_node", .RGEOS_HANDLE, spgeom, PACKAGE="rgeos") } RGEOSEnvelope = function(spgeom, byid=FALSE, id = NULL) { .Deprecated("gEnvelope") return( gEnvelope(spgeom, id, byid) ) } RGEOSConvexHull = function(spgeom, byid=FALSE, id = NULL) { .Deprecated("gConvexHull") return( gConvexHull(spgeom, id, byid) ) } RGEOSBoundary = function(spgeom, byid=FALSE, id = NULL) { .Deprecated("gBoundary") return( gBoundary(spgeom, id, byid) ) } RGEOSGetCentroid = function(spgeom, byid=FALSE, id = NULL) { .Deprecated("gCentroid") return( gCentroid(spgeom, id, byid) ) } RGEOSPointOnSurface = function(spgeom, byid=FALSE, id = NULL) { .Deprecated("gPointOnSurface") return( gPointOnSurface(spgeom, id, byid) ) } RGEOSLineMerge = function(spgeom, byid=FALSE, id = NULL) { .Deprecated("gLineMerge") return( gLineMerge(spgeom, id, byid) ) } RGEOSUnionCascaded = function(spgeom, id = NULL) { .Deprecated("gUnionCascaded") return( gUnionCascaded(spgeom, id) ) } rgeos/R/labelpt.R0000644000176200001440000002135714025150746013354 0ustar liggesusers# Calculate the coordinate inside "pol" where a rectangle # of width "labw" and height "labh" centred on the coordinate # has the largest possible distance from the polygon boundary. # Uses a grid search with "gridpoints" coordinate pairs for the # initial search, and refines the result using numerical # optimisation (the Nelder-Mead algorithm). labpos.maxdist = function(pol, labw, labh, gridpoints) { # Create a rectangular polygon with a given size, centred at a given position makerect = function(x, y, wd, ht, rectID) Polygons(list(Polygon(cbind(c(x-wd/2, x+wd/2, x+wd/2, x-wd/2, x-wd/2), c(y-ht/2, y-ht/2, y+ht/2, y+ht/2, y-ht/2)))), rectID) # Calculate the distance from the given coordinates (2-column matrix) # to the polygon boundary. Returns 0 for any coordinates that results # in a rectangle not fully inside the polygon. getDists = function(co) { # Create a candidate label rectangle for each coordinate rects = SpatialPolygons(sapply(seq_len(nrow(co)), function(i) makerect(co[i,1], co[i,2], labw, labh, i)), proj4string=CRS(proj4string(pol))) # Check each rectangle to see if it"s inside the polygon inside = apply(gContains(pol, rects, byid = TRUE), 1, any) # Calculate and return the distance to the polygon boundary for # each rectangle (0 for any rectangle (partially) outside the polygon) di = numeric(nrow(co)) if(any(inside)) di[inside] = gDistance(pol.l, rects[inside], byid = TRUE) di } # Convert the polygon to lines, so that we can easily measure # the distance from the rectangles to the polygon boundary pol.l = as(pol, "SpatialLines") # Sample a regular grid of points inside the polygon co = coordinates(spsample(pol, n = gridpoints, type = "regular")) # Calculate the distances to the polygon boundary di = getDists(co) # Stop if no rectangles were inside the polygon if(all(di == 0)) stop("Could not fit label inside polygon (with the given number of grid points)") # Use numerical optimisation to zero in on the optimal position, # with the coordinate found by grid search as initial values. # Unfortunately, the Nelder-Mead algorithm in "optim" has some # strange heuristics for the step size (size of the initial # simplex) which is not possible to override, so, as a workaround, # we do our own affine transformation inside a wrapper function. origin = co[which.max(di),] # Initial value stepsize = min(apply(co, 2, function(x) diff(sort(unique(x))[1:2]))) # Distance between grid points getDistsScaled = function(co, origin, stepsize) { -getDists(matrix(co, ncol=2)*stepsize + origin) } optres = optim(c(0,0), getDistsScaled, method = "Nelder-Mead", control = list(trace = FALSE, reltol = .001), origin = origin, stepsize = stepsize) optval = optres$par*stepsize + origin # "Optimal" label position # Only return the calculated position if the numerical optimisation succeeded if(optres$convergence != 0) { warning("Numerical optimisation did not converge. Returning result of grid search.") optval = origin } # Return the "optimal" label position optval } # Shrink the polygon (using a negative buffer) until # the convex hull of the shrunken polygon is entirely # contained inside the original polygon. Then calculate # the label position as the centroid of the shrunken # polygon. (The centroid of the convex hull also gives # similar results.) labpos.buffer = function(pol, getLargestPolyPart) { init = 0 # Initial amount to shrink estep = sqrt(gArea(pol)/pi)/10 # Additional amount to shrink for each step # Try repeatedly shrinking the polygon until we"re left # with a polygon whose convex hull fits inside the # original polygon. repeat { repeat { r = init + estep # Amount to shrink pol.b = gBuffer(pol, width = -r) # Shrink the polygon if (is.null(pol.b)) { estep = estep/2 } else { if( gArea(pol.b) <= 0 ) # If the shrunken polygon is empty ... estep = estep/2 else break # ... try again with a smaller value } } # If we"re left with more than one polygon, choose the largest one polb = getLargestPolyPart(pol.b) # Calculate the convex hull of the inner polygon. # If this is wholly contained in the original polygon, # break out of the loop and set the label point to # the centroid of the inner polygon. if( gContains(pol, gConvexHull(pol.b)) ) break else init=init+estep } coordinates(pol.b) } # Generate a random position inside the polygon labpos.random = function(pol) { # Note that the "spsample" function sometimes fail to # find a random point inside the polygon (on the first try), # so we may need repeated sampling. Eventually a point is found. repeat { coord.rand = tryCatch(spsample(pol, n = 1, type = "random"), error = function(x) NULL) if(!is.null(coord.rand)) break } coordinates(coord.rand) } # Calculate optimal polygon labels. # pols: SpatialPolygons(DataFrame) object. # labels: The labels to apply to each polygon. # If NULL, the positition is calculated as if the # label is a square with one line long sides # (given the current value of "cex"). # method: The method(s) used to calculate label positions. # Possible values: maxdist, buffer, centroid, # random, pointonsurface # polypart: Which parts each multipolygon to use ("all" or "largest"). # Note that "largest" also removes any holes before # calculating the label position, so the labels are # no longer guaranteed not to overlap a hole. # doplot: Should the labels be plotted on the current graphics device? # ...: Additional arguments sent to "text" polygonsLabel = function(pols, labels = NULL, method = c("maxdist", "buffer", "centroid", "random", "inpolygon")[1], gridpoints = 60, polypart = c("all", "largest")[1], cex = 1, doPlot = TRUE, ...) { # Return a SpatialPolygons object containing the # biggest polygon part of a multipolygon getLargestPolyPart = function(multipol) { pols = multipol@polygons[[1]]@Polygons if(length(pols) > 1) { areas = lapply(pols, function(x) x@area) # List of areas of the polygon parts pols = pols[which.max(areas)] # The largest polygon part # Create new SpatialPolygons object only containing the largest polygon part multipol = SpatialPolygons(list(Polygons(pols, ID="1")), proj4string=CRS(as.character(proj4string(multipol)))) } multipol } # If no labels are given, assume empty labels if(is.null(labels)) labels = "" # If ncessary, convert the labels into character labels # (needed for factor labels) if( !is.character(labels)) labels=as.character(labels) # Recycle all arguments so they contain the same # number of elements as there are polygons n = length(pols) labels = rep(labels, length = n) method = rep(method, length = n) polypart = rep(polypart, length = n) # For each polygon, calculate the optimal label position ret = matrix(ncol=2, nrow = n) for (i in seq_along(labels)) { labw = strwidth(labels[i], cex = cex) # Label width labh = strheight(labels[i], cex = cex) # Label height if(labw == 0) labw = labh # For the empty string, use a one-line high square pol = pols[i,] # The polygon of interest # Optionally remove smaller polygon parts if(polypart[i] == "largest") pol = getLargestPolyPart(pol) # Calculate the label optimal label position ret[i,] = switch(method[i], "maxdist" = labpos.maxdist(pol, labw, labh, gridpoints), "buffer" = labpos.buffer(pol, getLargestPolyPart=getLargestPolyPart), "centroid" = coordinates(pol), "random" = labpos.random(pol), "inpolygon" = coordinates(gPointOnSurface(pol)), stop(paste("Unknown method:", method[i]))) } # Optionally plot the labels if(doPlot) text(ret, labels, cex=cex, ...) ret } # TODO: # # Automatic reprojection for unprojected maps # (simple quirectangular, to match what "plot" does). # # Option to auto-rotate labels (default < +/-30 degrees) # to make them fit (better). # # Better error handling (option to stop or to use # centroids when no valid label positions are found). # # A "removeholes" option? rgeos/R/rgeos_linearref.R0000644000176200001440000000141714025150746015072 0ustar liggesusersgProject <- function(spgeom, sppoint, normalized = FALSE) { stopifnot(inherits(spgeom, "SpatialLines") || inherits(spgeom, "SpatialLinesDataFrame")) stopifnot(inherits(sppoint, "SpatialPoints") || inherits(sppoint, "SpatialPointsDataFrame")) stopifnot(is.finite(normalized)) x <- .Call("rgeos_project", .RGEOS_HANDLE, spgeom, sppoint, normalized) x } gInterpolate <- function(spgeom, d, normalized = FALSE) { stopifnot(inherits(spgeom, "SpatialLines") || inherits(spgeom, "SpatialLinesDataFrame")) stopifnot(all(is.finite(d))) stopifnot(is.finite(normalized)) x <- .Call("rgeos_interpolate", .RGEOS_HANDLE, spgeom, d, normalized) rownames(x) <- seq_len(nrow(x)) SpatialPoints(x, proj4string=CRS(proj4string(spgeom))) } rgeos/R/rgeos_buffer.R0000644000176200001440000000634114345703316014377 0ustar liggesusers gBuffer = function(spgeom, byid=FALSE, id=NULL, width=1.0, quadsegs=5, capStyle="ROUND", joinStyle="ROUND", mitreLimit=1.0) { .Deprecated("", package="rgeos", msg="GEOS support is provided by the sf and terra packages among others") stopifnot(is.logical(byid)) if (!is.na(is.projected(spgeom)) && !is.projected(spgeom)) warning("Spatial object is not projected; GEOS expects planar coordinates") # Josh O'Brien 2016-02-08 byid_status <- byid if (byid && length(spgeom) == 1) { id <- row.names(spgeom)[1] byid <- FALSE byid_status <- TRUE #message("byid set to FALSE; single feature detected") } GEOSCapStyles = c("ROUND","FLAT","SQUARE") GEOSJoinStyles = c("ROUND","MITRE","BEVEL") curids = unique(row.names(spgeom)) if (is.null(id)) { if (byid) id = curids else id = "buffer" } if (byid == TRUE && length(id) != length(curids) ) stop("if applying by ids, new ids must be same length as current ids") if (byid == FALSE && length(id) != 1 ) stop("if applying across ids, new id must be length 1") id = as.character(id) width = as.numeric(width) n <- length(curids) if (byid) { if (length(width) == 1) width <- rep(width, n) stopifnot(length(width) == n) } else { stopifnot(length(width) == 1) } quadsegs = as.integer(quadsegs) byid = as.logical(byid) mitreLimit=as.numeric(mitreLimit) if (is.character(capStyle)) capStyle = which(match.arg(toupper(capStyle),GEOSCapStyles) == GEOSCapStyles) if (is.character(joinStyle)) joinStyle = which(match.arg(toupper(joinStyle),GEOSJoinStyles) == GEOSJoinStyles) if ( !(capStyle %in% 1:length(GEOSCapStyles)) ) stop("invalid cap style") if ( !(joinStyle %in% 1:length(GEOSJoinStyles)) ) stop("invalid join style") capStyle= as.integer(capStyle) joinStyle= as.integer(joinStyle) if (mitreLimit <= 0) stop("mitreLimit must be greater than 0") if (capStyle == 2 && inherits(spgeom,"SpatialPoints")) stop("Flat capstyle is incompatible with SpatialPoints geometries") if (any(width < 0) && !inherits(spgeom,"SpatialPolygons")) stop("Negative width values may only be used with SpatialPolygons geometries") ans = .Call("rgeos_buffer", .RGEOS_HANDLE, spgeom, byid, id, width, quadsegs, capStyle, joinStyle, mitreLimit, PACKAGE="rgeos") if (!is.null(ans) && byid_status) { if (.hasSlot(spgeom, 'data')) { m1 <- match(row.names(ans), id) df1 <- spgeom@data[m1, , drop=FALSE] row.names(df1) <- id[m1] ans <- SpatialPolygonsDataFrame(ans, df1) } } return(ans) } RGEOSBuffer = function(spgeom, byid=TRUE, id=NULL, width=1.0, quadsegs=5, capStyle="ROUND", joinStyle="ROUND", mitreLimit=1.0) { .Deprecated("gBuffer") return( gBuffer(spgeom, byid, id, width, quadsegs, capStyle, joinStyle, mitreLimit) ) } #RGEOSSingleSidedBuffer = function(spgeom, width, quadsegs, joinStyle, mitreLimit) { # # GEOSCapStyles = c("ROUND","FLAT","SQUARE") # GEOSJoinStyles = c("ROUND","MITRE","BEVEL") #} rgeos/R/over.R0000644000176200001440000001065414025150746012702 0ustar liggesusersorder_relations = function(rel, minDimension) { stopifnot(minDimension %in% 0:2) rel = sapply(rel, function(x) paste0(substring(x, c(1,4),c(2,5)), collapse="")) # our interest is in chars # 1-2 = inner of x with inner/border of y # 4-5 = border of x with inner/border of y ret = vector("numeric", length(rel)) * NA for (d in minDimension:2) { r = regexpr(as.character(d), rel, fixed = TRUE) sel = which(r != -1) if (length(sel) > 0) ret[sel] = 4 - r[sel] + 4 * d } order(ret, decreasing = TRUE, na.last = NA) } listifyMatrix = function(x) { # put columns in list elements if (!is.list(x)) { if (length(x) == 0) return(list(x)) if (!is.matrix(x)) { # vector! nm = names(x) x = matrix(x, 1, length(x)) } else nm = dimnames(x)[[2]] x = lapply(1:ncol(x), function(i) x[,i]) names(x) = nm } x } overGeomGeom = function(x, y, returnList = FALSE, fn = NULL, ..., minDimension = -1) { stopifnot(identicalCRS(x, y)) if (gridded(x)) x = as(x, "SpatialPolygons") if (gridded(y)) y = as(y, "SpatialPolygons") if (minDimension %in% 0:2) ret = apply(gRelate(x, y, byid = TRUE), 2, order_relations, minDimension = minDimension) else ret = apply(gIntersects(x, y, byid = TRUE), 2, which) ret = listifyMatrix(ret) # if not already list, create one now if (! returnList) # pick first, or NA if length is 0: sapply(ret, function(x) (x)[1]) else ret } # taken from: overDFGeneric in sp; # if modified here, consider modifying there as well! overGeomGeomDF = function(x, y, returnList = FALSE, fn = NULL, ..., minDimension = -1) { r = overGeomGeom(x, y, returnList = TRUE, minDimension = minDimension) #ret = sp:::.overDF(r, y@data, length(x), returnList, fn, ...) # length(x) differs from length(r) in case of SpatialMultiPoints!!! # reason to change is sp::overMultiPoints ret = overDF_for_rgeos(r, y@data, length(r), returnList, fn, ...) if (!returnList) row.names(ret) = row.names(r) ret } #setMethod("over", # signature(x = "SpatialPoints", y = "SpatialPolygons"), # overGeomGeom) setMethod("over", signature(x = "SpatialPoints", y = "SpatialLines"), overGeomGeom) #setMethod("over", # signature(x = "SpatialPoints", y = "SpatialPoints"), # overGeomGeom) #setMethod("over", # signature(x = "SpatialPolygons", y = "SpatialPoints"), # overGeomGeom) setMethod("over", signature(x = "SpatialPolygons", y = "SpatialLines"), overGeomGeom) setMethod("over", signature(x = "SpatialPolygons", y = "SpatialPolygons"), overGeomGeom) setMethod("over", signature(x = "SpatialLines", y = "SpatialPoints"), overGeomGeom) setMethod("over", signature(x = "SpatialLines", y = "SpatialPolygons"), overGeomGeom) setMethod("over", signature(x = "SpatialLines", y = "SpatialLines"), overGeomGeom) # all with DataFrame: #setMethod("over", # signature(x = "SpatialPoints", y = "SpatialPolygonsDataFrame"), # overGeomGeomDF) setMethod("over", signature(x = "SpatialPoints", y = "SpatialLinesDataFrame"), overGeomGeomDF) #setMethod("over", # signature(x = "SpatialPoints", y = "SpatialPointsDataFrame"), # overGeomGeomDF) #setMethod("over", # signature(x = "SpatialPolygons", y = "SpatialPointsDataFrame"), # overGeomGeomDF) setMethod("over", signature(x = "SpatialPolygons", y = "SpatialLinesDataFrame"), overGeomGeomDF) setMethod("over", signature(x = "SpatialPolygons", y = "SpatialPolygonsDataFrame"), overGeomGeomDF) setMethod("over", signature(x = "SpatialLines", y = "SpatialPointsDataFrame"), overGeomGeomDF) setMethod("over", signature(x = "SpatialLines", y = "SpatialPolygonsDataFrame"), overGeomGeomDF) setMethod("over", signature(x = "SpatialLines", y = "SpatialLinesDataFrame"), overGeomGeomDF) # lines & grids: setMethod("over", signature(x = "SpatialLines", y = "SpatialPixels"), overGeomGeom) setMethod("over", signature(x = "SpatialLines", y = "SpatialGrid"), overGeomGeom) setMethod("over", signature(x = "SpatialLines", y = "SpatialPixelsDataFrame"), overGeomGeomDF) setMethod("over", signature(x = "SpatialLines", y = "SpatialGridDataFrame"), overGeomGeomDF) setMethod("over", signature(x = "SpatialPixels", y = "SpatialLines"), overGeomGeom) setMethod("over", signature(x = "SpatialGrid", y = "SpatialLinesDataFrame"), overGeomGeomDF) rgeos/R/rgeos_predicate_binary.R0000644000176200001440000003502414025150746016430 0ustar liggesusersRGEOSBinPredFunc = function(spgeom1, spgeom2, byid, func, optparam=NULL) { stopifnot(is.logical(byid)) byid = as.logical(byid) if (any(is.na(byid)) ) stop("Invalid value for byid, must be logical") if( length(byid) < 1 || length(byid) > 2 ) stop("Invalid length for byid, must be of length 1 or 2") if (length(byid) == 1) byid <- rep(byid,2) if (is.null(spgeom2) && inherits(spgeom1, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom1)) spgeom1 <- createSPComment(spgeom1) if(!is.null(spgeom1) & !is.null(spgeom2)) { if(!identical(spgeom1@proj4string,spgeom2@proj4string)) warning("spgeom1 and spgeom2 have different proj4 strings") if (inherits(spgeom1, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom1)) spgeom1 <- createSPComment(spgeom1) if (inherits(spgeom2, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom2)) spgeom2 <- createSPComment(spgeom2) } if ( func == "rgeos_equalsexact" ) x <- .Call("rgeos_equalsexact", .RGEOS_HANDLE, spgeom1, spgeom2, optparam, byid, PACKAGE="rgeos") else if (func == "rgeos_relatepattern") x <- .Call("rgeos_relatepattern", .RGEOS_HANDLE, spgeom1, spgeom2, optparam, byid, PACKAGE="rgeos") else if (func == "rgeos_contains") x <- .Call("rgeos_contains", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_contains_prepared") x <- .Call("rgeos_contains_prepared", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_intersects") x <- .Call("rgeos_intersects", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_intersects_prepared") x <- .Call("rgeos_intersects_prepared", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_containsproperly_prepared") x <- .Call("rgeos_containsproperly_prepared", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_covers_prepared") x <- .Call("rgeos_covers_prepared", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_disjoint") x <- .Call("rgeos_disjoint", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_touches") x <- .Call("rgeos_touches", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_crosses") x <- .Call("rgeos_crosses", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_within") x <- .Call("rgeos_within", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_overlaps") x <- .Call("rgeos_overlaps", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_equals") x <- .Call("rgeos_equals", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else if (func == "rgeos_relate") x <- .Call("rgeos_relate", .RGEOS_HANDLE, spgeom1, spgeom2, byid, PACKAGE="rgeos") else stop("No such function:", func) if(any(byid)) { id1 = unique(row.names(spgeom1)) if (!get_RGEOS_DENSE()) { if (length(id1) == length(x)) names(x) <- id1 } else { # Michael Chirico bug report and fix 2019-08-16 if (byid[1L]) colnames(x) <- id1 if (byid[2L]) { if (is.null(spgeom2)) id2 <- id1 else id2 <- unique(row.names(spgeom2)) rownames(x) <- id2 } # if (is.null(spgeom2)) id2 = id1 # else id2 = unique(row.names(spgeom2)) # colnames(x) <- id1 # rownames(x) <- id2 } } return(x) } gContains = function(spgeom1, spgeom2 = NULL, byid = FALSE, prepared=TRUE, returnDense=TRUE, STRsubset=FALSE, checkValidity=FALSE) { stopifnot(is.logical(STRsubset)) stopifnot(length(STRsubset)==1) oSTRsubset <- get_RGEOS_STR() set_RGEOS_STR(STRsubset) if (STRsubset) returnDense=FALSE stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) func = "rgeos_contains" if (prepared) func = paste(func,"_prepared",sep="") if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,func) set_RGEOS_DENSE(oreturnDense) set_RGEOS_STR(oSTRsubset) res } gIntersects = function(spgeom1, spgeom2 = NULL, byid = FALSE, prepared=TRUE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) func = "rgeos_intersects" if (prepared) func = paste(func,"_prepared",sep="") if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,func) set_RGEOS_DENSE(oreturnDense) res } gContainsProperly = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_containsproperly_prepared") set_RGEOS_DENSE(oreturnDense) res } gCovers = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_covers_prepared") set_RGEOS_DENSE(oreturnDense) res } gCoveredBy = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom2,spgeom1,rev(byid),"rgeos_covers_prepared") set_RGEOS_DENSE(oreturnDense) res } gDisjoint = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_disjoint") set_RGEOS_DENSE(oreturnDense) res } gTouches = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_touches") set_RGEOS_DENSE(oreturnDense) res } gCrosses = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_crosses") set_RGEOS_DENSE(oreturnDense) res } gWithin = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_within") set_RGEOS_DENSE(oreturnDense) res } gOverlaps = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_overlaps") set_RGEOS_DENSE(oreturnDense) res } gEquals = function(spgeom1, spgeom2 = NULL, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_equals") set_RGEOS_DENSE(oreturnDense) res } gEqualsExact = function(spgeom1, spgeom2 = NULL, tol=0.0, byid = FALSE, returnDense=TRUE, checkValidity=FALSE) { stopifnot(is.logical(returnDense)) stopifnot(length(returnDense)==1) oreturnDense <- get_RGEOS_DENSE() set_RGEOS_DENSE(returnDense) tol <- as.numeric(tol) if ( is.na(tol) ) stop("Invalid value for tolerance, must be numeric") if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } res <- RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_equalsexact", tol) set_RGEOS_DENSE(oreturnDense) res } gRelate = function(spgeom1, spgeom2 = NULL, pattern = NULL, byid = FALSE, checkValidity=FALSE) { if(checkValidity) { val1 <- gIsValid(spgeom1) val2 <- gIsValid(spgeom2) if (!val1) message(deparse(substitute(spgeom1)), " is invalid") if (!val2) message(deparse(substitute(spgeom2))," is invalid") if (!all(c(val1, val2))) stop("Invalid objects found") } if (is.null(pattern)) { return( RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_relate") ) } else { if ( !is.character(pattern) ) stop("Invalid value for pattern, must be character") pattern = toupper(pattern) if (length(pattern) != 1) stop("Pattern must have length of 1") if (nchar(pattern) != 9 || !grepl("[0-2TF\\*]{9}",pattern) ) stop("Invalid pattern, see documentation for proper format") return( RGEOSBinPredFunc(spgeom1,spgeom2,byid,"rgeos_relatepattern",pattern) ) } } RGEOSDisjoint = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gDisjoint") return( gDisjoint(spgeom1,spgeom2, byid) ) } RGEOSTouches = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gTouches") return( gTouches(spgeom1,spgeom2, byid) ) } RGEOSIntersects = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gIntersects") return( gIntersects(spgeom1,spgeom2, byid) ) } RGEOSCrosses = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gCrosses") return( gCrosses(spgeom1,spgeom2, byid) ) } RGEOSWithin = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gWithin") return( gWithin(spgeom1,spgeom2, byid) ) } RGEOSContains = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gContains") return( gContains(spgeom1,spgeom2, byid) ) } RGEOSOverlaps = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gOverlaps") return( gOverlaps(spgeom1,spgeom2, byid) ) } RGEOSEquals = function(spgeom1, spgeom2 = NULL, byid = FALSE) { .Deprecated("gEquals") return( gEquals(spgeom1,spgeom2, byid) ) } RGEOSEqualsExact = function(spgeom1, spgeom2 = NULL, tol=0.0, byid = FALSE) { .Deprecated("gEqualsExact") return( gEqualsExact(spgeom1, spgeom2, byid, tol) ) } RGEOSRelate = function(spgeom1, spgeom2 = NULL, pattern = NULL, byid = FALSE) { .Deprecated("gRelate") return( gRelate(spgeom1,spgeom2, byid, pattern) ) } rgeos/R/rgeos_topology_binary.R0000644000176200001440000002217614345703631016352 0ustar liggesusersRGEOSBinTopoFunc = function(spgeom1, spgeom2, byid, ids=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, func) { .Deprecated("", package="rgeos", msg="GEOS support is provided by the sf and terra packages among others") stopifnot(is.logical(byid)) stopifnot(is.logical(drop_lower_td)) stopifnot(length(drop_lower_td) == 1) stopifnot(is.logical(unaryUnion_if_byid_false)) stopifnot(length(unaryUnion_if_byid_false) == 1) byid = as.logical(byid) if (any(is.na(byid)) ) stop("Invalid value for byid, must be logical") if (!length(byid) %in% c(1,2)) stop("Invalid length for byid, must be of length 1 or 2") if (length(byid) == 1) byid <- rep(byid,2) if (missing(spgeom1) | missing(spgeom2)) stop("spgeom1 and spgeom2 must both be specified") if(!identical(spgeom1@proj4string,spgeom2@proj4string)) warning("spgeom1 and spgeom2 have different proj4 strings") if (inherits(spgeom1, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom1)) spgeom1 <- createSPComment(spgeom1) if (inherits(spgeom2, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom2)) spgeom2 <- createSPComment(spgeom2) id1 = row.names(spgeom1) id2 = row.names(spgeom2) if(all(byid)) { if (is.null(ids)) ids = paste(rep(id1,each=length(id2)),rep(id2,length(id1))) idlen = length(id1)*length(id2) } else if (byid[1]) { if (is.null(ids)) ids = id1 idlen = length(id1) } else if (byid[2]) { if (is.null(ids)) ids = id2 idlen = length(id2) } else { if (is.null(ids)) ids = "1" idlen = 1 } if (idlen != length(ids)) stop(paste("ids vector has incorrect length of",length(ids),"expected length of",idlen)) # oboth_poly <- get("both_poly", envir=.RGEOS_HANDLE) # odrop_not_poly <- get("drop_not_poly", envir=.RGEOS_HANDLE) # both_poly <-(inherits(spgeom1, "SpatialPolygons") && # inherits(spgeom2, "SpatialPolygons")) # assign("both_poly", (inherits(spgeom1, "SpatialPolygons") && # inherits(spgeom2, "SpatialPolygons")), envir=.RGEOS_HANDLE) # if (drop_not_poly) assign("drop_not_poly", drop_not_poly, envir=.RGEOS_HANDLE) tds <- c(gTopoDim(spgeom1), gTopoDim(spgeom2)) min_tds <- as.integer(min(tds)) attr(byid, "min_tds") <- min_tds attr(byid, "drop_lower_td") <- drop_lower_td attr(byid, "unaryUnion_if_byid_false") <- unaryUnion_if_byid_false if (func == "rgeos_difference") x <- .Call("rgeos_difference", .RGEOS_HANDLE, spgeom1, spgeom2, byid, ids, PACKAGE="rgeos") else if (func == "rgeos_symdifference") x <- .Call("rgeos_symdifference", .RGEOS_HANDLE, spgeom1, spgeom2, byid, ids, PACKAGE="rgeos") else if (func == "rgeos_intersection") x <- .Call("rgeos_intersection", .RGEOS_HANDLE, spgeom1, spgeom2, byid, ids, PACKAGE="rgeos") else if (func == "rgeos_union") x <- .Call("rgeos_union", .RGEOS_HANDLE, spgeom1, spgeom2, byid, ids, PACKAGE="rgeos") else stop("no such function:", func) # assign("both_poly", oboth_poly, envir=.RGEOS_HANDLE) # assign("drop_not_poly", odrop_not_poly, envir=.RGEOS_HANDLE) return(x) } gDifference = function(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) { if (is.null(checkValidity)) checkValidity <- get_RGEOS_CheckValidity() if(checkValidity > 0L) { val1 <- isTRUE(all(gIsValid(spgeom1, byid=TRUE))) val2 <- isTRUE(all(gIsValid(spgeom2, byid=TRUE))) nm_1 <- deparse(substitute(spgeom1)) nm_2 <- deparse(substitute(spgeom2)) if (!val1) message(nm_1, " is invalid") if (!val2) message(nm_2," is invalid") if (checkValidity == 1L && !all(c(val1, val2))) warning("Invalid objects found; consider using set_RGEOS_CheckValidity(2L)") if (checkValidity == 2L) { if (!val1) { spgeom1 <- gBuffer(spgeom1, byid=TRUE, width=0.0) message("Attempting to make ", nm_1, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom1, byid=TRUE)))) stop("Zero width buffer repair of spgeom1 failed") } if (!val2) { spgeom2 <- gBuffer(spgeom2, byid=TRUE, width=0.0) message("Attempting to make ", nm_2, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom2, byid=TRUE)))) stop("Zero width buffer repair of spgeom2 failed") } } } return( RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, "rgeos_difference") ) } gSymdifference = function(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) { if (is.null(checkValidity)) checkValidity <- get_RGEOS_CheckValidity() if(checkValidity > 0L) { val1 <- isTRUE(all(gIsValid(spgeom1, byid=TRUE))) val2 <- isTRUE(all(gIsValid(spgeom2, byid=TRUE))) nm_1 <- deparse(substitute(spgeom1)) nm_2 <- deparse(substitute(spgeom2)) if (!val1) message(nm_1, " is invalid") if (!val2) message(nm_2," is invalid") if (checkValidity == 1L && !all(c(val1, val2))) warning("Invalid objects found; consider using set_RGEOS_CheckValidity(2L)") if (checkValidity == 2L) { if (!val1) { spgeom1 <- gBuffer(spgeom1, byid=TRUE, width=0.0) message("Attempting to make ", nm_1, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom1, byid=TRUE)))) stop("Zero width buffer repair of spgeom1 failed") } if (!val2) { spgeom2 <- gBuffer(spgeom2, byid=TRUE, width=0.0) message("Attempting to make ", nm_2, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom2, byid=TRUE)))) stop("Zero width buffer repair of spgeom2 failed") } } } return( RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, "rgeos_symdifference") ) } gIntersection = function(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_not_poly, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) { if (!missing(drop_not_poly)) { warning("drop_not_poly argument name deprecated, use drop_lower_td") drop_lower_td <- drop_not_poly } if (is.null(checkValidity)) checkValidity <- get_RGEOS_CheckValidity() if(checkValidity > 0L) { val1 <- isTRUE(all(gIsValid(spgeom1, byid=TRUE))) val2 <- isTRUE(all(gIsValid(spgeom2, byid=TRUE))) nm_1 <- deparse(substitute(spgeom1)) nm_2 <- deparse(substitute(spgeom2)) if (!val1) message(nm_1, " is invalid") if (!val2) message(nm_2," is invalid") if (checkValidity == 1L && !all(c(val1, val2))) warning("Invalid objects found; consider using set_RGEOS_CheckValidity(2L)") if (checkValidity == 2L) { if (!val1) { spgeom1 <- gBuffer(spgeom1, byid=TRUE, width=0.0) message("Attempting to make ", nm_1, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom1, byid=TRUE)))) stop("Zero width buffer repair of spgeom1 failed") } if (!val2) { spgeom2 <- gBuffer(spgeom2, byid=TRUE, width=0.0) message("Attempting to make ", nm_2, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom2, byid=TRUE)))) stop("Zero width buffer repair of spgeom2 failed") } } } return( RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, "rgeos_intersection") ) } gUnion = function(spgeom1, spgeom2, byid=FALSE, id=NULL, drop_lower_td=FALSE, unaryUnion_if_byid_false=TRUE, checkValidity=NULL) { if (is.null(checkValidity)) checkValidity <- get_RGEOS_CheckValidity() if(checkValidity > 0L) { val1 <- isTRUE(all(gIsValid(spgeom1, byid=TRUE))) val2 <- isTRUE(all(gIsValid(spgeom2, byid=TRUE))) nm_1 <- deparse(substitute(spgeom1)) nm_2 <- deparse(substitute(spgeom2)) if (!val1) message(nm_1, " is invalid") if (!val2) message(nm_2," is invalid") if (checkValidity == 1L && !all(c(val1, val2))) warning("Invalid objects found; consider using set_RGEOS_CheckValidity(2L)") if (checkValidity == 2L) { if (!val1) { spgeom1 <- gBuffer(spgeom1, byid=TRUE, width=0.0) message("Attempting to make ", nm_1, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom1, byid=TRUE)))) stop("Zero width buffer repair of spgeom1 failed") } if (!val2) { spgeom2 <- gBuffer(spgeom2, byid=TRUE, width=0.0) message("Attempting to make ", nm_2, " valid by zero-width buffering") if (!isTRUE(all(gIsValid(spgeom2, byid=TRUE)))) stop("Zero width buffer repair of spgeom2 failed") } } } return( RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, unaryUnion_if_byid_false, "rgeos_union") ) } rgeos/R/rgeos_wkt.R0000644000176200001440000000336714025150746013736 0ustar liggesusers readWKT = function( text, id = NULL, p4s = NULL) { #wkt = str_replace(text,"\n","") wkt = gsub("\n", "", text) if (length(wkt) != 1) stop("WKT must have length 1") pat = "POINT|LINESTRING|LINEARRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON" # m = str_extract_all(wkt, pat) m = strsplit(wkt, pat) # ngeoms = length( m[[1]] ) ngeoms = length( m[[1]] ) - 1 # "" before first match is always the first if(is.null(ngeoms)) ngeoms = 0 if(is.null(id)) { if (ngeoms == 0) { id = c() } else { id = 1:ngeoms } } # if the number of ids doesn't take into account sub geometries in geometry collection then create subids if( length(id) == 1 & ngeoms != 1) id = paste(id,1:ngeoms,sep=".") if( length(id) != ngeoms ) stop("number of WKT geometries does not match number of ids") p4s = checkP4S(p4s) id = as.character(id) tryCatch(res <- .Call("rgeos_readWKT", .RGEOS_HANDLE, wkt, p4s, id, PACKAGE="rgeos"), error = function(e) { stop( paste( "Unable to parse: ",wkt,"\n", "GEOS reported: \"", e$message,"\"",sep=""),call.=FALSE) } ) #if (length(unique(row.names(res))) != ngeoms) #if (!is.null(res)) { # if ( sum(sapply(row.names(res),length)) != ngeoms ) # warning(paste("Number of geometries does not match between object and text, check WKT validity.",wkt),call.=FALSE) #} return( res ) } writeWKT = function( spgeom, byid = FALSE) { stopifnot(is.logical(byid)) byid = as.logical(byid) res <- .Call("rgeos_writeWKT", .RGEOS_HANDLE, spgeom, byid) return(res) } rgeos/R/rgeos_predicate_unary.R0000644000176200001440000000460414025150746016302 0ustar liggesusersRGEOSUnaryPredFunc = function(spgeom, byid, func) { stopifnot(is.logical(byid)) byid = as.logical(byid) if (is.na(byid)) stop("Invalid value for byid, must be logical") if (inherits(spgeom, "SpatialPolygons") && get_do_poly_check() && notAllComments(spgeom)) spgeom <- createSPComment(spgeom) if (func == "rgeos_isempty") x <- .Call("rgeos_isempty", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else if (func == "rgeos_issimple") x <- .Call("rgeos_issimple", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else if (func == "rgeos_isring") x <- .Call("rgeos_isring", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else if (func == "rgeos_hasz") x <- .Call("rgeos_hasz", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else if (func == "rgeos_isvalidreason") x <- .Call("rgeos_isvalidreason", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else if (func == "rgeos_isvalid") x <- .Call("rgeos_isvalid", .RGEOS_HANDLE, spgeom, byid, PACKAGE="rgeos") else stop("no such function:", func) if(byid) { id <- unique(row.names(spgeom)) names(x) <- id } return(x) } gIsEmpty = function(spgeom, byid = FALSE) { return( RGEOSUnaryPredFunc(spgeom, byid,"rgeos_isempty") ) } gIsSimple = function(spgeom, byid = FALSE) { return( RGEOSUnaryPredFunc(spgeom, byid,"rgeos_issimple") ) } gIsRing = function(spgeom, byid = FALSE) { return( RGEOSUnaryPredFunc(spgeom, byid,"rgeos_isring") ) } gHasZ = function(spgeom, byid = FALSE) { return( RGEOSUnaryPredFunc(spgeom, byid,"rgeos_hasz") ) } gIsValid = function(spgeom, byid = FALSE, reason=FALSE) { if (reason) return( RGEOSUnaryPredFunc(spgeom, byid,"rgeos_isvalidreason") ) else return( RGEOSUnaryPredFunc(spgeom, byid,"rgeos_isvalid") ) } RGEOSisEmpty = function(spgeom, byid = FALSE) { .Deprecated("gIsEmpty") return( gIsEmpty(spgeom, byid) ) } RGEOSisSimple = function(spgeom, byid = FALSE) { .Deprecated("gIsSimple") return( gIsSimple(spgeom, byid) ) } RGEOSisRing = function(spgeom, byid = FALSE) { .Deprecated("gIsRing") return( gIsRing(spgeom, byid) ) } RGEOSHasZ = function(spgeom, byid = FALSE) { .Deprecated("gHasZ") return( gHasZ(spgeom, byid) ) } RGEOSisValid = function(spgeom, byid = FALSE, reason=FALSE) { .Deprecated("gIsValid") return( gIsValid(spgeom, byid, reason) ) } rgeos/R/AAA.R0000644000176200001440000001121414431704211012273 0ustar liggesusers.RGEOS_HANDLE <- new.env(FALSE, parent=globalenv()) set_RGEOS_HANDLE <- function(handle) { assign("GEOSptr", handle, envir=.RGEOS_HANDLE) } set_RGEOS_DENSE <- function(value) { stopifnot(is.logical(value)) stopifnot(length(value) == 1) assign("returnDense", value, envir=.RGEOS_HANDLE) } get_RGEOS_DENSE <- function() { get("returnDense", envir=.RGEOS_HANDLE) } set_RGEOS_dropSlivers <- function(value) { stopifnot(is.logical(value)) stopifnot(length(value) == 1) assign("dropSlivers", value, envir=.RGEOS_HANDLE) } get_RGEOS_dropSlivers <- function() { get("dropSlivers", envir=.RGEOS_HANDLE) } set_RGEOS_warnSlivers <- function(value) { stopifnot(is.logical(value)) stopifnot(length(value) == 1) assign("warnSlivers", value, envir=.RGEOS_HANDLE) } get_RGEOS_warnSlivers <- function() { get("warnSlivers", envir=.RGEOS_HANDLE) } set_RGEOS_polyThreshold <- function(value) { stopifnot(is.numeric(value)) stopifnot(length(value) == 1) stopifnot(value >= 0.0) assign("polyThreshold", value, envir=.RGEOS_HANDLE) } get_RGEOS_polyThreshold <- function() { get("polyThreshold", envir=.RGEOS_HANDLE) } set_RGEOS_CheckValidity <- function(value) { stopifnot(is.integer(value)) stopifnot(length(value) == 1) stopifnot(value >= 0L && value < 3L) assign("CheckValidity", value, envir=.RGEOS_HANDLE) } get_RGEOS_CheckValidity <- function() { get("CheckValidity", envir=.RGEOS_HANDLE) } set_RGEOS_STR <- function(value) { stopifnot(is.logical(value)) stopifnot(length(value) == 1) assign("STRsubset", value, envir=.RGEOS_HANDLE) } get_RGEOS_STR <- function() { get("STRsubset", envir=.RGEOS_HANDLE) } init_RGEOS <- function() { .Call('rgeos_Init', PACKAGE="rgeos") } finish_RGEOS <- function() { .Call('rgeos_finish', .RGEOS_HANDLE, PACKAGE="rgeos") } version_GEOS <- function(runtime=TRUE) { stopifnot(is.logical(runtime)) stopifnot(length(runtime) == 1L) res0 <- .Call("rgeos_GEOSversion", runtime, PACKAGE="rgeos") res1 <- strsplit(res0, " ")[[1]] res <- res1[1] if (length(res1) > 1) attr(res, "rev") <- res1[2] res } version_GEOS0 <- function() { # substring(version_GEOS(), 1, 5) package_version(gsub("[a-zA-Z]", "", strsplit(version_GEOS(), "-")[[1]][1])) } version_sp_linkingTo <- function() { .Call("rgeos_sp_linkingTo_version") } load_stuff <- function() { set_RGEOS_HANDLE(init_RGEOS()) if (!isTRUE(all.equal(version_GEOS(TRUE), version_GEOS(FALSE), check.attributes=FALSE))) { warning("rgeos: versions of GEOS runtime ", c(version_GEOS(TRUE)), "\nand GEOS at installation ", version_GEOS(FALSE), "differ") } assign("scale", 100000000, envir=.RGEOS_HANDLE) assign("do_poly_check", TRUE, envir=.RGEOS_HANDLE) # assign("both_poly", FALSE, envir=.RGEOS_HANDLE) # assign("drop_not_poly", FALSE, envir=.RGEOS_HANDLE) assign("polyThreshold", 0.0, envir=.RGEOS_HANDLE) assign("dropSlivers", FALSE, envir=.RGEOS_HANDLE) assign("warnSlivers", TRUE, envir=.RGEOS_HANDLE) assign("returnDense", TRUE, envir=.RGEOS_HANDLE) assign("STRsubset", FALSE, envir=.RGEOS_HANDLE) cV <- ifelse(c(version_GEOS0()) < "3.7.2", 0L, 1L) assign("CheckValidity", cV, envir=.RGEOS_HANDLE) fn <- system.file("SVN_VERSION", package="rgeos") if (file.exists(fn)) { svn_version <- scan(fn, what=character(1), sep="\n", quiet=TRUE) } else { svn_version <- "(unknown)" } Smess <- paste("rgeos version: ", utils::packageDescription("rgeos")$Version, ", (SVN revision ", svn_version, ")\n", sep="") Smess <- paste(Smess, "GEOS runtime version:", version_GEOS(), "\n") Smess <- paste(Smess, "Please note that rgeos will be retired during October 2023,\nplan transition to sf or terra functions using GEOS at your earliest convenience.\nSee https://r-spatial.org/r/2023/05/15/evolution4.html for details.\n") if (gIsOverlayNG()) Smess <- paste(Smess, "GEOS using OverlayNG\n") splVersion <- version_sp_linkingTo() Smess <- paste(Smess, "Linking to sp version:", splVersion, "\n") spVcheck <- NULL if("sp" %in% .packages()) spVcheck <- utils::packageVersion("sp") == splVersion if (!is.null(spVcheck) && !spVcheck) paste(Smess, "sp version used to install rgeos and loaded sp version differ\n") Smess <- paste(Smess, "Polygon checking:", get_do_poly_check(), "\n") packageStartupMessage(Smess, appendLF = TRUE) } .onLoad <- function(lib, pkg) { load_stuff() } .onAttach <- function(lib, pkg) { } .onUnload <- function(libpath) { invisible(finish_RGEOS()) } rgeos_extSoftVersion <- function() { res <- c("GEOS"=strsplit(version_GEOS(), "-")[[1]][1], "OverlayNG"=gIsOverlayNG(), "sp"=version_sp_linkingTo()) res } rgeos/R/gpc_geos.R0000644000176200001440000000423414025150746013512 0ustar liggesusersrgeos_SpatialPolygons2gpcpoly <- function(from) { if (!inherits(from,"SpatialPolygons")) stop("sp does not inherit from SpatialPolygons") gpcs = list() for(i in 1:length(from@polygons)) { polys = from@polygons[[i]] pts = list() for(j in 1:length(polys@Polygons)) { coords = polys@Polygons[[j]]@coords hole = polys@Polygons[[j]]@hole l=nrow(coords) pts[[j]] = list(x=coords[-l,1],y=coords[-l,2],hole=hole) } gpc = new("gpc.poly", pts = pts) gpcs[i] = gpc } if (length(gpcs) == 0) gpcs = NULL if (length(gpcs) == 1) gpcs = gpcs[[1]] return(gpcs) } rgeos_gpcpoly2SpatialPolygons <- function(from) { if (!is.list(from)) from = list(from) res=lapply(from, function(gpc) { if (!inherits(gpc,"gpc.poly")) stop("object does not inherit from gpc.poly") if (length(gpc@pts) < 1) stop("must be at least one polygon") polylist = lapply( gpc@pts, function(pt) { x=pt$x y=pt$y l=length(x) if (x[1]!=x[l] | y[1]!=y[l]) { x = c(x,x[1]) y = c(y,y[1]) } hole = return( Polygon(cbind(x,y),pt$hole) ) }) p = Polygons(polylist,"0") attr(p,"comment") = createPolygonsComment(p) return(p) }) for (m in 1:length(from)) { res[[m]]@ID = as.character(m) } return( SpatialPolygons(res) ) } setAs("SpatialPolygons", "gpc.poly", rgeos_SpatialPolygons2gpcpoly) setAs("gpc.poly", "SpatialPolygons", rgeos_gpcpoly2SpatialPolygons) setAs("SpatialPolygons", "gpc.poly.nohole", rgeos_SpatialPolygons2gpcpoly) setAs("gpc.poly.nohole", "SpatialPolygons", rgeos_gpcpoly2SpatialPolygons) areaGPC <- function(x.mat) { if(nrow(x.mat) < 3) return(0); x.segmat <- cbind(x.mat, rbind(x.mat[2:nrow(x.mat), ], x.mat[1, ])); abs(sum(x.segmat[,1] * x.segmat[,4] - x.segmat[,3] * x.segmat[,2])) / 2 } rgeos/R/Rgpc_funcs.R0000644000176200001440000002765214025150746014026 0ustar liggesusers## gpclib: General Polygon Clipping library for R ## Copyright (C) 2003-2010 Roger D. Peng ## R functions for using GPC library and manipulating polygons setClass("gpc.poly", representation(pts = "list")) setClass("gpc.poly.nohole", "gpc.poly") ## setValidity("gpc.poly", ## function(x) { ## pts <- x@pts ## lens <- sapply(pts, length) ## if(!identical(all(lens == 3), TRUE)) ## "Not all contours have correct elements" ## ## correct names (x, y, hole) ## contour.names <- lapply(pts, names) ## correct.names <- c("x", "y", "hole") ## check <- lapply(contour.names, function(n) { ## n %in% correct.names ## }) ## if(!identical(all(sapply(check, all)), TRUE)) ## "Incorrect list names in contours" ## ## correct types ## ## equal lengths? ## }) setMethod("show", "gpc.poly", function(object) { cat("GPC Polygon\n") cat(" Num. Contours: ", length(object@pts), "\n") if(length(object@pts) == 1) cat(" Num. Vertices: ", length(object@pts[[1]]$x),"\n") bbox <- get.bbox(object) cat(" BBox (X): ", bbox$x[1], "-->", bbox$x[2], "\n") cat(" BBox (Y): ", bbox$y[1], "-->", bbox$y[2], "\n") invisible(object) }) setGeneric("get.bbox", function(x) standardGeneric("get.bbox")) setMethod("get.bbox", signature(x = "gpc.poly"), function(x) { pts <- x@pts x <- unlist(lapply(pts, "[[", "x")) y <- unlist(lapply(pts, "[[", "y")) if(!is.null(x)) xlim <- range(x) else xlim <- c(NA, NA) if(!is.null(y)) ylim <- range(y) else ylim <- c(NA, NA) list(x = xlim, y = ylim) }) setGeneric("plot") setMethod("plot", "gpc.poly", function(x, y, poly.args = list(), xlab = "X", ylab = "Y", asp = 1, add = FALSE, ...) { if(!add) { bbox <- get.bbox(x) plot(0, 0, ylim = bbox$y, xlim = bbox$x, type="n", xlab = xlab, ylab = ylab, asp = asp, ...) } invisible(lapply(x@pts, function(p) { do.call("polygon", append(list(x = p), poly.args)) })) }) setGeneric("intersect") setGeneric("union") setGeneric("setdiff") if (!isGeneric("symdiff")) setGeneric("symdiff", function(x, y) standardGeneric("symdiff")) setMethod("intersect", signature(x = "gpc.poly", y = "gpc.poly"), function(x, y) { spx = as(x,"SpatialPolygons") spy = as(y,"SpatialPolygons") spres = gIntersection(spx, spy, drop_lower_td=TRUE) if (is.null(spres)) return(new("gpc.poly")) as(spres,"gpc.poly") }) setMethod("setdiff", signature(x = "gpc.poly", y = "gpc.poly"), function(x, y) { spx = as(x,"SpatialPolygons") spy = as(y,"SpatialPolygons") spres = gDifference(spx,spy, drop_lower_td=TRUE) if (is.null(spres)) return(new("gpc.poly")) as(spres,"gpc.poly") }) setMethod("union", signature(x = "gpc.poly", y = "gpc.poly"), function(x, y) { spx = as(x,"SpatialPolygons") spy = as(y,"SpatialPolygons") spres = gUnion(spx,spy, drop_lower_td=TRUE) if (is.null(spres)) return(new("gpc.poly")) as(spres,"gpc.poly") }) setMethod("symdiff", signature(x = "gpc.poly", y = "gpc.poly"), function(x, y) { spx = as(x,"SpatialPolygons") spy = as(y,"SpatialPolygons") spres = gSymdifference(spx,spy, drop_lower_td=TRUE) if (is.null(spres)) return(new("gpc.poly")) as(spres,"gpc.poly") }) setGeneric("tristrip", function(x) standardGeneric("tristrip")) setMethod("tristrip", signature(x = "gpc.poly"), function(x) { stop("rgeos does not currently implement this feature of gpclib") #poly <- as(x, "numeric") #result <- .Call("Rgpc_polygon_to_tristrip", poly, PACKAGE = "gpclib") #result <- lapply(result, function(strip) matrix(strip, ncol=2, byrow=TRUE)) }) setGeneric("triangulate", function(x) standardGeneric("triangulate")) setMethod("triangulate", signature(x = "gpc.poly"), function(x) { stop("rgeos does not currently implement this feature of gpclib") tristrip <- tristrip(x) triangles <- lapply(tristrip, function(strip) { n <- nrow(strip) if (n > 3) result <- strip[c(1:3,4:2) + 2*rep(0:(n %/% 2 - 2), each=6), ] else result <- strip[0,] if (n %% 2 && n > 2) result <- rbind(result, strip[1:3 + n - 3,]) return(result) }) do.call(rbind, triangles) }) setMethod("[", "gpc.poly", function(x, i, j, ..., drop = FALSE) { new("gpc.poly", pts = x@pts[i]) }) setAs("matrix", "gpc.poly", function(from, to) { if(ncol(from) > 2) stop("matrix must have 2 columns") p <- list(x = from[,1], y = from[,2], hole = FALSE) new("gpc.poly", pts = list(p)) }) setAs("data.frame", "gpc.poly", function(from, to) { as(as.matrix(from), "gpc.poly") }) ## Miscellaneous Utility Functions setGeneric("append.poly", function(x, y) standardGeneric("append.poly")) setMethod("append.poly", signature(x = "gpc.poly", y = "gpc.poly"), function(x, y) { newpts <- append(x@pts, y@pts) new("gpc.poly", pts = newpts) }) setGeneric("scale.poly", function(x, ...) standardGeneric("scale.poly")) setMethod("scale.poly", signature(x = "gpc.poly"), function(x, xscale, yscale = xscale, ...) { x@pts <- lapply(x@pts, function(p) { p$x <- p$x / xscale p$y <- p$y / yscale p }) x }) ## Compute the area of each polygon in the polygon set contained in ## `object'. setGeneric("area.poly", function(object, ...) standardGeneric("area.poly")) setMethod("area.poly", signature(object = "gpc.poly"), function(object, ...) { area <- function(x.mat) { if(nrow(x.mat) < 3) return(0); x.segmat <- cbind(x.mat, rbind(x.mat[2:nrow(x.mat), ], x.mat[1, ])); abs(sum(x.segmat[,1] * x.segmat[,4] - x.segmat[,3] * x.segmat[,2])) / 2 } if(length(object@pts) == 0) return(0) a <- sapply(object@pts, function(p) area(cbind(p$x, p$y))) holeflags <- sapply(object@pts, "[[", "hole") sum(a[!holeflags]) - sum(a[holeflags]) }) ## Added 2003/01/07 setGeneric("get.pts", function(object) standardGeneric("get.pts")) setMethod("get.pts", signature(object = "gpc.poly"), function(object) { object@pts }) ## These two functions are needed for the intersect/union/setdiff ## methods. They basically serialize and unserialize the "gpc.poly" ## object. ## We need separate functions because polygons with holes and polygons ## without holes have different file formats setAs("numeric", "gpc.poly.nohole", function(from) { ## The shortest a vector can be is 8 numbers: 1. Num. Contours; ## 2. Num pts for first contour; and three vertices if(length(from) < 8) stop("numeric vector not long enough") expand.poly <- function(x) { ## `x' is just a long vector of numbers with a special format num.contours <- x[1]; x <- x[-1] polyfile <- x poly <- vector("list", length = num.contours) for(i in 1:num.contours) { npts <- polyfile[1]; polyfile <- polyfile[-1] m <- matrix(polyfile[1:(2*npts)], byrow = TRUE, ncol = 2) poly[[i]] <- list(x = m[,1], y = m[,2], hole = FALSE) polyfile <- polyfile[-(1:(2*npts))] } poly } new("gpc.poly.nohole", pts = expand.poly(from)) }) setAs("numeric", "gpc.poly", function(from) { ## The shortest a vector can be is 9 numbers: 1. Num. Contours; ## 2. Num pts for first contour; 3. hole flag; and three vertices if(length(from) < 9) stop("numeric vector not long enough") expand.poly <- function(x) { num.contours <- x[1]; x <- x[-1] polyfile <- x poly <- vector("list", length = num.contours) for(i in 1:num.contours) { npts <- polyfile[1] polyfile <- polyfile[-1] hole <- as.logical(polyfile[1]) polyfile <- polyfile[-1] m <- matrix(polyfile[1:(2*npts)], byrow = TRUE, ncol = 2) poly[[i]] <- list(x = m[,1], y = m[,2], hole = hole) polyfile <- polyfile[-(1:(2*npts))] } poly } new("gpc.poly", pts = expand.poly(from)) }) ## setAs("gpc.poly", "numeric", function(from) { flatten.poly <- function(poly) { num.contours <- length(poly@pts) flat <- lapply(poly@pts, function(p) { v <- as.vector(t(cbind(p$x, p$y))) c(length(p$x), as.numeric(p$hole), v) }) c(num.contours, unlist(flat)) } flatten.poly(from) }) setAs("gpc.poly", "matrix", function(from) { if(length(from@pts) > 1) stop("can only convert a single contour into a matrix") pts <- from@pts[[1]] m <- cbind(x = pts$x, y = pts$y) }) ## 'from' is a list(x = ..., y = ...) setAs("list", "gpc.poly", function(from) { if(!(all(c("x", "y") %in% names(from)))) stop("list should have names 'x' and 'y'") if(length(from$x) != length(from$y)) stop("'x' and 'y' elements should have the same length") as(cbind(from$x,from$y), "gpc.poly") }) ## Read a polygon from a file read.polyfile <- function(filename, nohole = TRUE) { polyfile <- scan(filename, quiet = TRUE) if(nohole) as(polyfile, "gpc.poly.nohole") else as(polyfile, "gpc.poly") } ## Write a "gpc.poly" object to a text file write.polyfile <- function(poly, filename = "GPCpoly.txt") { if(!is(poly, "gpc.poly")) stop("'poly' should be of class 'gpc.poly'") outfile <- file(filename, "w") on.exit(close(outfile)) num.contours <- length(poly@pts) cat(num.contours, "\n", file = outfile) for(i in 1:num.contours) { m <- as(poly[i], "matrix") cat(nrow(m), "\n", file = outfile, append = TRUE) if(!is(poly, "gpc.poly.nohole")) cat(as.numeric(poly@pts[[i]]$hole), "\n", file = outfile, append = TRUE) write(t(m), file = outfile, ncolumns = 2, append = TRUE) } } rgeos/R/rgeos_util.R0000644000176200001440000001523414327717741014113 0ustar liggesuserspoly_findInBoxGEOS <- function(spl, as_points=TRUE) { stopifnot(is(spl, "SpatialPolygons")) stopifnot(is.logical(as_points)) stopifnot(!is.na(as_points)) pls <- slot(spl, "polygons") res <- .Call("rgeos_poly_findInBox", .RGEOS_HANDLE, pls, as_points, PACKAGE="rgeos") res } gUnarySTRtreeQuery <- function(obj) { if(inherits(obj, "SpatialLines")) type <- "line" else if(inherits(obj, "SpatialPolygons")) type <- "poly" else if(inherits(obj, "Polygons")) type <- "Poly" else stop(paste("unsupported class:", class(obj))) if (type == "line") lst <- slot(obj, "lines") else if (type == "poly") lst <- slot(obj, "polygons") else lst <- slot(obj, "Polygons") res <- .Call("rgeos_unary_STRtree_query", .RGEOS_HANDLE, lst, PACKAGE="rgeos") res } gBinarySTRtreeQuery <- function(obj1, obj2) { if(inherits(obj1, "SpatialLines")) type1 <- "line" else if(inherits(obj1, "SpatialPolygons")) type1 <- "poly" else stop(paste("unsupported class:", class(obj1))) if(inherits(obj2, "SpatialLines")) type2 <- "line" else if(inherits(obj2, "SpatialPoints")) type2 <- "pts" else if(inherits(obj2, "SpatialPolygons")) type2 <- "poly" else stop(paste("unsupported class:", class(obj2))) if (type1 == "line") lst1 <- slot(obj1, "lines") else lst1 <- slot(obj1, "polygons") if (type2 == "line") lst2 <- slot(obj2, "lines") else if (type2 == "pts") lst2 <- as(obj2, "SpatialPoints") else lst2 <- slot(obj2, "polygons") res <- .Call("rgeos_binary_STRtree_query", .RGEOS_HANDLE, lst1, lst2, PACKAGE="rgeos") res } set_do_poly_check <- function(value) { stopifnot(is.logical(value)) stopifnot(length(value) == 1) assign("do_poly_check", value, envir=.RGEOS_HANDLE) } get_do_poly_check <- function() { get("do_poly_check", envir=.RGEOS_HANDLE) } notAllComments <- function(spgeom) { if (!get_do_poly_check()) return(FALSE) if (!inherits(spgeom, "SpatialPolygons")) return(TRUE) if (is.null(comment(spgeom))) return(TRUE) return(comment(spgeom) != "TRUE") } createSPComment = function(sppoly,which=NULL,overwrite=TRUE) { if (!inherits(sppoly, "SpatialPolygons")) stop("not a SpatialPolygons object") if (get_do_poly_check() && notAllComments(sppoly)) { if (is.null(which)) which = 1:length(sppoly@polygons) sppoly@polygons[which] = lapply(sppoly@polygons[which], function(p) { if (!overwrite && !is.null(attr(p, "comment"))) { return(p) } else if (all(sapply(slot(p, "Polygons"), function(j) is.null(slot(j, "coords"))))) { comment(p) <- paste(rep(0, length(slot(p, "Polygons"))), collapse=" ") return(p) } else { attr(p, "comment") = createPolygonsComment(p) return(p) } }) comment(sppoly) <- as.character(any(sapply(slot(sppoly, "polygons"), function(x) !is.null(comment(x))), na.rm=TRUE)) } return(sppoly) } createPolygonsComment = function(poly) { if (!is(poly, "Polygons")) stop("not a Polygons object") holes = sapply(poly@Polygons, function(x) x@hole) if (!any(holes)) { comm = rep(0,length(poly@Polygons)) } else { comm = .Call("rgeos_PolyCreateComment", .RGEOS_HANDLE, poly@Polygons, PACKAGE="rgeos") } return(paste(comm,collapse=" ")) } getScale <- function() { return( mget("scale",.RGEOS_HANDLE)$scale ) } setScale <- function(scale=100000000) { maxPreciseValue <- 9007199254740992.0 if(scale > maxPreciseValue){ stop("Specified scale is larger than maximum allowed") } assign("scale",scale,envir=.RGEOS_HANDLE) } checkP4S = function(p4s) { if ( is.null(p4s) ) p4s = CRS(as.character(NA)) if( is.character(p4s)) p4s = CRS(p4s) if (length(p4s) != 1) stop("proj4string must be of length 1") if ( !inherits(p4s, "CRS")) { stop("proj4string has invalid class") } return( p4s ) } translate = function(spgeom) { rn = row.names(spgeom) if (!is.list(rn)) rn = list(rn) ids = as.character( unlist( sapply(rn, unique) ) ) x = .Call("rgeos_double_translate", .RGEOS_HANDLE, spgeom, ids, 0, PACKAGE="rgeos") return(x) } groupID = function(spgeom, ids) { if (inherits(spgeom,"SpatialCollections")) stop("groupID does not work with SpatialCollections objects") if (length(row.names(spgeom)) != length(ids)) stop("length of ids does not match number of geometries") if (storage.mode(ids) != "character") ids <- as.character(ids) newids = unique(ids) if (length(row.names(spgeom)) == 1 || length(row.names(spgeom)) == length(newids) || inherits(spgeom,"SpatialPoints") ) { row.names(spgeom) <- ids return(spgeom) } if ( inherits(spgeom,"SpatialLines") ) { lineslist = list() k=1 for (curid in newids) { if (is.na(curid)) next # RSB 101124 linelist = list() l = 1 for ( i in which(ids == curid) ){ L = length(spgeom@lines[[i]]@Lines) linelist[l:(l+L-1)] = spgeom@lines[[i]]@Lines l=l+L } lineslist[[k]] = Lines(linelist, curid) k=k+1 } ans = SpatialLines(lineslist,proj4string = spgeom@proj4string) } else if ( inherits(spgeom,"SpatialPolygons") ) { polyslist = list() k=1 for (curid in newids) { if (is.na(curid)) next # RSB 101124 comment = c() polylist = list() l = 1 for ( i in which(ids == curid) ){ L = length(spgeom@polygons[[i]]@Polygons) comm = attr(spgeom@polygons[[i]],"comment") if (is.null(comm)) comm = rep(0,L) else comm = as.integer( strsplit(comm," ")[[1]] ) comm[comm!=0] = comm[comm!=0] + l-1 comment = c(comment, comm) polylist[l:(l+L-1)] = spgeom@polygons[[i]]@Polygons l=l+L } polyslist[[k]] = Polygons(polylist, curid) attr(polyslist[[k]],"comment") = paste(comment, collapse=" ") k=k+1 } ans = SpatialPolygons(polyslist,proj4string = spgeom@proj4string) } else { stop("Unknown object class") } return(ans) } gIsOverlayNG <- function() { version_GEOS0() >= "3.9.0" } rgeos/NEWS.md0000644000176200001440000000270514441605533012500 0ustar liggesusers# Please note that **rgeos** will be retired during October 2023, plan transition to **sf** or **terra** functions using GEOS at your earliest convenience (see https://r-spatial.org/r/2023/05/15/evolution4.html and earlier blogs for guidance). # Version 0.6-4 (development, rev 698-) * GEOS 3.12.0 beta WKTReader: Throw exception if WKT contains extra text after end of geometry (#1095, Dan Baston) uncovered error in WKT input in test. # Version 0.6-3 (2023-05-24, rev 694-697) * Make retirement in October 2023 explicit, move package start-up messages to load from attach # Version 0.6-2 (2023-03-02, rev 693) * remove CXX11 requirement # Version 0.6-1 (2022-12-14, rev 685-692) * commence deprecation * Update src/Makevars.win to GEOS 3.10.2 for R < 4.2 * fix -Wstrict-prototypes problems # Version 0.5-9 (2021-12-15, rev. 679-684) * Adapt to UCRT Windows 4.2 # Version 0.5-8 (2021-09-22, rev 676-678) * Run autoupdate on configure.ac to handle obsolete AC_HELP_STRING etc. # Version 0.5-7 (2021-09-07, rev. 641-675) * adapt to OverlayNG in GEOS 3.9 * update Windows static library to GEOS 3.9 * add gMinumumRotatedRectangle() and gMaximumInscribedCircle() for GEOS 3.9 * adapt configure.ac for GEOS 3.10 * add support for structured geometry fixer in gMakeValid() from 3.10 # Version 0.5-5 (2020-09-07, rev. 634-640) * add gMakeValid() for GEOS 3.8 * update Windows static library to GEOS 3.8 * add gCoverageUnion() * add stdlib.h to configure.ac rgeos/MD50000644000176200001440000002510414455547166011724 0ustar liggesusersf679d5a621cf0cb4717ae8c3c2e3bef4 *ChangeLog 9e25ecc0f8e89c75b39fa94182fbe82d *DESCRIPTION 63fee8598b58d43d08a6201feafd58b7 *LICENSE.note d5248edab392a8b905063f745e040ec4 *NAMESPACE 90ac7ad38390d1b4ee8c2f014c0b645a *NEWS.md 17dadb63cb6b4a8f6484f16d5111b9c6 *R/AAA.R 437f4edbd6c67d561783af7960575283 *R/Rgpc_funcs.R fa1203778e80f3a61090cd1e34b24c4b *R/bbox2SP.R d97a5d4ab563a8c66bfd93dec1449adc *R/gpc_geos.R 601561f1ad8ff5ebff33a0f4ff7b7c2a *R/labelpt.R c27f2fc905f25676fc213d233195cc11 *R/over.R c60222f5be273b3d51b2f78a5e03d928 *R/rgeos_buffer.R e71149c7af8640b15694bc666b27c445 *R/rgeos_linearref.R a3403cf524417af5eb4d0654a596f018 *R/rgeos_misc.R 150a6cb1c586fb68bf93a37ce3eb2911 *R/rgeos_predicate_binary.R 05075c9e2bc204db30af7f741884abd5 *R/rgeos_predicate_unary.R 96f670127773380ac223dcc5580bd861 *R/rgeos_spExtensions_Classes.R fa0bb60e604db6d2c4288c8476e76ce9 *R/rgeos_spExtensions_Methods.R d93133e3c7d7173580c0fe1242dcc1c8 *R/rgeos_topology.R 79404234b678556312273ee707fd25c0 *R/rgeos_topology_binary.R 18dfe68c4d93ef1258cec15654e05737 *R/rgeos_util.R 6d0eb1653d9c722481408f7ce9d33e3c *R/rgeos_wkt.R c3cded853a2388ad53569a7105d1c1e3 *cleanup 854fad6505ca63a782477b3e18d7b1e6 *configure 9e4edfae7897079371b3008cde997136 *configure.ac f679d5a621cf0cb4717ae8c3c2e3bef4 *inst/ChangeLog 3c570969cc1bcbc2fc4a3753b140a0d1 *inst/README aba3121d9a4398d318b708926dbf880d *inst/SVN_VERSION f330d6b1d9127bc82881f33dfe6e18bd *inst/poly-ex-gpc/ex-poly1.txt 734b9a203116bec1dd173e7f8a50e07a *inst/poly-ex-gpc/ex-poly2.txt bd20bfd0827e13fa7ca4a022810e8962 *inst/poly-ex-gpc/hole-poly.txt 7992a1e099e83fb65dde03a8f1a52164 *inst/test_cases/OverlayNG_test_a.rds c54a94663a80ac49530c7e93b6980627 *inst/test_cases/OverlayNG_test_b.rds 527303b229bf99ebd058012b7bc209a8 *inst/test_cases/OverlayNG_test_c.rds 2c254a8dc38537ccd0431dca771f52a1 *inst/test_cases/polys.RData 430969bc87ce7c2e47ae85a27887b4dc *inst/wkts/nc34.wkt 0f2b2d0f90111d9403b5fe5c85662146 *inst/wkts/sline1.wkt 41d7dd100f0ee42d2355c8c81feacfe0 *inst/wkts/sline2.wkt 4aba44c750973f85620ccbd38813a607 *inst/wkts/sppsp.wkt dafa7c9cefa8677e904b2bd18dc99743 *man/bbox2SP.Rd edd0206902db37fe3814a0876db8fa93 *man/class-Ring.Rd ebe0caae74361b2ffed802ccead3e473 *man/class-SpatialCollections.Rd e1d6338ae1c8959e7d81fe1810cbe6b7 *man/class-SpatialRings.Rd 0a8ccd4182b1cba52a6c8c87dfbea5dd *man/class-SpatialRingsDataFrame.Rd fc596937914e92d353cc72ad3cb53ec4 *man/class-gpc.poly.Rd aed22fcecc8afa3757bfd9b4fe50b2a4 *man/class-gpc.poly.nohole.Rd c7b2f59109cc485be1daae3e4e7e4eb1 *man/comment-functions.Rd 8c28c48df99e566a47a72cfca9449edf *man/constructor-SpatialCollections.Rd a4f8b6f11e2595120e19822213c04368 *man/constructor-SpatialRings.Rd 9111e4e2c3c9126cc9ed6c3e136c3b6a *man/experimental-functions.Rd 9b8dad2cab20bd54dd7bf27f1383f7ca *man/gpc-new-generics.Rd 9daa96192eadb9b1f430ff76cf9b795f *man/gpc-polyfile.Rd 800ef0429558430406e3714c3ae4e9ba *man/labelpt.Rd c82cad6a4e8773da4efe2990fa7921ed *man/linref-gInterpolate.Rd e21ce36311ada4ed05e5b3a2327e2c38 *man/linref-gProject.Rd fef7af694fc71c476e43cc35f1f2fa5b *man/misc-gArea.Rd bca8722c3698cf15fb3fe0004a3b633f *man/misc-gDistance.Rd 9c8503de153718dcc77c6bd80a9e2b4b *man/misc-gLength.Rd ee480ccf057332c2024f55456afc1ee1 *man/misc-gNearestPoints.Rd ce5ce9f0e391809912a54812e96f3f89 *man/misc-over.Rd 03273d4e8ec82269218c3d1f3b377f32 *man/pred-binary-gContains.Rd 37700662cd67af8ae88f0870c0d41f3e *man/pred-binary-gCrosses.Rd fdb49a3cf3ccc518911e95ecaaf4a2f3 *man/pred-binary-gEquals.Rd 507ee97b47863b48cf74d48252cd4144 *man/pred-binary-gIntersects.Rd 8c47f97dceeaea08e290024c2e8bccad *man/pred-binary-gRelate.Rd 44672cd00f092a5d6ead274004b6ad01 *man/pred-binary-gTouches.Rd d56a8bd17039002543dbcc021de23189 *man/pred-unary-gIsEmpty.Rd 47f95df67ce2465ec0635518f9a5cc6a *man/pred-unary-gIsRing.Rd 14522b6206db0c56b0bb8f0e61af4fdb *man/pred-unary-gIsSimple.Rd 38a68cd3e2aca689b69c3a51622df5da *man/pred-unary-gIsValid.Rd 6681de4a4451ce7d5a360fc2e6e5a97d *man/rgeos-deprecated.Rd 27c39ed58f8f2c85524cc417beaf13a9 *man/topo-bin-gUnion.Rd b05955696472d44437c45f50812907f0 *man/topo-unary-gBoundary.Rd a16d91c0e3066d6f64c0483ac1aac007 *man/topo-unary-gCentroid.Rd cd002cddc0b770fe5ad98932de1d6594 *man/topo-unary-gConvexHull.Rd c6fd9ef439b505cc136986c2e59c1cb2 *man/topo-unary-gCoverageUnion.Rd 20b519a741812dae49dab7f360d64a10 *man/topo-unary-gDelaunayTriangulation.Rd f5f3ffc0ca63d1f3cff40f59d69ef3f6 *man/topo-unary-gEnvelope.Rd 66f189c4e3bfe3509e4f4e961285b375 *man/topo-unary-gMakeValid.Rd e9444a932fb336778a02f44f629f16b0 *man/topo-unary-gMaximumInscribedCircle.Rd 6eece00be25232ddbab7c4b8542f8a3b *man/topo-unary-gMinumumRotatedRectangle.Rd f0a13d81ff81d5ac827a757823251922 *man/topo-unary-gNode.Rd 8f3b6b63cea10321eb3c6e9f5bc275ac *man/topo-unary-gPointOnSurface.Rd af69c6b122c56ea7d908307f3a2bcd5f *man/topo-unary-gPolygonize.Rd c2e31026e6db37a1b5f2be893e472da8 *man/topo-unary-gSimplify.Rd d7fa8335aff1e066307bad016ea352d9 *man/utility-functions.Rd de5af6480fda8b0428352c7cdedd6511 *man/wkt-functions.Rd b9d869d125e18d6f05c1de7ff4e95d9b *src/Makevars.in 10cdb4bd3c340850a59fe10c68b02ada *src/Makevars.ucrt c7bdaccadaae5d1d53bf7c4cb686ea9e *src/Makevars.win d41d8cd98f00b204e9800998ecf8427e *src/dummy.cc 9aaa18c3df1b6da1e1226f067c3662f4 *src/init.c 22487056d51247176401a6afff9f3eba *src/local_stubs.c 7d0e500e585a4b3c908fcd3e253793e4 *src/rgeos.c 77659b7f1dd7969eaafea07e38ab8a85 *src/rgeos.h cc80cdeae8a3181099701493f9233900 *src/rgeos_R2geos.c 6b2a0f8e6f8c4f14fc70cf089df7bbb0 *src/rgeos_R2geosMP.c f75b33825e4ad8b1aa64d70d12fb25c4 *src/rgeos_bbox.c d18fd10d239554f033a75eeb505448f0 *src/rgeos_buffer.c 7f349f94594d3e3153f4c162fc4bf2e7 *src/rgeos_coord.c 991ebef38b98ff21653cfa7d65882cca *src/rgeos_geos2R.c e1f8c3ae2ba3e0f9f52a6e920d4fd7af *src/rgeos_linearref.c aedf7a4a37315a6fc8f50220832dfa45 *src/rgeos_misc.c 1478ac87d081be0b992b2784017ff38f *src/rgeos_poly2nb.c 40de178c41379510080af8da1e0c850f *src/rgeos_predicate_binary.c 4f39ba7f07b85f29216673dc7d9be3b6 *src/rgeos_predicate_unary.c 9cc2b9bfcba0a7870fcbba82494d2265 *src/rgeos_topology.c f36f8e611fa7650f16b7605501350379 *src/rgeos_topology_binary.c 95d0a09c70aacd9a2af8ceef7ded83f9 *src/rgeos_validate.c a61694b4d033ea023b4dc14762f05d86 *src/rgeos_wkt.c 2f71a3fd3908e077be2d96d4b447aca9 *tests/DP_simplify.R bf4ebf701ce2e7b7d58bc0a918bd2030 *tests/DP_simplify.Rout.save 0a35ef68a0533c8fdd016140b47b7df5 *tests/leak_by_exception.R 497e4751d32cfd5d73dd5baba49ded08 *tests/leak_by_exception.Rout.save 768a54afc9389fb1b01d6b3973e81f33 *tests/test-all.R f28048eb32f3fc4ffdbd2f750b31e535 *tests/testthat/process_testxml.R 627c975e214e2ff8ec9ff74a7c44a3a7 *tests/testthat/test-jts-xml.R 88dadbfcd6df147b04bcf31aadf296b2 *tests/testthat/test-linearref.R 0e6b0fbe13a633c1548795958619bc59 *tests/testthat/test-misc.R 9b8b49132a928c8740b881e6fa234a7f *tests/testthat/test-translate-empty.R 0d33f089065f673688e69f6218694e91 *tests/testthat/test-translate-lines.R a5c6cd10cf0e7cb89e42b9413ee7bcce *tests/testthat/test-translate-points.R 548ae3b9d90ab90bb13724329f394a52 *tests/testthat/test-translate-polygon-collection.R 41b87202851e0df48340e8c766ffa522 *tests/testthat/test-translate-polygons.R 76df903ce8957b59ede16b46f52bd6f2 *tests/testthat/test-translate-rings.R 85de271a5942086c0d7034b6f23cad16 *tests/testthat/testxml/general/TestBoundary.xml 238b99796c83b1368cbb468199e31586 *tests/testthat/testxml/general/TestCentroid.xml cf4b9d3cdbb673fbe2338b5f1f08231a *tests/testthat/testxml/general/TestConvexHull-big.xml 02314549a1ccd691b89e6fa62cd2ecec *tests/testthat/testxml/general/TestConvexHull.xml 4bff009ae3404c63e8fd262960299a2a *tests/testthat/testxml/general/TestFunctionAA.xml fc4b823964feb08db0c3f3fbfa397a7f *tests/testthat/testxml/general/TestFunctionAAPrec.xml 9d1fee1dade6345657310f94201aeca5 *tests/testthat/testxml/general/TestFunctionLA.xml fcf1ea9981b5a15323ef594699cd24d8 *tests/testthat/testxml/general/TestFunctionLAPrec.xml 0316c1549d55821ceabf96b8c3c5d21b *tests/testthat/testxml/general/TestFunctionLL.xml d29df13935ad3d08782a08f4d74590f1 *tests/testthat/testxml/general/TestFunctionLLPrec.xml 017d6a56564624f2c6ae7ff7f67e4a62 *tests/testthat/testxml/general/TestFunctionPA.xml 88675d6c34cd0ed50981021bbf986f56 *tests/testthat/testxml/general/TestFunctionPL.xml 954b5cd834d99cf4bd3a1a56f77adb70 *tests/testthat/testxml/general/TestFunctionPLPrec.xml b9a7204b5c8925a895480c96306c27de *tests/testthat/testxml/general/TestFunctionPP.xml ef7ad411abb64482f9f9467ab34d1b83 *tests/testthat/testxml/general/TestInteriorPoint.xml d020d400dacc83946be4071b321e2fa1 *tests/testthat/testxml/general/TestRectanglePredicate.xml a603cc5dbc0e476fb7e6ed575f3137e1 *tests/testthat/testxml/general/TestRelateAA.xml 9c57906c31a570e3d65b58dd434911f0 *tests/testthat/testxml/general/TestRelateAC.xml 65adcdc2f9d1e43f1ba6e28b3100a78c *tests/testthat/testxml/general/TestRelateLA.xml b2426811cd8c4a40d9f4da62fada1432 *tests/testthat/testxml/general/TestRelateLC.xml d6483169d875c21525f88efb291b16e0 *tests/testthat/testxml/general/TestRelateLL.xml 36ed9c771ed716c6d0a7547aff2f3241 *tests/testthat/testxml/general/TestRelatePA.xml 1cdf6c7444d42166f644b33a72a0929b *tests/testthat/testxml/general/TestRelatePL.xml 1614e7b3f3ccc50478275386020143ab *tests/testthat/testxml/general/TestRelatePP.xml 564c51181acf2209e65ac509ae33bd0e *tests/testthat/testxml/general/TestSimple.xml 20056f0fff77fd490ff2a6bb81fe4421 *tests/testthat/testxml/general/TestValid.xml 1edf2d54da09378a6a9df5a2bca07d2f *tests/testthat/testxml/general/TestValid2-big.xml b68bd7415bf831369786ca812f35020d *tests/testthat/testxml/general/TestValid2.xml 770eae0ddc4c31f021359ba1c9887b81 *tests/testthat/testxml/general/TestWithinDistance.xml a96a20073ad6eca7ec9ccfbadec4b8bf *tests/testthat/testxml/robust/ExternalRobustness.xml 1c39406b7e17335b496cb06ca20f0398 *tests/testthat/testxml/robust/TestRobustOverlayFixed.xml d50e2e9f8163c89143e9fd4a3856a8b5 *tests/testthat/testxml/robust/TestRobustOverlayFloat.xml 9e3f6bb752ee37cc4ea561d5f519f384 *tests/testthat/testxml/robust/TestRobustRelate.xml 85eaa6d70a318f5dece551e805d27f8c *tests/testthat/testxml/validate/TestRelateAA-big.xml 689cdc9247e6ca08b361c614f7e17bd3 *tests/testthat/testxml/validate/TestRelateAA.xml 2a641ec237a50d71301b8c9725b7b78b *tests/testthat/testxml/validate/TestRelateAC.xml 49bbed72ecbcb20451fe85286dbfdcf4 *tests/testthat/testxml/validate/TestRelateLA.xml 99cf031e60310453135aff8e9fcc8f9e *tests/testthat/testxml/validate/TestRelateLC.xml 9cc1637172535f5e6b1e51c1ab949b9c *tests/testthat/testxml/validate/TestRelateLL.xml b9f04df2e44980fc3fab61abef5a1ad3 *tests/testthat/testxml/validate/TestRelatePA.xml ec950a450f3334e687d31c54394d9721 *tests/testthat/testxml/validate/TestRelatePL.xml 6acf466871a08776af9e3fde8b2b7998 *tests/testthat/testxml/validate/TestRelatePP.xml 0030a0d3f2d4932a6fc787d1dd31c10c *tools/winlibs.R rgeos/inst/0000755000176200001440000000000014433362250012350 5ustar liggesusersrgeos/inst/test_cases/0000755000176200001440000000000014025150745014506 5ustar liggesusersrgeos/inst/test_cases/OverlayNG_test_a.rds0000644000176200001440000004176014025150745020435 0ustar liggesusers7zXZi"6!t/MC],|,'([.|i3'(MLn3;{gf=FSaٓ{QH8ö8ϸ%%5_Jk)(`4sh(3j\35`әZD68S <8ozkqke,p"r!I>Vf%$^[/3X ;OsJZ 0kݎ|=z,oY[))=B]>q|N$nsRnd`YDd>ztc TIvYH/L ڢ%'w%@QJPZezj҇8x` %"S/a4W@3 -H2phtc<nԣ2U(&̦@];x02s4;p=Bӯ]7`6rj %H];7@@gp2p`8> sHDMc5Kxb~i/:`C DFb(Ie!(𡡦/f^1c CkPA@4 Bz yxb[ZUf TEY\[tgQs-5:_1& Mh' Xs87[k0&)#Qnh+$-5@kLyz9l#5냪 kϖfbqM&ِVjZ[rء=mצ#{f: (P֌n뫆 c}tH"?X˱JsȘmqOBJR@7kتU~7B"]IN)P'o3z-׊YicLOrS:1-^FМQ _I^C%MeG<)! &dTQ9-lȎ뉫W-b?.BnƢ }]d&#4oS{ 2r] "$XN<\<@umkI-S}n2ǦjR_B>|qi HӀyVK05ׯA=g|cfnO?gX>Z4{V f ]~ޜS<͟ ΐw~q݋H^dPszfL1qٛP V{_4<8N0:N< V#W=D LA*47%gUYf+0[d ,SV_mtn5'/=s)2 9t_t$ 6^{xeWT"L,^ kMdFA˙edT}򁺡2Xa nd|cX0 D/7}F̉TСsg 7$b1z^QYt_}&HӾE$rOɷIcX&Όϡ2w(nr,Lk/nFݜ\7=}xmxwǧ|grWHNQ9d  {BA47+y?ԇ-.vy -W?R2F,H9JMI?|c 6-td%L9$@~K"QArH)U~g,MaA׫{jd"tŎ+6'8rԐ3ȧκʊ~CH@b}Ќ%vAKYB/ܓV#+|h -S!?S:¾$tuc .Fm!I)_-gKỊ$ɂw? DŽM;kr?2mJJ6Hmi ~jkR]*ScEq˞)Duu^xH]»(Td0_Bj;SəG׺RH"en!՛|Q pC_.~6U{gR "LOpۃP\=ӧ QR$EEmV^Z_hc/o6O`͵ʭxq`Ʋs~PB4\M 83c5ßf!<fH~-ӎ"ȒB~9ZN\HXr9ѿ[4 GH,#VZ8b\1\J}\M5w)~g|d![aG,?$7E ;ZcWɭ^8wn=բB#x_T 'ClLɢX1ȑX쑚|ӵw^qtf]v\8@ u@5IZٽtSgb@UW&YuٝHMԄ•+] ]*q F^Ƕ6 W[`(t`KM 1F815îO3U f7rc™& :n "\[ƃBثew&h?R#.M4C}P/do/9E_";1#74 KJG㭏 -;?'h5?(bkG6Ƨaz`S/7_,)qf쓍G TU)kF=1~8C 4hg)7PG×]ي qUsw!ntt0ycksO> k(_Vs@Y}`z^%T&רʺ=>rAlRU epѬ !`rYBOk^7/ΐenq_q\QIk@qA>f- Wd1l-']j\(I#/ǩ }jAbIBDUrS`|b/E։7:\ g ꑦoGkBHvw-`izA{k:a5e`nWhB<^8|^6'oRsJ`({P&z-K^ $ Sח@K\Èn-lcrai݌:;n#ǰ31Pk3.KHú"&< \3QF=Tu. rpTt Q* iKQ'>Cw#mAgh7]&]XOOJa=jk%ԛE A$e?"I _"Q&$Ti})ٌ9jtuA&A$'X 5HǶ_bUBhGvPgIVLQܶ"UbzU&OT3cm풾#g -;QG87 Y&˔~?:dXƝ?M6o8xWKӿ%_Lf +[k8\g%T›vي'0I1S3!Lˆ+yN)(-r5aߥ^I=(݅LYq:)1+guTHCo_>G,"|#R0gL{i!c0߹Y&W;.3"CmL`.czU'Ut!]wY <&Qjr|/h4)>f-3|<4 HHY_f@*S/&~+n&-E훂8rOL4Ԍi DD3&xop5*,dĶH$C]aR3?Ľl%aݏ-RA x@3=URU'<.A@o]Wff(_7u^)|Ag5x׼k|oBe6rN;-M}x8cF3B+#|!6}4 ͫKtwr|y} 1L[EArKl N2(=S;)hh>sW-W)[¿ H2ex AW(v<IڎqmOl ^? _Y]JҖbH3#Sd@,$} &B;jϔB8!/H2<)Ng;J[X;!VmqWoiJ#"~@> ~SI|Z3<93JG{5¾;27LtOLI"} cPKUu@R͗]]bO)z7N2~k\17V[} ϗ)I3#>HέED%'XE:I$,RJkPOڏUр͎lݷa7ێBL:uxvwq7p򚘖OVh^7jmxw9v?ݵXҠS@#1@kYu鵺ZNuo?.?+q><,^#oo~S#ڽ g0BR?yC󅡏<46# AA䥮ڷ=ٲ<'GmM$d^ʈ7XR/D0OٗsXf3w0W!ho&Eh@tCiO۾ Gq2A6 )`2hL }/zF ro{2wމa2Cn;"GIn8LE#'q6~Bմ >ZОv@^G%iM2i,0z$tҵϴ4ѥ },cV!CV xlbOeS=/NǫB{_u$BJCi&]!{/BuJW 8Zr9q̢nJ$¡ws_`/>[Fx܀@tWV5Ȋg6Q]:ggi*^,[Udg\M>@Ky?.+MEp\S#rݏK{MN`zՇNwaQ]B.&xXs,kSp7 |n @;HVl8uKJ%8o3l̓k$N:XAr8st2(dfpCADIzHhzOLҹje| <9Jzd(aZꅲ ôqUXJ 78;E(@% #wgVaS"b[02-Xg)LbϟI2'^&pm /s"w8" K։UԖb_x&;kv~U3tuKʾJه~8 滬գIn<ݴ˂5Ktjfw)*\j3vZ;nFnubrg=w礟~e}'H禋݌z0#2|=cQVub->ըyAp#2Чy=A(-zh5)o3,.ۃu~ ?łKߘMbt(e';g#va}yC>WP"~زǴIK4:h?^|-I-u$U, ";q H H"DFHvޤZ`Baz*aNXJ(rZ=uv>q8k58h{ۣ[xch G7م۴ub2TSĬ댐Gv$TrR=!`D>:%QcexLۥc.tp8]B0yXL*=VKᙶNN/BЩ#&N 73V 9.Ss}u[;44Uy=TL.9s+vi#~5<;$ 1a%9fH5JT"Mh~ M cS. ! PW~)o>Ucbb"u (>Kķ - Ln/ڏ˭O-xsu*T%G?-w nsLjy?[`Pơ$kfPR W߱y˭(+ UbW* ;m}6Ki1NZD9{=fYb guj-eD3ssN`.J$rJuUv _NV (uR8s.sW;Hj&jDUy,\" Ή;FR& YF0))Wĺ=pyIegleo UbNd_{JMo3 Q&ELLVQ$V摟PhPΫ#m  ?96Mσ EZ#XNڛZ#'*żEɳ)J=!E,3oDBƅpphf%{$0NEjOKa%3"NZBۣz.4J菾m4Cd%?0Sί Qڜr[_-ѕBJ\C1߫BF'Ӥ}?:Jl)W0s5B:"3v{q9RA =%ݴQ4Z"C<9~IG-Ӱζ:>`sLJ0Ӛ&`j`'t.? Dj֡TH>T_>\e!͍AsviN%"m6b1Z]Xнh46$Nـ>y+ѻSfC}*BH Ka׹6d.*'o2`_ƓQEm'd'a]0':nn2G<J%xP)f-rijw=GILWav_}(Gg5I52a!dJ;΢t',̭]:bMk3JzzXP=ѠuHH? CFНeoX֓=<ME ïfSZSڋ4j䲽ǔ1sPYf*,&B죝i͝$hɳ\+`B\fɌ +{ ~x_EjS+v-rXoZC [ <Ԛyg#qr4W ^fjœ׌z ۄzd?Qg}҇Ӻ((V܍r\d&8zYPTRzad6P@X )_wщ=xrve|=dL"H! (@IAƑݮV^U`?ds_7`8g"2nuD FYcQ}#Ti%LGhU +4Yvg#Os@+l0 ק='\ M _)^=;LRkov$ |^tjbRlܼE|焚mV o?.]"I~_zm0x&OgXOMN> #Rh6 밚_}n`: b@ÝbxF|pmED30Z m"Ԙe`'YFEݢDJTqch$2=yJ0/s tC xf$ˢYBke}(߄OJ{g \0~4a"O|x W` Ω|>(ܺ LD %#$އhtLaF_Z<8+ot=M*JFdI,`*HZY6:_*ئayHY?)дXT# iZi62×$N,~zU@>GݤI~t~JCt;_͜4C4Nv6\QcЛhˉ3h\uNG7La#LSedo)}X,(΄F ֝j*fFiMtG;C@Rot18Gt1mLy͐ n%lW'r.R&0uvQzvՌhZd;y5Y1QgmgJheM8 5JZ@,FHsn Jp!S([WϽtBz%%([tcZ|~S+o Z%NLlm.bI\h>rO~ᑹ^M>ښQ.ʣN1 Nɡ8%9@d~hVr2JBF徤|1(؎0QO}ka XWtr؊FӯrULpq]N՚Q8Rmh1w@ABMq dH('#K8z2\<^Ylyv("W7ewVRuwxjR1|_';nLw3pZMTP_s<[*o1I5Vw>L-y_w{C|g2jl2@f/1DgphM~Bf=fSP7:̕zGX]~/H7pٿ㻲UF&N#7% E}l忰 9-@@[S зQ_2B0u~;]¼d4k@fӔoZ0x CQ!hcE[j ) u0eRcDr)4΍712JG V;++lqL8Aal~ SW5VƟ,v2k.p,Y eֻuuIDn,'r^: j~d"@௴aMz.R5[0kM RyX<(/fiQ/ 3)i9@^FJ\/os d! SqO޿ )6SbvJvVu % L$7C Xn^+ F+p#&jDj'y]AČΫnȃwcoD1K5 T: .>] !hB9˛z*͵)"{ &[KlqXm%ek6Jy<5!4Z(baԜۄ 0oF +I<}Eg s$wn@%ЖPiF<Ќ,`!3: @/bśNn|MX&*xΎcӨedvr=Ԃu23X'm;l?d-KT:xk"fS?lhy%΁6 q^!oŹCyJSgdjH\Syvdڹ-?8X7(/O7tXȞ*W}lie*RxK*C.4+HTwiei~!M_LB޴3;W: _@&ef@ ,#d}SaT5ȽO 3 Pzꛯܺc iЄ^\gIzPAS\e?.D(I l7̫(q7\ NW'u6pIiR4NG_DHI)(Z \wp ~DSf&P%J^سS>`.GRX695Ѳ".ꗞ&gf"2 ,M$ ?`jGܖ[zY]lRQ:t9&}oJbKUP yJnPiGP=1T 8y4[K0k: x\_qIF.VK%E.*2&<(y\":g&Y`ih&F/ ,,R= -Odv0kHZ$RuJlE3D.ͭ qYDsΡYC O Bg`̞zFBķnLI,9ÿ6;Crpk_7V9n gaZ,JK;A ]qmjLȈ5<j :Zކ%rsB^֪Vkn`O/r^>Π3Ʉmxsľ+.[LKC+{׆?ς0K&׉{bʽE#ꂕYfVAO4&"k NYe͇^ (Ӳ=K03B~jX&90xRf'#lK5gxߴAvx87f 6=֑sv]i[vc3O\kێ2\6j* _D$(zApoN\XET^ξW뙣|e=+p!Uh4^>{>2T-[qex5U"[ھ;7U"ܟbpz~dxa%N~^)5h L@il.7i>@ZԨ án LH9e1uhu=spbIǽ51z`"&BԇJzj^亮1{TAIK9%]M+ڮ>_J^]k3#E_",c@= 5u9?2f`۾|Q.4WSkt?Crcz<DpRVxkeozC9YGDh]y:.UMa[GaUfty f\1HΰBw6ԯh>POS'uyn(@$i87 A㐧Pc͕n&S&7OwMYbΙ+.겋4%u.LK<w)vk\ڀg󄘊v5~Q')F@S-ٔXQ+3rkK”Q̈ T7T$wk8Aiuu Ü?DQ*K e׮:1@ۄӓǪB셆w3׆їo2OqVPoJć#Wʹ *3k"ѵ\?@7'u4?=IE ]@qd,p(T2m={X ^:JE,4ST~ёHЗ KvMz0uqzŭvrV3}9 UCo0H/#B\xTřS߸0q_A`TCXn C` >UƸW 2T>A⇣07NKe-4(vXJ׃V@t+7av毒:`߉MVopشj9<ZL؋v}Ä7BӴԩ!Mc4{|𘶁.p }=ݠ݄,T.k?h,}cN!Z=k35Knr r6U닶ߨ\brܹ$p`6ĒMԳZԦF>u}P. W*O:aT8PCRE#CF9H7}@ 'HG({^M~x,K _ E g5p@qԶSw L:b.F~h`/:ߠϑ!$K1N'R kbX-x$iqka+-VJc@oaڤ(g VkZ/ØpH(x9bCG0?q^~Ex}^3=͠d #3)75`;J1wɇfr>0 YZrgeos/inst/test_cases/OverlayNG_test_c.rds0000644000176200001440000000013114025150745020422 0ustar liggesusersb```b`a`f`b2AS KZkNd_(}&Gۯ*d_˰+oLFrgeos/inst/test_cases/polys.RData0000644000176200001440000000437114025150745016576 0ustar liggesusersY TWHxર>ЄW؈cu Ⱥ$ג hv TeϮ_ۣ*VĮCujhHz`!s'!3.*rwg#ܖ1  ,6Xp5#`*235\$XIm[(o~fז-UIXs.\8Yw5UAa礌^<Wu)ٟHU?}J)bVd28DKr>Xh  xm0& 3[,al"9N&H1Z5!rkq*5W2w7@x>A 3GpdiT*Zogْv0Yg;OaPGjjX{KJe/67DUIYqc<pt.O8X_\\,.w=piq˭0I'*aа0Iaa@o'yܬ[Ilz)֕Y_FwV47 觸wm kn49Ȃ5! ;YŘTW:7RV`Ǜ%fIpTNL$Ol)o]DzS!<."h3c"m9`ݝ|2џMU DR^ة-.TkXLJqkeЯnO {?Us>+;wO۵wõ쉠I -7^?m$t2&2n2+ru{uI=-SE+]^ȿۇü#\iXB(+>4Rػ'`Tގ3!bQ]6/]yցcUIn58sNA@ZߙUAX7s?W\o^"{*qTdJ@w/ES۵vdaW(úA m`gN!H!'zRӶL˘T:S#5AY8ީw2ә~qd 5VrQIqVP+|"wԙpc@:Ms'fl(Qd²P?4ss-bG^ɟvsG8pnkg^:(Io%mb.v=ɯ5%t`ȕKt y<2Hm "n*?I.mEвecзIIFg$!=DK劬u3}P4$$Y^G^ER9LQ< ԗ/g˸QJJtC?4Hhg%qJB&dt )-hH}QZWӿ ieW}G9\Fz+:TO3}Nc#&GYMhj_yYNՃL>jY4ѧ8q淣?ȒEGzBD{2@u$b-#zBZڏ݃[*͢"F^qc8qlq)Z\?e ^fZ)Bt"65xA^FTP1=l8dlb?1=ZO0&+= 3.9.0 2021-04-27 07:39 rsbivand * [r668] inst/wkts/nc34.wkt, tests/DP_simplify.R, tests/DP_simplify.Rout.save: revert after GEOS DP regression fixed 2021-04-27 07:38 rsbivand * [r667] NEWS.md, R/rgeos_topology.R, man/topo-unary-gSimplify.Rd: revert after GEOS DP regression fixed 2021-04-25 16:58 rsbivand * [r665] NEWS.md: gSimplify() use topologyPreserving by defaulr >= 3.10 2021-04-25 16:55 rsbivand * [r664] R/rgeos_topology.R, man/topo-unary-gSimplify.Rd: gSimplify() use topologyPreserving by defaulr >= 3.10 2021-04-24 13:51 rsbivand * [r662] NEWS.md, man/topo-unary-gMakeValid.Rd: use make valid name changes 2021-04-24 13:30 rsbivand * [r661] NEWS.md, man/topo-unary-gMakeValid.Rd: use make valid name changes 2021-04-24 13:22 rsbivand * [r659] R/rgeos_topology.R, man/topo-unary-gMakeValid.Rd, src/rgeos_topology.c: use make valid name changes 2021-04-23 13:02 rsbivand * [r657] man/topo-unary-gMakeValid.Rd: update for www9 2021-04-23 12:24 rsbivand * [r655] R/rgeos_topology.R, man/topo-unary-gMakeValid.Rd: add keep collapsed env-var 2021-04-23 09:48 rsbivand * [r653] NEWS.md, R/rgeos_topology.R, configure, man/topo-unary-gMakeValid.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c: add MakeValidWithParams update 2021-04-21 15:47 rsbivand * [r652] DESCRIPTION, NEWS.md, R/AAA.R, configure, configure.ac: adapt for GEOS 3.10.0 version number 2021-02-16 10:09 rsbivand * [r651] R/rgeos_util.R: fix mistake in OverlayNG detection 2021-02-09 09:18 rsbivand * [r650] NEWS.md, man/topo-unary-gMaximumInscribedCircle.Rd, man/topo-unary-gMinumumRotatedRectangle.Rd: tidy 2021-02-09 09:03 rsbivand * [r649] ChangeLog, inst/ChangeLog: tidy 2021-02-09 09:03 rsbivand * [r648] NAMESPACE, NEWS.md, R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_R2geosMP.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_linearref.c, src/rgeos_poly2nb.c, src/rgeos_topology.c, src/rgeos_topology_binary.c, src/rgeos_wkt.c: adapt for GEOS 3.9.0 2021-01-30 13:22 rsbivand * [r647] NEWS.md: tidy 2021-01-30 13:21 rsbivand * [r646] ChangeLog, DESCRIPTION, NEWS.md, inst/ChangeLog, src/Makevars.win: update Windows static GEOS to 3.9.0 2020-12-10 10:17 rsbivand * [r645] DESCRIPTION, R/rgeos_util.R, inst/test_cases/OverlayNG_test_c.rds: GEOS 3.9.0 beta2 2020-10-20 10:56 rsbivand * [r644] ChangeLog, inst/ChangeLog: tidy 2020-10-20 09:54 rsbivand * [r643] R/AAA.R, R/rgeos_util.R, inst/test_cases/OverlayNG_test_a.rds, inst/test_cases/OverlayNG_test_b.rds, src/rgeos_geos2R.c: add test for OverlayNG 2020-10-08 14:01 rsbivand * [r642] ChangeLog, inst/ChangeLog: tidy 2020-10-08 14:00 rsbivand * [r641] DESCRIPTION, configure, tests/leak_by_exception.Rout.save: tidy 2020-09-02 08:50 rsbivand * [r640] man/topo-unary-gCoverageUnion.Rd: tidy 2020-09-01 12:39 rsbivand * [r639] ChangeLog, inst/ChangeLog: tidy 2020-09-01 12:38 rsbivand * [r638] man/labelpt.Rd, man/misc-gDistance.Rd, man/topo-unary-gDelaunayTriangulation.Rd, man/topo-unary-gSimplify.Rd, man/wkt-functions.Rd: tidy 2020-09-01 11:38 rsbivand * [r637] DESCRIPTION, configure, configure.ac: add stdlib.h declaration to configure.ac where missing 2020-08-06 09:57 rsbivand * [r636] DESCRIPTION, NAMESPACE, R/rgeos_topology.R, configure, src/init.c, src/rgeos.h, src/rgeos_topology.c: add CoverageUnion 2020-05-08 13:18 rsbivand * [r634] ChangeLog, inst/ChangeLog: tidy 2020-05-08 13:17 rsbivand * [r633] DESCRIPTION: tidy 2020-05-08 13:04 rsbivand * [r632] ChangeLog, inst/ChangeLog: tidy 2020-05-08 13:03 rsbivand * [r631] src/Makevars.win, tools/winlibs.R: shift Windows binary to GEOS 3.8 2020-05-08 12:44 rsbivand * [r630] inst/ChangeLog: tidy 2020-05-08 12:44 rsbivand * [r629] ChangeLog: tidy 2020-05-08 12:43 rsbivand * [r628] man/topo-unary-gMakeValid.Rd: add gMakeValid for GEOS >= 3.8.0 2020-05-08 12:17 rsbivand * [r627] ChangeLog, inst/ChangeLog, man/topo-unary-gMakeValid.Rd: tidy 2020-05-08 12:13 rsbivand * [r626] DESCRIPTION, NAMESPACE, R/rgeos_linearref.R, R/rgeos_topology.R, configure, man/linref-gInterpolate.Rd, man/linref-gProject.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c, tests/leak_by_exception.Rout.save: add gMakeValid for GEOS >= 3.8.0 2020-03-28 10:46 rsbivand * [r625] ChangeLog, inst/ChangeLog: tidy 2019-11-13 08:04 rsbivand * [r623] DESCRIPTION, man/comment-functions.Rd: add page number to comment help page 2019-10-03 07:49 rsbivand * [r621] configure, configure.ac: tidy 2019-10-03 07:39 rsbivand * [r620] DESCRIPTION: tidy 2019-10-02 10:42 rsbivand * [r619] ChangeLog, inst/ChangeLog: tidy 2019-10-02 10:41 rsbivand * [r618] DESCRIPTION: tidy 2019-09-03 11:41 rsbivand * [r617] configure, configure.ac: remove R CMD config CPP 2019-08-16 09:49 rsbivand * [r616] DESCRIPTION, R/rgeos_predicate_binary.R, man/pred-binary-gIntersects.Rd: bug in dense binary predicate matrix row names 2019-08-05 08:42 rsbivand * [r614] ChangeLog, inst/ChangeLog: tidy 2019-08-05 08:21 rsbivand * [r613] DESCRIPTION: tidy 2019-08-05 07:47 rsbivand * [r612] ChangeLog, inst/ChangeLog: tidy 2019-08-05 07:35 rsbivand * [r610] ChangeLog, inst/ChangeLog: tidy 2019-08-05 07:34 rsbivand * [r609] DESCRIPTION: tidy 2019-08-05 06:55 rsbivand * [r608] ChangeLog, inst/ChangeLog: tidy 2019-08-05 06:55 rsbivand * [r607] man/topo-bin-gUnion.Rd: tidy 2019-08-04 15:37 rsbivand * [r606] ChangeLog, inst/ChangeLog: changing checkValidity for GEOS > 3.7.1 2019-08-04 15:35 rsbivand * [r605] tests/leak_by_exception.Rout.save: changing checkValidity for GEOS > 3.7.1 2019-08-04 14:55 rsbivand * [r604] R/rgeos_topology.R, R/rgeos_topology_binary.R, src/rgeos_R2geos.c: changing checkValidity for GEOS > 3.7.1 2019-08-03 16:06 rsbivand * [r603] R/rgeos_topology.R, man/topo-bin-gIntersection.Rd, man/topo-bin-gUnion.Rd, man/utility-functions.Rd: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:37 rsbivand * [r602] R/rgeos_topology_binary.R: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:28 rsbivand * [r601] R/rgeos_topology_binary.R: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:18 rsbivand * [r600] NAMESPACE, man/utility-functions.Rd: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:02 rsbivand * [r599] configure: changing checkValidity for GEOS > 3.7.1 2019-08-03 15:01 rsbivand * [r598] ChangeLog, inst/ChangeLog: changing checkValidity for GEOS > 3.7.1 2019-08-03 14:59 rsbivand * [r597] DESCRIPTION, R/AAA.R, R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/utility-functions.Rd, tests/leak_by_exception.Rout.save: changing checkValidity for GEOS > 3.7.1 2019-07-31 18:28 rsbivand * [r596] DESCRIPTION: add pkgdown link 2019-04-24 09:17 rsbivand * [r595] ChangeLog, inst/ChangeLog: tidy 2019-04-24 09:16 rsbivand * [r594] man/misc-gBuffer.Rd: tidy 2019-04-24 09:09 rsbivand * [r593] DESCRIPTION, man/bbox2SP.Rd, man/bbox2SP.rd: tidy 2019-04-23 13:15 rsbivand * [r592] .Rbuildignore, DESCRIPTION, _pkgdown.yml, man/bbox2SP.rd, man/linref-gInterpolate.Rd, man/linref-gProject.Rd, man/misc-gBuffer.Rd, man/misc-gNearestPoints.Rd, man/pred-unary-gIsValid.Rd: start pkgdown 2019-04-23 12:12 rsbivand * [r591] ChangeLog, inst/ChangeLog: tidy 2019-04-23 12:11 rsbivand * [r590] DESCRIPTION, R/rgeos_buffer.R: tidy 2019-03-06 15:02 rsbivand * [r589] src/Makevars.win, tools/winlibs.R: update Makevars.win and winlibs.R 2018-12-21 12:35 rsbivand * [r588] DESCRIPTION, configure, configure.ac: guard against invalid versions 2018-12-15 12:36 rsbivand * [r587] ChangeLog, inst/ChangeLog: tidy 2018-12-15 12:36 rsbivand * [r586] configure: tidy 2018-12-15 00:30 edzer * [r585] configure, configure.ac: configure stuff for OSX 2018-12-15 00:04 edzer * [r584] configure, configure.ac: try with static libs 2018-12-13 11:18 rsbivand * [r583] ChangeLog, inst/ChangeLog: tidy 2018-12-13 11:17 rsbivand * [r582] DESCRIPTION, configure, configure.ac: ubuntu mess - changes in ./configure 2018-11-07 13:31 rsbivand * [r581] ChangeLog, inst/ChangeLog: tidy 2018-10-22 07:10 rsbivand * [r580] DESCRIPTION, configure, configure.ac: Debian stretch GEOS version configure issue 2018-10-18 11:38 rsbivand * [r579] man/utility-functions.Rd: tidy 2018-10-18 11:34 rsbivand * [r578] DESCRIPTION: tidy 2018-10-18 11:30 rsbivand * [r577] ChangeLog, inst/ChangeLog: tidy 2018-09-13 11:00 rsbivand * [r576] R/AAA.R, src/init.c, src/rgeos.c, src/rgeos.h: attempted version check 2018-09-12 18:16 rsbivand * [r575] src/rgeos.c, src/rgeos_R2geos.c: tidy after -Wall 2018-09-12 08:49 rsbivand * [r574] configure, configure.ac: switch geos-config to cclibs from libs 2018-08-30 15:48 rsbivand * [r573] DESCRIPTION, configure, configure.ac, src/rgeos.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c, src/rgeos_topology.c, src/rgeos_topology_binary.c, tests/leak_by_exception.R, tests/leak_by_exception.Rout.save: testing leaks by exceptions 2018-06-08 06:48 rsbivand * [r572] ChangeLog, inst/ChangeLog: tidy 2018-06-08 06:47 rsbivand * [r571] ChangeLog, configure: tidy 2018-06-03 21:05 rsbivand * [r570] DESCRIPTION, src/rgeos.c, src/rgeos_geos2R.c: rchk fixes, mostly MAKE_CLASS 2018-06-01 11:39 rsbivand * [r569] ChangeLog, inst/ChangeLog: tidy 2018-06-01 11:38 rsbivand * [r568] DESCRIPTION, LICENSE.note: add LICENSE.note 2018-05-29 18:13 rsbivand * [r567] DESCRIPTION: tidy 2018-05-29 17:40 rsbivand * [r566] NAMESPACE, R/bbox2SP.R: tidy 2018-05-28 12:14 rsbivand * [r565] src/rgeos.c, src/rgeos_validate.c: trying to fix rchk and valgrind issues 2018-05-21 17:57 rsbivand * [r564] R/bbox2SP.R, man/bbox2SP.rd: corrected bbox2SP 2018-04-27 12:36 rsbivand * [r563] DESCRIPTION, NAMESPACE, R/bbox2SP.R, man/bbox2SP.rd: add bbox2SP 2018-04-08 13:34 rsbivand * [r562] DESCRIPTION, configure: gcc 8 correction 2018-04-07 21:25 edzer * [r561] src/rgeos.c: see https://github.com/r-spatial/sf/issues/694 2017-10-30 12:01 rsbivand * [r560] configure: tidy 2017-10-30 12:00 rsbivand * [r559] DESCRIPTION: tidy 2017-10-24 13:42 rsbivand * [r558] man/utility-functions.Rd: tidy 2017-10-23 18:57 rsbivand * [r557] DESCRIPTION, NAMESPACE, R/AAA.R: add extSoftVersion 2017-09-25 10:53 rsbivand * [r556] ChangeLog, inst/ChangeLog: tidy 2017-09-25 10:51 rsbivand * [r555] configure: updating for stricter autoconf 2017-09-25 10:50 rsbivand * [r554] DESCRIPTION: updating for stricter autoconf 2017-09-25 10:49 rsbivand * [r553] configure, configure.ac: updating for stricter autoconf 2017-09-25 10:46 rsbivand * [r552] configure, configure.ac: updating for stricter autoconf 2017-09-18 08:59 rsbivand * [r551] DESCRIPTION: tidy 2017-09-18 08:27 rsbivand * [r550] ChangeLog, configure, inst/ChangeLog: tidy 2017-09-18 08:26 rsbivand * [r549] DESCRIPTION, tools, tools/winlibs.R: transition to winlibs 2017-09-15 13:09 rsbivand * [r548] DESCRIPTION, src/Makevars.win: migrate to winlib/gdal 2017-04-05 12:05 rsbivand * [r547] ChangeLog, inst/ChangeLog: tidy 2017-04-05 12:04 rsbivand * [r546] configure: tidy 2017-04-05 12:03 rsbivand * [r545] DESCRIPTION, src/rgeos.c, src/rgeos_validate.c: PROTECT issues 2017-01-08 19:11 rsbivand * [r544] ChangeLog, inst/ChangeLog: tidy 2016-12-10 10:02 rsbivand * [r543] configure: omitted trap in init.c 2016-12-10 10:00 rsbivand * [r542] DESCRIPTION, src/init.c: omitted trap in init.c 2016-10-19 11:45 rsbivand * [r541] ChangeLog, inst/ChangeLog: tidy 2016-10-11 03:24 rsbivand * [r540] ChangeLog, R/rgeos_misc.R, man/misc-gNearestPoints.Rd, src/rgeos.h, src/rgeos_misc.c: checking NearestPoint dependency on >= 3.4 2016-10-10 07:28 rcs * [r539] ChangeLog, DESCRIPTION, NAMESPACE, R/rgeos_misc.R, configure, inst/ChangeLog, man/misc-gNearestPoints.Rd, src/init.c, src/rgeos.h, src/rgeos_misc.c, tests/testthat/test-misc.R: add gNearestPoints 2016-10-08 08:14 rcs * [r538] tests/testthat/test-linearref.R: fix linearref tests 2016-10-07 21:53 rcs * [r537] tests/testthat/test-linearref.R: fix linearref tests 2016-09-14 11:18 rcs * [r536] R/rgeos_spExtensions_Methods.R, R/rgeos_topology.R: fix partial argument match 2016-09-07 13:10 rsbivand * [r535] ChangeLog, inst/ChangeLog: tidy 2016-09-07 13:09 rsbivand * [r534] src/rgeos_predicate_binary.c: block list output from gRelate 2016-09-07 10:03 rsbivand * [r533] inst/ChangeLog: tidy 2016-09-07 09:50 rcs * [r532] ChangeLog, man/topo-unary-gEnvelope.Rd: fix typo 2016-09-07 09:48 rcs * [r531] ChangeLog, src/rgeos_geos2R.c: fix stack imbalance in rgeos_geosring2SpatialRings() 2016-09-06 13:13 rcs * [r530] ChangeLog, R/rgeos_linearref.R, man/linref-gProject.Rd, src/rgeos_linearref.c: update Rd; fix typo 2016-09-06 11:41 rsbivand * [r529] ChangeLog, inst/ChangeLog: tidy 2016-09-06 11:40 rsbivand * [r528] configure: tidy 2016-09-06 11:38 rsbivand * [r527] inst/tests, tests/test-all.R, tests/testthat: moved tests folder 2016-09-06 10:50 rcs * [r526] ChangeLog, DESCRIPTION, NAMESPACE, R/rgeos_linearref.R, inst/tests/test-linearref.R, man/linref-gInterpolate.Rd, man/linref-gProject.Rd, src/init.c, src/rgeos.h, src/rgeos_linearref.c: added linear referencing functions (gInterpolate/gProject) 2016-08-30 17:36 rsbivand * [r525] DESCRIPTION, src/rgeos_coord.c: protect s in src/rgeos_coord.c 2016-04-04 11:37 rsbivand * [r524] ChangeLog, configure, inst/ChangeLog: tidy 2016-04-04 11:35 rsbivand * [r523] DESCRIPTION, src/Makevars.win: update to win-4.9.3 2016-02-15 07:38 rsbivand * [r522] DESCRIPTION, R/rgeos_buffer.R: gBuffer NULL case 2016-02-13 11:26 rsbivand * [r521] ChangeLog, inst/ChangeLog: tidy 2016-02-12 20:31 rsbivand * [r520] DESCRIPTION, R/rgeos_buffer.R: buffer byid to FALSE if single feature 2016-02-12 18:58 rsbivand * [r519] R/rgeos_buffer.R: buffer byid to FALSE if single feature 2016-02-09 12:53 rsbivand * [r518] ChangeLog, inst/ChangeLog: buffer byid to FALSE if single feature 2016-02-09 12:52 rsbivand * [r517] DESCRIPTION, R/rgeos_buffer.R, configure, src/rgeos_buffer.c: buffer byid to FALSE if single feature 2016-01-23 19:12 rsbivand * [r516] DESCRIPTION, R/rgeos_misc.R: rev 66 oddity partial workaround 2015-11-04 12:46 rsbivand * [r515] configure: tidy 2015-11-04 12:43 rsbivand * [r514] ChangeLog, inst/ChangeLog: tidy 2015-11-04 11:10 rsbivand * [r513] DESCRIPTION, src/rgeos_buffer.c: rgeos_buffer id overrun bug fix 2015-10-26 14:28 rsbivand * [r512] ChangeLog, inst/ChangeLog: tidy 2015-10-25 10:38 rsbivand * [r511] man/topo-bin-gIntersection.Rd: fix td bug 2015-10-25 10:28 rsbivand * [r510] ChangeLog, DESCRIPTION, inst/ChangeLog, man/topo-bin-gIntersection.Rd, src/rgeos_topology_binary.c: fix td bug 2015-09-29 07:07 rsbivand * [r509] man/topo-bin-gIntersection.Rd: extra intersection example 2015-09-28 15:51 rsbivand * [r508] ChangeLog, configure, inst/tests/testxml/general/TestFunctionLLPrec.xml, inst/tests/testxml/validate/TestRelateLL.xml, inst/tests/testxml/validate/TestRelatePA.xml, inst/tests/testxml/validate/TestRelatePL.xml, inst/tests/testxml/validate/TestRelatePP.xml: tidy 2015-09-28 09:49 rsbivand * [r507] src/rgeos_geos2R.c: SpatialRings stack unbalance 2015-09-26 17:45 rsbivand * [r506] man/labelpt.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd: tidy 2015-09-26 17:27 rsbivand * [r505] DESCRIPTION: adding unaryUnion to topo-bin if FALSE byid 2015-09-26 17:27 rsbivand * [r504] R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, src/rgeos_topology_binary.c: adding unaryUnion to topo-bin if FALSE byid 2015-09-20 21:23 rsbivand * [r503] man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd: note on 0-based indices 2015-09-18 12:13 rsbivand * [r502] R/rgeos_predicate_binary.R, R/rgeos_topology_binary.R: add optional validity checking to binary predicates and operations 2015-09-18 12:09 rsbivand * [r501] DESCRIPTION, R/rgeos_predicate_binary.R, R/rgeos_topology_binary.R, man/misc-over.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd: add optional validity checking to binary predicates and operations 2015-09-10 14:06 edzer * [r500] DESCRIPTION, R/over.R: version bump; let overGeomGeomDF absorb & pass on minDimension to overGeomGeom 2015-09-01 10:27 rsbivand * [r499] ChangeLog, inst/ChangeLog: tidy 2015-08-31 19:59 edzer * [r498] R/over.R: pass on colnames(x) if x is matrix 2015-08-31 16:49 edzer * [r497] R/over.R: pass names on to returned list 2015-08-31 16:13 edzer * [r496] R/over.R, man/misc-over.Rd: complete documentation, clean up code. 2015-08-31 11:49 rsbivand * [r495] configure, configure.ac: strip dev from version 2015-08-25 11:48 rsbivand * [r494] DESCRIPTION, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gTouches.Rd, src/rgeos_predicate_binary.c: block assigning too large matrix 2015-08-25 09:15 edzer * [r493] R/over.R: default to gIntersects(), because of the performance penalty 2015-08-22 13:33 edzer * [r492] R/over.R: move constant check outside loop 2015-08-21 22:13 edzer * [r491] R/over.R: increase over sanity 2015-08-21 15:03 edzer * [r490] R/over.R: catch omission on unrealistic dimension requirements 2015-08-20 20:45 edzer * [r489] R/over.R: clean up over stuff, order by dimension from gRelate 2015-08-20 09:23 edzer * [r488] R/over.R: some more tweeks for SpatialMultiPoints 2015-08-19 14:52 edzer * [r487] man/misc-over.Rd: add overGeomGeom doc 2015-08-19 14:11 edzer * [r486] NAMESPACE: export overGeomGeomDF and overGeomGeom 2015-08-13 09:22 edzer * [r485] src/rgeos_R2geos.c: clean up 2015-06-28 20:36 rsbivand * [r484] DESCRIPTION, NAMESPACE, R/AAA.R, man/pred-binary-gRelate.Rd: CRAN _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_=true NAMESPACE tidy 2015-06-23 07:56 rsbivand * [r483] R/AAA.R: add utils:: to packageVersion() 2015-06-05 07:54 rsbivand * [r482] ChangeLog, inst/ChangeLog: tidy 2015-06-05 07:53 rsbivand * [r481] ChangeLog, inst/ChangeLog: tidy 2015-06-05 07:52 rsbivand * [r480] DESCRIPTION: tidy 2015-05-29 13:49 rsbivand * [r479] ChangeLog, inst/ChangeLog: tidy 2015-05-29 13:47 rsbivand * [r478] DESCRIPTION: tidy 2015-05-05 17:02 rsbivand * [r477] DESCRIPTION, man/comment-functions.Rd, man/experimental-functions.Rd, man/labelpt.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gDelaunayTriangulation.Rd: dontrun require issues 2015-04-23 22:19 edzer * [r476] man/topo-bin-gIntersection.Rd: typo 2015-04-23 21:45 edzer * [r475] src/rgeos_validate.c: add const declarations for SEXPs 2015-04-23 21:43 edzer * [r474] R/over.R: fix bug for SpatialPolygons,SpatialPolygonsDataFrame 2015-04-13 15:59 rsbivand * [r473] .Rbuildignore, R/labelpt.R, configure.ac, svn2cl.xsl: fix polygonsLabel 2015-04-09 13:59 rsbivand * [r472] DESCRIPTION, R/AAA.R, src/init.c, src/rgeos.c, src/rgeos.h: add linking to version 2015-03-11 13:09 rsbivand * [r471] ChangeLog, inst/ChangeLog: tidy 2015-03-11 13:08 rsbivand * [r470] R/labelpt.R, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd: tidy 2015-03-11 12:48 rsbivand * [r469] ChangeLog, inst/ChangeLog: tidy 2015-03-10 08:30 rsbivand * [r468] inst/README, inst/README.windows: OSX install note 2015-03-09 07:37 edzer * [r467] NAMESPACE, man/class-SpatialCollections.Rd: exportClass Spatial*NULL classes 2015-03-08 16:04 rsbivand * [r466] src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c, src/rgeos_topology.c, src/rgeos_topology_binary.c: added extra geos-config checks 2015-03-08 12:35 rsbivand * [r465] DESCRIPTION: added extra geos-config checks 2015-03-08 12:34 rsbivand * [r464] configure, configure.ac: added extra geos-config checks 2015-03-07 17:30 rsbivand * [r463] configure, configure.ac: added extra geos-config checks 2015-01-29 08:19 edzer * [r462] R/over.R, man/pred-binary-gIntersects.Rd: improve readability overGeomGeom 2015-01-28 22:58 edzer * [r461] R/over.R: fix overGeomGeom for length(x) == 1 2014-09-21 14:09 rsbivand * [r460] ChangeLog, inst/ChangeLog: tidy 2014-09-21 14:09 rsbivand * [r459] DESCRIPTION, R/rgeos_topology_binary.R, man/topo-bin-gIntersection.Rd: deprecate drop_not_poly 2014-09-21 11:19 rsbivand * [r458] ChangeLog, inst/ChangeLog: tidy 2014-09-21 11:18 rsbivand * [r457] DESCRIPTION, NAMESPACE, R/AAA.R, man/topo-bin-gIntersection.Rd, man/utility-functions.Rd, src/rgeos_geos2R.c: conditionally drop slivers 2014-09-20 18:50 rsbivand * [r456] inst/test_cases, inst/test_cases/polys.RData: drop topological dimension 2014-09-20 18:35 rsbivand * [r455] src/rgeos_geos2R.c: drop topological dimension 2014-09-19 20:17 rsbivand * [r454] R/Rgpc_funcs.R, R/rgeos_misc.R, R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, src/rgeos_topology_binary.c: drop topological dimension 2014-09-11 13:08 rsbivand * [r453] src/rgeos_geos2R.c: slivers 2014-09-06 22:07 rsbivand * [r452] R/AAA.R, src/rgeos_geos2R.c: drop_not_poly adjustment 2014-09-04 18:30 rsbivand * [r451] DESCRIPTION, R/AAA.R, R/rgeos_topology_binary.R, src/rgeos_topology_binary.c: drop_not_poly adjustment 2014-07-08 08:53 rsbivand * [r450] ChangeLog, inst/ChangeLog: tidy 2014-07-07 22:26 rsbivand * [r449] DESCRIPTION, R/Rgpc_funcs.R: constrain gpc to polygons 2014-06-05 19:08 rsbivand * [r448] ChangeLog, inst/ChangeLog: tidy 2014-06-05 19:01 rsbivand * [r447] ChangeLog, inst/ChangeLog: tidy 2014-06-05 18:59 rsbivand * [r446] man/pred-binary-gContains.Rd, man/pred-binary-gIntersects.Rd, src/rgeos_poly2nb.c: tidt 2014-06-05 18:33 rsbivand * [r445] ChangeLog, inst/ChangeLog: tidy 2014-06-05 18:32 rsbivand * [r444] DESCRIPTION, R/AAA.R, R/rgeos_predicate_binary.R, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c: tidy 2014-03-31 19:58 rsbivand * [r443] src/rgeos_predicate_binary.c: permit binary predicates to return lists 2014-03-31 19:46 rsbivand * [r442] src/rgeos_predicate_binary.c: permit binary predicates to return lists 2014-03-31 17:15 rsbivand * [r441] DESCRIPTION, R/AAA.R, R/rgeos_predicate_binary.R, R/rgeos_util.R, man/experimental-functions.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gTouches.Rd, src/rgeos_R2geos.c, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c: permit binary predicates to return lists 2014-03-25 14:00 rsbivand * [r440] configure: tidy 2014-03-25 13:55 rsbivand * [r439] ChangeLog, inst/ChangeLog: tidy 2014-03-23 09:22 rsbivand * [r438] DESCRIPTION, NAMESPACE, R/Rgpc_funcs.R, R/rgeos_topology.R, inst/wkts/sppsp.wkt, man/topo-unary-gDelaunayTriangulation.Rd, man/topo-unary-gNode.Rd, man/topo-unary-gPolygonize.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c: exposing noding 2014-02-13 15:30 rsbivand * [r437] ChangeLog, inst/ChangeLog: tidy 2014-02-13 15:28 rsbivand * [r436] src/rgeos_topology_binary.c: cast to remove warnings 2014-02-13 08:52 rsbivand * [r435] ChangeLog, inst/ChangeLog: tidy 2014-02-13 08:51 rsbivand * [r434] DESCRIPTION, src/rgeos_coord.c, src/rgeos_geos2R.c: changed PROTECT code for crdMAT 2014-02-08 15:50 rsbivand * [r433] DESCRIPTION, R/AAA.R, R/rgeos_topology_binary.R, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, src/rgeos_topology_binary.c: drop not poly intersections if both poly 2014-01-27 19:35 rsbivand * [r432] src/rgeos_geos2R.c: added id report on GC in GC 2014-01-27 19:06 rsbivand * [r431] src/rgeos_geos2R.c, src/rgeos_topology_binary.c: added id report on GC in GC 2014-01-22 12:13 rsbivand * [r430] src/rgeos_predicate_binary.c: fix over-generous symmetry in binar predicates 2014-01-22 12:09 rsbivand * [r429] DESCRIPTION, src/rgeos.h, src/rgeos_predicate_binary.c: fix over-generous symmetry in binar predicates 2013-12-06 23:34 crundel * [r428] R/rgeos_predicate_binary.R: Fix for an edge case of predicates with multipoint geometries There is an issue if some points share in a SpatialPoints object share an ID since there will be a mismatch between the number of output IDs 2013-10-06 13:29 rsbivand * [r427] ChangeLog, inst/ChangeLog: tidy 2013-10-06 13:28 rsbivand * [r426] R/rgeos_buffer.R, man/misc-gBuffer.Rd: blocking EMPTY 2013-10-05 14:46 rsbivand * [r425] ChangeLog, inst/ChangeLog: tidy 2013-10-05 14:35 rsbivand * [r424] inst/tests/test-translate-empty.R, inst/tests/testxml/general/TestBoundary.xml, inst/tests/testxml/general/TestFunctionLA.xml, inst/tests/testxml/general/TestFunctionLL.xml, inst/tests/testxml/general/TestFunctionPP.xml, inst/tests/testxml/general/TestSimple.xml, inst/tests/testxml/general/TestValid.xml, inst/tests/testxml/general/TestValid2.xml, inst/tests/testxml/robust/ExternalRobustness.xml, man/misc-gBuffer.Rd, man/pred-unary-gIsEmpty.Rd, man/wkt-functions.Rd, src/rgeos_geos2R.c: blocking EMPTY 2013-10-04 19:04 rsbivand * [r423] R/rgeos_buffer.R, man/misc-gBuffer.Rd, src/rgeos_buffer.c: adding buffer widths either 1 or n 2013-10-04 12:08 rsbivand * [r422] DESCRIPTION: removing empty polygons 2013-10-04 12:05 rsbivand * [r421] DESCRIPTION, R/rgeos_buffer.R, src/rgeos_buffer.c, src/rgeos_geos2R.c: removing empty polygons 2013-09-16 12:23 rsbivand * [r420] ChangeLog, inst/ChangeLog: tidy 2013-09-16 12:22 rsbivand * [r419] man/topo-unary-gDelaunayTriangulation.Rd: tidy 2013-09-16 11:15 rsbivand * [r418] man/topo-unary-gDelaunayTriangulation.Rd: tidy 2013-09-16 11:01 rsbivand * [r417] ChangeLog, inst/ChangeLog: tidy 2013-09-03 10:17 rsbivand * [r416] NAMESPACE, R/rgeos_topology.R, man/topo-unary-gDelaunayTriangulation.Rd, src/rgeos_topology.c: Delaunay triangulation 2013-09-02 21:14 rsbivand * [r415] R/rgeos_topology.R: start incorporating triangulation 2013-09-02 19:18 rsbivand * [r414] DESCRIPTION, R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_topology.c: start incorporating triangulation 2013-09-02 12:29 rsbivand * [r413] ChangeLog, inst/ChangeLog: tidy 2013-09-02 12:28 rsbivand * [r412] inst/tests/testxml/general/TestInteriorPoint.xml: revert xml tests to pass GEOS 3.2.0 2013-09-01 17:47 rsbivand * [r411] ChangeLog, inst/ChangeLog: tidy 2013-09-01 17:22 rsbivand * [r410] ChangeLog, inst/ChangeLog: tidy 2013-09-01 17:20 rsbivand * [r409] DESCRIPTION, cleanup, man/topo-unary-gPointOnSurface.Rd: add cleanup 2013-09-01 16:40 rsbivand * [r408] inst/tests/testxml/general/TestInteriorPoint.xml: revert two changes in gPointOnSurface test to match GEOS 3.4.* to suit < 3.4 2013-09-01 10:31 rsbivand * [r407] inst/tests/testxml/general/TestInteriorPoint.xml, man/topo-unary-gPointOnSurface.Rd: change gPointOnSurface test to match GEOS 3.4.* 2013-08-30 16:52 edzer * [r406] DESCRIPTION, R/over.R, man/comment-functions.Rd, man/labelpt.Rd, man/topo-unary-gPolygonize.Rd, man/utility-functions.Rd: moved sp and methods from Depends: to Imports: added library(sp) to the examples, where needed removed the ::: using the exported overDF_for_rgeos from sp 1.0-12 increased sp dependency to 1.0-12 2013-07-18 10:30 rsbivand * [r405] DESCRIPTION, src/rgeos_R2geos.c: check comment length against Polygons slot 2013-07-17 13:57 rsbivand * [r404] man/pred-binary-gContains.Rd: tidy 2013-07-02 20:17 rhijmans * [r403] R/rgeos_buffer.R: 2013-07-02 20:15 rhijmans * [r402] man/misc-gBuffer.Rd: 2013-07-02 20:12 rhijmans * [r401] R/rgeos_buffer.R: 2013-06-22 14:17 rsbivand * [r400] ChangeLog, inst/ChangeLog: tidy 2013-06-22 14:16 rsbivand * [r399] DESCRIPTION, NAMESPACE, R/labelpt.R, man/labelpt.Rd: update patched to polygonsLabel 2013-06-22 13:40 rsbivand * [r398] ChangeLog, inst/ChangeLog: more symbol check issues 2013-06-22 13:39 rsbivand * [r397] R/AAA.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R: tidy 2013-06-22 12:23 rsbivand * [r396] ChangeLog, inst/ChangeLog: tidy 2013-06-22 12:23 rsbivand * [r395] man/comment-functions.Rd, man/constructor-SpatialCollections.Rd, man/misc-gBuffer.Rd, man/misc-gDistance.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-unary-gIsValid.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd, man/topo-unary-gSimplify.Rd: more symbol check issues 2013-06-21 11:44 rsbivand * [r394] DESCRIPTION, R/AAA.R: tidy 2013-05-05 08:03 rsbivand * [r393] configure, configure.ac: add Unversioned directory to svn revision 2013-04-26 09:26 rsbivand * [r392] ChangeLog, inst/ChangeLog: tidy 2013-04-26 09:26 rsbivand * [r391] DESCRIPTION: Kirill Müller's reversion to GEOS 3.2.0 2013-04-26 09:25 rsbivand * [r390] DESCRIPTION, configure, configure.ac: Kirill Müller's reversion to GEOS 3.2.0 2013-04-09 16:47 rsbivand * [r389] ChangeLog, inst/ChangeLog: tidy 2013-04-09 13:47 rsbivand * [r388] src/rgeos_geos2R.c: length of IDs guard 2013-04-08 17:30 rsbivand * [r387] R/rgeos_topology.R, man/topo-unary-gPolygonize.Rd: fix bug in gPolygonize ids 2013-04-06 08:05 rsbivand * [r386] ChangeLog, inst/ChangeLog: tidy 2013-04-06 08:04 rsbivand * [r385] configure, configure.ac: checking with clang++ in configure 2013-04-05 21:05 rsbivand * [r384] ChangeLog, inst/ChangeLog: tidy 2013-04-05 20:02 rsbivand * [r383] configure: update configure.ac to force C++ test linking 2013-04-05 19:58 rsbivand * [r382] ChangeLog, inst/ChangeLog: tidy 2013-04-05 19:53 rsbivand * [r381] DESCRIPTION, configure, configure.ac: update configure.ac to force C++ test linking 2013-03-29 11:00 rsbivand * [r380] ChangeLog, inst/ChangeLog: tidy 2013-03-29 10:59 rsbivand * [r379] ChangeLog, DESCRIPTION, inst/ChangeLog, src/rgeos_R2geos.c, src/rgeos_R2geosMP.c, src/rgeos_bbox.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_topology.c, src/rgeos_topology_binary.c: remove clang warnings 2013-03-04 09:53 rsbivand * [r378] configure: tidy 2013-02-23 11:39 rsbivand * [r377] DESCRIPTION, R/rgeos_buffer.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, R/rgeos_wkt.R: enforce logical byid 2013-02-06 16:58 rsbivand * [r376] ChangeLog, inst/ChangeLog: tidy 2013-02-06 09:18 rsbivand * [r375] DESCRIPTION, R/rgeos_topology.R, man/topo-unary-gPolygonize.Rd: fix bug in gPolygonize for > 2 output objects 2013-01-31 16:46 rsbivand * [r374] inst/tests/testxml/general, inst/tests/testxml/general/TestBoundary.xml, inst/tests/testxml/general/TestCentroid.xml, inst/tests/testxml/general/TestConvexHull-big.xml, inst/tests/testxml/general/TestConvexHull.xml, inst/tests/testxml/general/TestFunctionAA.xml, inst/tests/testxml/general/TestFunctionAAPrec.xml, inst/tests/testxml/general/TestFunctionLA.xml, inst/tests/testxml/general/TestFunctionLAPrec.xml, inst/tests/testxml/general/TestFunctionLL.xml, inst/tests/testxml/general/TestFunctionLLPrec.xml, inst/tests/testxml/general/TestFunctionPA.xml, inst/tests/testxml/general/TestFunctionPL.xml, inst/tests/testxml/general/TestFunctionPLPrec.xml, inst/tests/testxml/general/TestFunctionPP.xml, inst/tests/testxml/general/TestInteriorPoint.xml, inst/tests/testxml/general/TestRectanglePredicate.xml, inst/tests/testxml/general/TestRelateAA.xml, inst/tests/testxml/general/TestRelateAC.xml, inst/tests/testxml/general/TestRelateLA.xml, inst/tests/testxml/general/TestRelateLC.xml, inst/tests/testxml/general/TestRelateLL.xml, inst/tests/testxml/general/TestRelatePA.xml, inst/tests/testxml/general/TestRelatePL.xml, inst/tests/testxml/general/TestRelatePP.xml, inst/tests/testxml/general/TestSimple.xml, inst/tests/testxml/general/TestValid.xml, inst/tests/testxml/general/TestValid2-big.xml, inst/tests/testxml/general/TestValid2.xml, inst/tests/testxml/general/TestWithinDistance.xml: tidy 2013-01-31 16:45 rsbivand * [r373] inst/tests/testxml/general: tidy 2013-01-16 09:03 rsbivand * [r372] ChangeLog, inst/ChangeLog: tidy 2013-01-16 09:02 rsbivand * [r371] DESCRIPTION, R/AAA.R: move startup message to .onAttach 2012-12-18 14:10 rsbivand * [r370] ChangeLog, inst/ChangeLog: tidy 2012-12-18 14:09 rsbivand * [r369] DESCRIPTION: tidy 2012-12-08 17:29 rsbivand * [r368] ChangeLog, inst/ChangeLog: tidy 2012-12-08 16:53 rsbivand * [r367] R/AAA.R: versions in startup messages 2012-12-08 16:50 rsbivand * [r366] R/AAA.R: versions in startup messages 2012-12-08 16:47 rsbivand * [r365] configure, configure.ac: versions in configure 2012-12-03 20:27 rsbivand * [r364] R/AAA.R: tidy 2012-11-20 20:13 rsbivand * [r363] ChangeLog, inst/ChangeLog: tidy 2012-11-20 20:09 rsbivand * [r362] DESCRIPTION: cumulation change in rgeos_binarytopologyfunc to avoid collection in collection error 2012-11-20 19:21 rsbivand * [r361] src/rgeos_topology_binary.c: cumulation change in rgeos_binarytopologyfunc to avoid collection in collection error 2012-11-12 09:30 rsbivand * [r360] ChangeLog, inst/ChangeLog: tidy 2012-11-12 08:00 rsbivand * [r359] R/gpc_geos.R: adding conversion of a NULL to gpc.poly 2012-11-11 19:01 rsbivand * [r358] DESCRIPTION, R/Rgpc_funcs.R: adding conversion of a NULL to gpc.poly 2012-11-05 17:30 rsbivand * [r357] ChangeLog, inst/ChangeLog: tidy 2012-11-05 17:30 rsbivand * [r356] man/comment-functions.Rd: dontrun part of check holes example 2012-11-05 08:56 rsbivand * [r355] ChangeLog, inst/ChangeLog: tidy 2012-11-05 08:55 rsbivand * [r354] DESCRIPTION: tidy 2012-09-30 18:05 edzer * [r353] DESCRIPTION, NAMESPACE, R/rgeos_wkt.R: removed dependency on stringr and plyr, replaced two str_ function calls with the equivalent ones in base R. 2012-09-06 09:30 rsbivand * [r352] inst/wkts, inst/wkts/sline1.wkt, inst/wkts/sline2.wkt, man/utility-functions.Rd: setScale example from Mao-Gui Hu 2012-08-19 13:07 edzer * [r351] NAMESPACE, R/labelpt.R, man/labelpt.Rd: update function name; cosmetics. 2012-08-17 20:20 edzer * [r350] DESCRIPTION, NAMESPACE, R/labelpt.R, man/labelpt.Rd: added first attempt to label points functions, that evolved from https://stat.ethz.ch/pipermail/r-sig-geo/2012-July/015693.html ; edited author@R section to DESCRIPTION. 2012-06-24 14:41 rsbivand * [r349] DESCRIPTION, src/rgeos.c, src/rgeos.h, src/rgeos_R2geosMP.c, src/rgeos_coord.c, src/rgeos_poly2nb.c: remove some -Wall warnings 2012-06-24 13:28 rsbivand * [r348] ChangeLog, inst/ChangeLog: tidy 2012-06-24 13:27 rsbivand * [r347] DESCRIPTION, src/dummy.cc, src/local_stubs.c: adding src/dummy.cc 2012-05-07 16:48 rsbivand * [r346] DESCRIPTION, src/rgeos_misc.c: fixed single geometry bug in gDistance 2012-05-02 09:58 rsbivand * [r345] ChangeLog, inst/ChangeLog: more configure updates 2012-05-02 09:58 rsbivand * [r344] configure, configure.ac: more configure updates 2012-04-24 10:56 rsbivand * [r343] ChangeLog, inst/ChangeLog: tidy 2012-04-24 10:54 rsbivand * [r342] configure, configure.ac: tidying configure.ac 2012-04-22 11:42 rsbivand * [r341] ChangeLog, inst/ChangeLog: tidy 2012-04-22 11:42 rsbivand * [r340] DESCRIPTION: add plyr dependency 2012-04-20 08:32 rsbivand * [r339] configure, configure.ac: tidy 2012-04-20 07:06 rsbivand * [r338] R/AAA.R: tidy 2012-04-20 07:01 rsbivand * [r337] DESCRIPTION: tidy 2012-04-20 07:01 rsbivand * [r336] ChangeLog, inst/ChangeLog: tidy 2012-04-20 07:00 rsbivand * [r335] configure, configure.ac, configure.in, src/Makevars.in: upgrading configure 2012-04-19 13:20 rsbivand * [r334] inst/tests/test-translate-polygon-collection.R, src/rgeos_geos2R.c: fixed broken tests 2012-04-17 13:38 rsbivand * [r333] DESCRIPTION, inst/tests/test-translate-polygons.R, src/rgeos_geos2R.c: broken tests 2012-04-16 13:21 rsbivand * [r332] R/rgeos_util.R: using top-level comment to SpatialPolygons for all member Polygons commented with OGC SFS kludge 2012-04-16 13:13 rsbivand * [r331] DESCRIPTION, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, R/rgeos_util.R: using top-level comment to SpatialPolygons for all member Polygons commented with OGC SFS kludge 2012-03-17 15:08 rsbivand * [r330] ChangeLog, DESCRIPTION, inst/ChangeLog: tidy 2012-03-16 18:53 crundel * [r329] src/rgeos_R2geos.c: Fixed crashing bug when ignoring holes with unknown parent poly 2012-03-16 14:46 rsbivand * [r328] ChangeLog, inst/ChangeLog: tidy 2012-03-16 11:54 rsbivand * [r327] DESCRIPTION, R/rgeos_misc.R: added createSPComment to RGEOSMiscFunc 2012-02-22 17:00 rsbivand * [r326] ChangeLog, inst/ChangeLog: tidy 2012-02-22 16:59 rsbivand * [r325] DESCRIPTION: tidy 2012-01-30 10:44 rsbivand * [r324] DESCRIPTION, R/rgeos_topology.R: revise gLineMerge 2012-01-27 12:31 rsbivand * [r323] man/topo-bin-gUnion.Rd: fix documentation 2012-01-20 10:12 rsbivand * [r322] ChangeLog, inst/ChangeLog: tidy 2012-01-19 19:25 rsbivand * [r321] src/rgeos_poly2nb.c: fixing gBinarySTRtreeQuery 2012-01-19 19:08 rsbivand * [r320] man/experimental-functions.Rd, src/rgeos_poly2nb.c: fixing gBinarySTRtreeQuery 2012-01-18 19:11 rsbivand * [r319] DESCRIPTION, src/rgeos_poly2nb.c: fixing gBinarySTRtreeQuery 2012-01-15 13:12 rsbivand * [r318] ChangeLog, DESCRIPTION, inst/ChangeLog: tidy 2012-01-15 11:37 edzer * [r317] DESCRIPTION, src/rgeos_predicate_binary.c: added r-forge URL to DESCRIPTION added type casts to remove compilation warnings 2012-01-15 09:58 crundel * [r316] src/rgeos_geos2R.c: Cleanup 2012-01-15 09:58 crundel * [r315] src/rgeos_topology.c, src/rgeos_topology_binary.c: Cleanup and memory leak 2012-01-15 09:58 crundel * [r314] src/rgeos_R2geos.c: memory leak 2012-01-15 09:58 crundel * [r313] src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: cleanup 2012-01-15 09:58 crundel * [r312] src/rgeos_geos2R.c: Small memory leak 2012-01-15 09:58 crundel * [r311] src/rgeos_bbox.c: Fixing what I broke 2012-01-15 09:58 crundel * [r310] src/rgeos_geos2R.c: Cleanup 2012-01-15 09:58 crundel * [r309] src/rgeos_R2geos.c, src/rgeos_R2geosMP.c: Cleanup and moved multipoint functions to new source file 2012-01-15 09:58 crundel * [r308] inst/tests/process_testxml.R, inst/tests/test-jts-xml.R: Break up XML test runner to allow for separate testing 2012-01-15 09:58 crundel * [r307] src/rgeos_bbox.c: Should function for all geometry types now 2012-01-15 09:58 crundel * [r306] src/rgeos.h, src/rgeos_coord.c: Fixed const correctness for coordSequence 2012-01-15 09:58 crundel * [r305] src/gpc_geos.c, src/init.c, src/rgeos.h: Removed gpc_geos functions since we arn't using them 2012-01-15 09:58 crundel * [r304] src/rgeos.h: cleanup 2012-01-15 09:58 crundel * [r303] src/gpc_geos.c, src/rgeos.h: Lots of cleaning and minor refactoring, changes have not been tested since we don't currently use any of this functionality 2012-01-15 09:58 crundel * [r302] src/rgeos_coord.c: cleanup 2012-01-15 09:58 crundel * [r301] src/rgeos_geos2R.c: cleanup 2012-01-15 09:57 crundel * [r300] src/rgeos_R2geos.c: cleanup 2012-01-15 09:57 crundel * [r299] src/rgeos_R2geos.c: Don't use the handle here 2012-01-15 09:57 crundel * [r298] src/rgeos_R2geos.c: Removed unused scale variable 2012-01-15 09:57 crundel * [r297] src/rgeos_R2geos.c: Cleaned tabs 2012-01-15 09:57 crundel * [r296] src/rgeos_topology.c: More cleanup, removed unused curtype 2012-01-15 09:57 crundel * [r295] src/rgeos_topology.c: Cleanup and switch to use just one call to GEOSGeomTypeId_r 2012-01-15 09:57 crundel * [r294] src/rgeos_geos2R.c: Cleaning tabs 2012-01-13 00:02 crundel * [r293] src/rgeos_geos2R.c: Cleanup and memory leak fix 2012-01-13 00:02 crundel * [r292] src/rgeos_geos2R.c: Cleanup 2012-01-13 00:02 crundel * [r291] inst/tests/test-translate-lines.R, inst/tests/test-translate-points.R, inst/tests/test-translate-polygon-collection.R, inst/tests/test-translate-polygons.R, inst/tests/test-translate-rings.R, inst/tests/test-translate.R: Break up translate tests into separate files 2012-01-09 07:59 rsbivand * [r290] ChangeLog, inst/ChangeLog: tidy 2012-01-08 21:42 edzer * [r289] src/rgeos_geos2R.c: one more memory leak fixed. 2012-01-08 19:46 edzer * [r288] DESCRIPTION, src/rgeos_bbox.c, src/rgeos_poly2nb.c, src/rgeos_validate.c: version bump; fixed more memory leaks. 2012-01-07 13:22 rsbivand * [r287] ChangeLog, inst/ChangeLog: tidy 2012-01-06 23:20 edzer * [r286] src/rgeos_buffer.c, src/rgeos_geos2R.c: further memory release hunting... 2012-01-06 18:31 edzer * [r285] DESCRIPTION, src/rgeos_R2geos.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_topology.c, src/rgeos_wkt.c: version bump; hunt for memory leaks. 2012-01-05 22:07 edzer * [r284] src/rgeos_buffer.c: un-commented the GEOS_destroy_r() commands in buffer, after adding conditions. 2012-01-02 09:06 rsbivand * [r283] ChangeLog, inst/ChangeLog: avoid gpclib suggest via maptools 2012-01-02 09:05 rsbivand * [r282] DESCRIPTION, man/gpc-new-generics.Rd: avoid gpclib suggest via maptools 2011-12-14 09:11 rsbivand * [r281] ChangeLog, inst/ChangeLog: revert destroy in R2geos.c 2011-12-14 09:10 rsbivand * [r280] DESCRIPTION, src/rgeos_R2geos.c: revert destroy in R2geos.c 2011-12-10 11:37 rsbivand * [r279] ChangeLog, inst/ChangeLog: clear stringr 0.6 mess 2011-12-10 11:36 rsbivand * [r278] DESCRIPTION, src/rgeos_R2geos.c: clear stringr 0.6 mess 2011-12-10 07:44 crundel * [r277] R/rgeos_wkt.R: Changed str_match_all to str_extract_all 2011-12-09 22:04 crundel * [r276] tests/test-all.R: use test_package from testthat instead of test_file 2011-12-09 22:04 crundel * [r275] R/rgeos_wkt.R: Fix to address small change in return type from stringr str_match_all function 2011-11-28 14:55 rsbivand * [r274] src/rgeos_buffer.c: moved curgeom inside loop 2011-11-18 03:57 crundel * [r273] src/rgeos_topology_binary.c: Fix returned id for binary topology operations 2011-11-14 18:39 rsbivand * [r272] ChangeLog, inst/ChangeLog: tidy 2011-11-14 18:38 rsbivand * [r271] DESCRIPTION, configure, configure.in, src/init.c, src/rgeos.h, src/rgeos_topology.c: move HAVE_UNARYUNION to rgeos.h 2011-11-14 10:55 rsbivand * [r270] ChangeLog, inst/ChangeLog: tidy 2011-11-10 07:43 rsbivand * [r269] ChangeLog, inst/ChangeLog: tidy 2011-11-09 10:51 rsbivand * [r268] DESCRIPTION, src/rgeos_topology_binary.c: drop empty objects before building Geometry Collection in binary topology ops 2011-10-30 18:59 rsbivand * [r267] DESCRIPTION, man/topo-unary-gSimplify.Rd, src/gpc_geos.c, src/rgeos_buffer.c, src/rgeos_geos2R.c: tickling destroy 2011-10-25 21:22 crundel * [r266] DESCRIPTION: Require stringr >= 0.5 2011-10-19 19:20 rsbivand * [r265] src/gpc_geos.c, src/rgeos_geos2R.c: add space character for safety in comment 2011-10-19 18:52 rsbivand * [r264] ChangeLog, inst/ChangeLog: tidy 2011-10-19 18:51 rsbivand * [r263] DESCRIPTION, src/gpc_geos.c, src/local_stubs.c, src/rgeos_geos2R.c: fix comment string length 2011-09-16 07:24 rsbivand * [r262] ChangeLog, inst/ChangeLog: tidy 2011-09-16 07:22 rsbivand * [r261] DESCRIPTION: tidy 2011-09-05 12:35 rsbivand * [r260] src/rgeos_poly2nb.c: STRtree loop simplification (strcmp before loop) 2011-09-05 08:07 rsbivand * [r259] src/rgeos_poly2nb.c: STRtree loop simplification (strcmp before loop) 2011-09-04 18:29 rsbivand * [r258] R/rgeos_util.R, src/rgeos_poly2nb.c: callback corrections 2011-09-03 14:34 rsbivand * [r257] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_spExtensions_Classes.R, src/rgeos_buffer.c, src/rgeos_wkt.c: changed dependency load syntax 2011-09-03 03:32 crundel * [r256] src/rgeos_poly2nb.c: Cleanup of build warnings from using callback pointer 2011-09-03 03:32 crundel * [r255] src/rgeos.h, src/rgeos_misc.c, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c, src/rgeos_topology.c, src/rgeos_topology_binary.c: Cleanup of build warnings from function pointers 2011-06-11 06:59 rsbivand * [r254] ChangeLog, inst/ChangeLog: touch local_stubs.c 2011-06-11 06:59 rsbivand * [r253] src/local_stubs.c: touch local_stubs.c 2011-06-11 05:26 rsbivand * [r252] ChangeLog, inst/ChangeLog: permit NA IDs in union 2011-06-11 05:25 rsbivand * [r251] R/rgeos_topology.R: permit NA IDs in union 2011-06-10 22:06 rsbivand * [r250] DESCRIPTION, R/rgeos_topology.R, configure.in, man/topo-bin-gUnion.Rd, src/gpc_geos.c, src/rgeos_geos2R.c: sp comment buffer overflow fix 2011-06-09 14:04 rsbivand * [r249] ChangeLog, inst/ChangeLog: tidy 2011-06-09 13:55 rsbivand * [r248] DESCRIPTION: update sp version 2011-06-09 08:23 rsbivand * [r247] R/rgeos_topology.R, man/topo-bin-gUnion.Rd: gUnionCascaded suggestion 2011-06-09 06:21 rsbivand * [r246] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_topology.R, configure, configure.in, man/pred-binary-gTouches.Rd, man/topo-bin-gUnion.Rd, man/utility-functions.Rd, src/init.c, src/rgeos.h, src/rgeos_topology.c: adding UnaryUnion for GEOS 3.3.0 2011-05-24 16:15 rsbivand * [r244] DESCRIPTION: added version to GEOS required 2011-05-24 11:27 edzer * [r243] DESCRIPTION: increased dependency on sp 0.9-73, which has over defined as generic. 2011-05-18 21:07 rsbivand * [r242] ChangeLog, inst/ChangeLog: RGEOSBinPredFunc single argument fix 2011-05-18 21:06 rsbivand * [r241] R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R: RGEOSBinPredFunc single argument fix 2011-05-18 20:53 rsbivand * [r240] ChangeLog, inst/ChangeLog: RGEOSBinPredFunc single argument fix 2011-05-18 20:49 rsbivand * [r239] DESCRIPTION, R/rgeos_predicate_binary.R: RGEOSBinPredFunc single argument fix 2011-05-11 12:49 edzer * [r238] R/over.R: improved over methods for gridded objects 2011-05-09 20:31 edzer * [r237] R/over.R: added the lines & (grids / pixels) methods for "over" overlay. 2011-05-09 16:50 edzer * [r236] DESCRIPTION, R/over.R: added 18 overlay methods for "over" (from sp) 2011-03-30 14:42 rsbivand * [r235] ChangeLog, inst/ChangeLog: attempts to limit memory hunger 2011-03-30 14:40 rsbivand * [r234] R/AAA.R, R/rgeos_util.R, src/rgeos_poly2nb.c, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: attempts to limit memory hunger 2011-03-29 08:25 rsbivand * [r233] DESCRIPTION, R/rgeos_util.R, man/experimental-functions.Rd, man/topo-bin-gIntersection.Rd, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_poly2nb.c: STRtree for Polygons 2011-03-28 09:40 rsbivand * [r232] ChangeLog, inst/ChangeLog: documenting hole checking for Polygons objects 2011-03-28 09:39 rsbivand * [r231] R/AAA.R: documenting hole checking for Polygons objects 2011-03-28 09:29 rsbivand * [r230] ChangeLog, inst/ChangeLog: documenting hole checking for Polygons objects 2011-03-28 09:28 rsbivand * [r229] DESCRIPTION, configure, configure.in, man/comment-functions.Rd: documenting hole checking for Polygons objects 2011-03-26 19:41 rsbivand * [r228] R/rgeos_buffer.R, R/rgeos_misc.R: adding projection check for buffer and misc 2011-03-26 19:29 rsbivand * [r227] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_buffer.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, R/rgeos_util.R, man/comment-functions.Rd, src/rgeos_geos2R.c, tests/test-all.R: imposing polygon checking unless option set 2011-03-21 10:13 rsbivand * [r226] ChangeLog, inst/ChangeLog: prerelease 2011-03-21 09:04 rsbivand * [r225] ChangeLog, inst/ChangeLog: prerelease 2011-03-21 09:03 rsbivand * [r224] DESCRIPTION: prerelease 2011-02-26 23:03 rsbivand * [r223] inst/tests/test-jts-xml.R: xml file reading wrapper for 32-bit libxml2 on F14 in tests 2011-02-06 14:58 rsbivand * [r222] R/AAA.R: suppress startup messages 2010-11-30 17:38 rsbivand * [r221] ChangeLog, inst/ChangeLog: tidy 2010-11-24 12:31 rsbivand * [r220] R/rgeos_topology.R, R/rgeos_util.R, man/topo-bin-gUnion.Rd: g*STRtreeQuery added to experimental 2010-11-24 10:44 rsbivand * [r219] man/experimental-functions.Rd: g*STRtreeQuery added to experimental 2010-11-24 10:39 rsbivand * [r218] ChangeLog, inst/ChangeLog: g*STRtreeQuery added to experimental 2010-11-24 10:39 rsbivand * [r217] DESCRIPTION, NAMESPACE, R/rgeos_util.R, man/experimental-functions.Rd, src/rgeos_poly2nb.c: g*STRtreeQuery added to experimental 2010-11-19 21:56 rsbivand * [r216] .Rbuildignore: add rgeos_unary_STRtree_query and rgeos_binary_STRtree_query 2010-11-19 21:54 rsbivand * [r215] src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_poly2nb.c: add rgeos_unary_STRtree_query and rgeos_binary_STRtree_query 2010-11-19 13:18 rsbivand * [r214] src/rgeos_poly2nb.c: STRtree attempts 2010-11-18 23:07 crundel * [r213] inst/tests/testxml/vivid: Removing empty folder 2010-11-08 20:43 rsbivand * [r212] ChangeLog, inst/ChangeLog: tidy 2010-11-08 20:42 rsbivand * [r211] DESCRIPTION: tidy 2010-11-08 20:39 rsbivand * [r210] ChangeLog, inst/ChangeLog: tidy 2010-11-08 20:05 crundel * [r209] inst/poly-ex-gpc, inst/poly-ex-gpc/ex-poly1.txt, inst/poly-ex-gpc/ex-poly2.txt, inst/poly-ex-gpc/hole-poly.txt: Added gpc polygon example data files 2010-11-08 20:02 crundel * [r208] data, man/class-gpc.poly.Rd, man/experimental-functions.Rd: More clean up 2010-11-08 19:44 crundel * [r207] DESCRIPTION, inst/tests/test-jts-xml.R, man, man/class-gpc.poly.Rd, tests, tests/test-all.R: Package clean up for release 2010-11-07 19:38 rsbivand * [r206] ChangeLog, inst/ChangeLog: tidy 2010-11-07 19:18 rsbivand * [r205] configure.win, src/Makevars.win: Windows static build 2010-11-01 18:02 crundel * [r204] R/rgeos_misc.R, src/rgeos_R2geos.c: Fixed a bug in handling polygons with holes but no comment. 2010-09-29 17:51 crundel * [r203] NAMESPACE, R/rgeos_util.R: 2010-09-26 20:29 crundel * [r202] R/rgeos_util.R, src/rgeos_R2geos.c, tests/test-all.R: Small fixes to get CHECK to work 2010-09-09 20:47 crundel * [r201] src/rgeos_R2geos.c: Changed translate functions so that unassigned holes are ignored and a warning reported. 2010-09-09 19:56 crundel * [r200] NAMESPACE, R/gpc_geos.R, R/rgeos.R, R/rgeos_util.R, man/checkHolesGPC.Rd, man/checkPolygonsGEOS.Rd, man/comment-functions.Rd, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_validate.c: Removed checkPolygonsGEOS and checkHolesGPC functions and replaced then with createPolygonsComment and createSPComment functions. Similar functionality, but removes guessing of hole status for polygons and focuses on assign ownership via comment attributes. 2010-08-16 12:36 crundel * [r199] src/rgeos_predicate_binary.c: Added const to prepared geometry to deal with compiler warning 2010-08-16 12:34 crundel * [r198] man/pred-binary-gEquals.Rd, man/pred-binary-gRelate.Rd: Small docs typo fix 2010-08-16 12:31 crundel * [r197] inst/tests/test-jts-xml.R, tests/test-all.R: Small test fixes Some of the tests in the JTS xml files are skipped due to compatibility issues, see descSkip 2010-08-16 12:27 crundel * [r196] R/rgeos_predicate_binary.R, man/pred-binary-gEquals.Rd, man/pred-binary-gRelate.Rd, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-unary-gSimplify.Rd: Small documentation fixes Put tol and pattern as 3rd arguments in gEquals and gRelate 2010-08-16 11:46 crundel * [r195] man/misc-gDistance.Rd, man/pred-binary-gContains.Rd, man/pred-binary-gCrosses.Rd, man/pred-binary-gEquals.Rd, man/pred-binary-gIntersects.Rd, man/pred-binary-gRelate.Rd, man/pred-binary-gTouches.Rd, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd, man/topo-unary-gPolygonize.Rd, man/topo-unary-gSimplify.Rd: Documentation update 2010-08-16 11:45 crundel * [r194] NAMESPACE: Commented out poly_findInBoxGEOS 2010-08-16 10:25 crundel * [r193] R/rgeos_topology.R: Simplified function arguments for gSimplify since byid doesnt really matter. 2010-08-16 09:10 crundel * [r192] R/rgeos_spExtensions_Methods.R: Added isGenerics checks for row.names and row.names<- 2010-08-16 09:09 crundel * [r191] NAMESPACE, R/rgeos_predicate_binary.R: Separated Equals and EqualsExact back into different functions, had misunderstood how they worked. Removed groupID from NAMESPACE for the time being, probably needs to be reimplemented in C. 2010-08-15 13:46 crundel * [r190] man/misc-gArea.Rd, man/misc-gBuffer.Rd, man/misc-gDistance.Rd, man/misc-gLength.Rd, man/pred-unary-gIsEmpty.Rd, man/pred-unary-gIsRing.Rd, man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd: Documentation update 2010-08-15 13:44 crundel * [r189] NAMESPACE, R/rgeos_buffer.R, R/rgeos_predicate_binary.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c: Fixed bug with gRelate when pattern was specified Combined gEquals and gEqualsExact functions by adding tol argument to gEquals Changed default of byid in gBuffer to FALSE for consistency 2010-08-15 10:07 crundel * [r188] R/rgeos_misc.R: Fixed bug, GEOSArea_r was being called by both gLength and gArea 2010-08-15 10:06 crundel * [r187] NAMESPACE: Removed reference for gHasZ, no use for the function currently as 3d geometries are not supported 2010-08-15 10:05 crundel * [r186] src/rgeos_predicate_unary.c: Cleaned up code / variable declarations 2010-08-14 11:47 crundel * [r185] man/pred-unary-gIsValid.Rd: Fixed extra line in example, and linearring example 2010-08-14 10:51 crundel * [r184] man/gpc-new-generics.Rd: Added alias to symdiff function 2010-08-14 10:51 crundel * [r183] NAMESPACE, R/rgeos_predicate_unary.R, inst/tests/test-jts-xml.R: Unary Predicate functions renamed 2010-08-14 10:50 crundel * [r182] man/pred-unary-gIsSimple.Rd, man/pred-unary-gIsValid.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd, man/wkt-functions.Rd: Documentation update 2010-08-11 13:41 crundel * [r181] R/rgeos_util.R, man/utility-functions.Rd: Small bugfix / typo fix 2010-08-11 12:46 crundel * [r180] NAMESPACE, R/rgeos_util.R, man/utility-functions.Rd: Utility function documentation Renamed argument in checkP4S to p4s for the sake of brevity 2010-08-11 12:19 crundel * [r179] NAMESPACE, R/rgeos_util.R, inst/tests/test-translate-empty.R, inst/tests/test-translate.R: Renamed function doubletranslate to translate 2010-08-11 12:18 crundel * [r178] man/checkHolesGPC.Rd: Removed empty documentation sections 2010-08-11 12:14 crundel * [r177] NAMESPACE, R/rgeos.R: Removed unused intersection functions 2010-08-11 12:14 crundel * [r176] man/gpc.poly-class.Rd, man/gpc.poly.nohole-class.Rd, man/new-generics.Rd, man/polyfile.Rd: Files renamed 2010-08-11 12:13 crundel * [r175] man/class-Ring.Rd, man/class-SpatialCollections.Rd, man/class-SpatialRings.Rd, man/class-SpatialRingsDataFrame.Rd, man/class-gpc.poly.Rd, man/class-gpc.poly.nohole.Rd, man/constructor-SpatialCollections.Rd, man/constructor-SpatialRings.Rd, man/gpc-new-generics.Rd, man/gpc-polyfile.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd: Documentation update, changed naming convention to keep things clear 2010-08-10 18:04 crundel * [r174] man/topo-bin-gUnion.Rd: Fixed function argument ordering in gLineMerge usage. 2010-08-10 18:02 crundel * [r173] man/topo-unary-gBoundary.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd: Fixed incorrect function names in usage section 2010-08-10 17:57 crundel * [r172] tests/test-all.R: Fixed test path 2010-08-10 17:56 crundel * [r171] man/gpc.poly-class.Rd: Removed triangulate example 2010-08-10 17:49 crundel * [r170] man/gIntersection.Rd, man/gUnion.Rd, man/topo-bin-gDifference.Rd, man/topo-bin-gIntersection.Rd, man/topo-bin-gSymdifference.Rd, man/topo-bin-gUnion.Rd, man/topo-unary-gBoundary.Rd, man/topo-unary-gCentroid.Rd, man/topo-unary-gConvexHull.Rd, man/topo-unary-gEnvelope.Rd, man/topo-unary-gPointOnSurface.Rd: Preliminary documentation for all topology functions along with examples. Changed Rd file naming scheme for clarity 2010-08-10 17:48 crundel * [r169] R/rgeos_topology.R: Changed argument order for topology functions for the sake of consistency. 2010-08-10 13:26 crundel * [r168] R/rgeos_topology.R: Fixed bug in gPolygonizer 2010-08-10 13:24 crundel * [r167] man/gpc.poly-class.Rd, man/gpc.poly.nohole-class.Rd, man/new-generics.Rd, man/polyfile.Rd: Updated documentation files for gpcpoly functions 2010-07-27 06:08 crundel * [r166] inst/tests/test-jts-xml.R: Fixed (working) version of jts xml test processing 2010-07-27 05:15 crundel * [r165] inst/tests/test-translate-empty.R, inst/tests/test-translate.R: Added setScale() call to begin of each set of tests to reset scale option (changed by some of the JTS tests) 2010-07-27 05:14 crundel * [r164] NAMESPACE, R/rgeos_predicate_binary.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c: Added prepared geometry functions - gContainsProperly, gCovers, gCoveredBy and prepared variants of gIntersects and gContains specified by a flag. 2010-07-27 05:04 crundel * [r163] R/rgeos_util.R: Fixed bug, extra ) in double translate 2010-07-27 03:44 crundel * [r162] inst/tests/test-empty-geom.R, inst/tests/test-translate-empty.R, inst/tests/test-translate.R: Changed phrasing of some of the tests in translate to make it easier to distinguish between similar tests. Renamed test-empty-geom.R to test-translate-empty.R 2010-07-25 09:15 crundel * [r161] R/rgeos_util.R, R/rgeos_wkt.R, src/rgeos_R2geos.c, src/rgeos_geos2R.c: Fixed bug in passing ids during translation 2010-07-25 08:08 crundel * [r160] R/rgeos_predicate_binary.R: Removed more leftover debug messaging 2010-07-25 07:56 crundel * [r159] R/rgeos_predicate_binary.R: Fixed bug in gRelate, still called RGEOSRelate and passed byid instead of pattern as 3rd argument 2010-07-25 06:31 crundel * [r158] src/rgeos_geos2R.c: Removed leftover debug messages 2010-07-25 06:24 crundel * [r157] inst/tests/test-empty-geom.R: Added test for GEOMETRYCOLLECTION EMPTY 2010-07-25 06:23 crundel * [r156] R/rgeos_wkt.R: Fixed bug to handle null geometries 2010-07-25 06:22 crundel * [r155] src/rgeos_R2geos.c, src/rgeos_geos2R.c: Fixed bugs handling empty geometries, collections were getting turned into nulls. Now only GEOMETRYCOLLECTION EMPTY returns null. 2010-07-24 07:03 crundel * [r154] NAMESPACE, R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_topology.c: Added gSimplify and gPolygonize functionality, no idea how the latter works 2010-07-24 03:19 crundel * [r153] src/rgeos_R2geos.c: Fixed bug in R2geos translate function for SpatialPoints object without row names. 2010-07-19 18:17 crundel * [r152] NAMESPACE, R/rgeos_spExtensions_Methods.R, R/rgeos_util.R, R/rgeos_wkt.R: Small fixes for handling SpatialCollections 2010-07-19 06:28 crundel * [r151] src/rgeos_R2geos.c, src/rgeos_geos2R.c: Initial implementation of translation of SpatialCollections classes to and from geos. 2010-07-19 04:58 crundel * [r150] R/rgeos_spExtensions_Methods.R: Fixed bug in SpatialCollections print method to use NA as default polygon color if col is not specified. 2010-07-19 04:27 crundel * [r149] R/rgeos_spExtensions_Methods.R: Fixed bug in SpatialCollections print method to have the proper range 2010-07-19 04:17 crundel * [r148] NAMESPACE: Export SpatialCollections classes and constructor 2010-07-19 04:16 crundel * [r147] R/rgeos_SpatialCollections.R, R/rgeos_SpatialRings.R, R/rgeos_SpatialRingsDataFrame.R, R/rgeos_spExtensions_Classes.R, R/rgeos_spExtensions_Methods.R: Combined SpatialCollections and SpatialRings extension classes into the same file (SpatialCollections depends on SpatialRings this way we can be sure that the latter is defined first) 2010-07-19 01:46 crundel * [r146] R/rgeos_SpatialCollections.R: Initial implementation of SpatialCollections with plot method missing additional helper methods 2010-07-17 04:56 crundel * [r145] R/Rgpc_funcs.R, R/gpc_geos.R, src/gpc_geos.c: Updated gpc replacement functions, added translation functions to and from gpc and sp 2010-07-17 04:54 crundel * [r144] man/LinesIntersections.Rd, man/gIntersection.Rd, man/gUnion.Rd, man/gpc.poly-class.Rd, man/thinnedSpatialPolyGEOS.Rd, man/unionSpatialPolygonsGEOS.Rd: Documentation update -removed thinnedSpatialPolyGEOS.Rd -replaced LinesIntersections.Rd with gIntersections.Rd -replaced unionSpatialPolygons.Rd with gUnion.Rd -removed unnecessary example from gpc.poly-class.Rd 2010-07-17 04:51 crundel * [r143] NAMESPACE, R/rgeos_buffer.R, R/rgeos_linearref.R, R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_binary.R, src/init.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_misc.c, src/rgeos_predicate_binary.c, src/rgeos_topology_binary.c: Major Update switched from RGEOS prefix on functions to gFunction style. Old function names retained but with Deprecated warning. Removed "is" prefix from relevant functions Added binary topology functions (gUnion, gDifference, etc) Combined related functions (hausdorffdistance with distance etc) 2010-07-12 19:00 rsbivand * [r142] R/AAA.R, configure, configure.in: version 2010-07-12 18:55 rsbivand * [r141] inst/SVN_VERSION: version 2010-07-12 18:32 rsbivand * [r140] inst/SVN_VERSION: version 2010-07-12 18:32 rsbivand * [r139] inst/SVN_VERSION: version 2010-07-12 18:29 rsbivand * [r138] configure, configure.in: version 2010-07-12 18:24 rsbivand * [r137] R/AAA.R, configure, configure.in: version 2010-07-10 17:57 rsbivand * [r136] NAMESPACE: fixed NAMESPACE 2010-07-10 07:05 crundel * [r135] R/rgeos_wkt.R, src/rgeos_geos2R.c: Fixes for handling GEOMETRYCOLLECTION EMPTY, now returns NULL 2010-07-08 21:24 crundel * [r134] inst/tests/test-empty-geom.R: Bug fix - misnamed variabel 2010-07-08 21:19 crundel * [r133] R/rgeos_buffer.R, R/rgeos_topology.R, R/rgeos_wkt.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_buffer.c, src/rgeos_geos2R.c, src/rgeos_topology.c, src/rgeos_wkt.c: Removed all references to threshold in geos2R translate functions and calling functions 2010-07-08 21:17 crundel * [r132] man/LinesIntersections.Rd, man/thinnedSpatialPolyGEOS.Rd: Commented out current broken function calls 2010-07-08 21:05 crundel * [r131] R/rgeos_SpatialRingsDataFrame.R: Small bug fix in chFIDsSpatialRingsDataFrame 2010-07-08 20:52 crundel * [r130] R/rgeos_simplify.R, R/rgeos_union.R, src/rgeos_sp.c: Removed files, functionality will be replicated elsewhere 2010-07-08 20:17 crundel * [r129] inst/tests/test-empty-geom.R: Updated unit tests for handling empty geometries (added polygons and a few small fixes) 2010-07-08 20:16 crundel * [r128] src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_sp.c: Renamed functions for parsing polygons to and from geos and R to be more consistent Added handling for empty polygons to translate functions Removed thresholding from R2geos polygon translation functions. Will re-implement as a separate function. FIXME - remove threshold parameter from function calls Added rgeos_Pt2xy coordinate function for getting x and y coordinates from a geos point Added rgeos_crdMatFixDir which ensures coordinate direction is correct in a coordinate matrix depending of if it is a hole or not 2010-07-08 20:10 crundel * [r127] R/rgeos_SpatialRings.R: Fixed Ring class constructor to check the direction of points, if not CW then reverses them. 2010-06-27 22:25 crundel * [r126] inst/tests/test-empty-geom.R: Unit tests for empty geometries and their translations 2010-06-27 07:49 crundel * [r125] src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c: Separated LinearRing translate functions from Linestring functions Fixed R2geos translation of empty geometries 2010-06-26 22:24 crundel * [r124] NAMESPACE: Export class constructor functions 2010-06-26 22:23 crundel * [r123] inst/tests/test-translate.R, src/rgeos_R2geos.c, src/rgeos_geos2R.c: Translate functions for SpatialRings, fixed translate unit tests to use the proper class. 2010-06-26 22:23 crundel * [r122] R/rgeos_buffer.R, R/rgeos_misc.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_util.R: Removed extractIDs function, uses row.names instead 2010-06-26 18:54 crundel * [r121] src/rgeos_geos2R.c: Initial handling of empty points and empty linestrings proof of concept (probably doesn't play well with existing sp methods) 2010-06-26 18:50 crundel * [r120] src/rgeos_coord.c: Cleaned code 2010-06-26 18:44 crundel * [r119] src/rgeos_bbox.c: Cleaned code 2010-06-26 18:42 crundel * [r118] NAMESPACE, R/rgeos_SpatialRings.R, R/rgeos_SpatialRingsDataFrame.R: Initial implementation of SpatialRings and SpatialRingsDataFrame classes based on SpatialLines 2010-06-26 18:41 crundel * [r117] R/rgeos_wkt.R: changed readWKT, let GEOS do all parsing/checking of WKTs instead of trying to sort it out in R. 2010-06-26 02:04 crundel * [r116] src/rgeos_R2geos.c: Cleaned up c code, no changes in functionality 2010-06-21 02:36 crundel * [r115] tests/.Rhistory: Removed .Rhistory 2010-06-15 17:13 rsbivand * [r114] R/AAA.R: keyword on load 2010-06-15 17:10 rsbivand * [r113] ChangeLog, inst/ChangeLog: keyword on load 2010-06-15 17:09 rsbivand * [r112] R/AAA.R: keyword on load 2010-06-14 05:30 crundel * [r111] src/rgeos_bbox.c, src/rgeos_buffer.c, src/rgeos_coord.c, src/rgeos_misc.c, src/rgeos_wkt.c: Cleaned c code formatting 2010-06-12 20:38 crundel * [r110] src/rgeos_area.c, src/rgeos_geos2R.c: Cleaned code in rgeos_LinearRingPolygon removed dependence on rgeos_csArea. Uses GEOSArea_r now. Should be slightly faster. Removed rgeos_area.c (rgeos_csArea only referenced in rgeos_LinearRingPolygon) 2010-06-12 19:48 crundel * [r109] src/rgeos.c, src/rgeos.h: Cleaned code in rgeos.c 2010-06-10 00:50 crundel * [r107] R/rgeos_misc.R, R/rgeos_predicate_binary.R, src/rgeos_misc.c, src/rgeos_predicate_binary.c: Modified Binary predicate functions and distance functions to allow byid to be of length 2 to indicate if one geometry should be processed by id and the other not. 2010-06-09 23:25 crundel * [r106] NAMESPACE: Forgot to add groupID to NAMESPACE 2010-06-09 23:22 crundel * [r105] NAMESPACE, R/rgeos_topology.R, R/rgeos_util.R, man/unionSpatialPolygonsGEOS.Rd, src/init.c, src/rgeos.h, src/rgeos_sp.c, src/rgeos_topology.c: Added RGEOSUnionCascaded, replicates unionSpatialPolygonsGEOS functionality but is currently slower. Added groupID utility function which restructures a SP object based on newly assigned IDs, subobjects with the same ID are grouped together. General solution to the need to flatten SpatialPolygons for use with RGEOSUnionCascaded, but may be too slow for practical use. 2010-06-07 09:02 rsbivand * [r104] inst/ChangeLog: update changelog 2010-06-07 08:54 rsbivand * [r103] ChangeLog: update changelog 2010-06-07 08:28 rsbivand * [r102] DESCRIPTION, NAMESPACE, src/gpc_geos.c, src/init.c, src/rgeos_coord.c, src/rgeos_sp.c: tidying up to run CMD check 2010-06-07 05:01 crundel * [r101] src/rgeos_topology_binary.c: 2010-06-07 04:28 crundel * [r100] src/rgeos_R2geos.c: Handles Spatial DataFrame classes, currently just ignores the data frame 2010-06-07 02:51 crundel * [r99] R/rgeos_topology_binary.R, R/rgeos_topology_relation.R: Renamed rgeos_topology_relation to rgeos_topology_binary 2010-06-06 05:48 crundel * [r98] src/rgeos_topology.c: Fixed error message typos (referred to wrong parent function) 2010-06-06 05:37 crundel * [r97] R/rgeos_predicate_binary.R, R/rgeos_topology_relation.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: Fixed issue with argument number mismatch in binary predicate function. Binary predicate functions take into account when the result is symmetric and perform only the necessary calculations. RGEOSRelate and RGEOSRelatePattern moved to rgeos_binary_ predicate 2010-06-05 21:33 crundel * [r96] R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_relation.R, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_predicate_binary.c, src/rgeos_predicate_unary.c: Fixed issues with binary predicate issue (temporarily remove rgeos_relatepattern) Added Unary Predicate Functions 2010-06-03 22:46 crundel * [r95] src/rgeos.h, src/rgeos_misc.c, src/rgeos_predicate_binary.c, src/rgeos_topology.c: Removed the enum for each function and just passing a function pointer directly now. 2010-06-02 03:44 crundel * [r94] R/rgeos_misc.R, R/rgeos_predicate_binary.R, src/init.c, src/rgeos.h, src/rgeos_predicate_binary.c: Added binary predicate functions: RGEOSDisjoint, RGEOSTouches, RGEOSIntersects, RGEOSCrosses, RGEOSWithin, RGEOSContains, RGEOSOverlaps, RGEOSEquals Generalized functions in rgeos_misc 2010-06-02 00:35 crundel * [r93] R/rgeos_topology.R, src/init.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_misc.c, src/rgeos_topology.c: Added RGEOSLineMerge Generalized function calls in topology and misc, functions with the same type of parameters and differ only in the GEOS function used are processed by the same function. Small bug fixes in coord and geos2R 2010-05-31 03:05 crundel * [r92] R/rgeos_misc.R, src/init.c, src/rgeos.h, src/rgeos_misc.c: Added RGEOSHausdorffDistance, combined underlying C code with rgeosdistance since everything is the same except for the geos function call. FIXME - currently uses function pointers which are causing gcc warnings, but code appears to work. 2010-05-30 21:53 crundel * [r91] R/rgeos_misc.R, src/init.c, src/rgeos.h, src/rgeos_misc.c: Added RGEOSDistance and RGEOSisWithinDistance in rgeos_misc 2010-05-30 21:14 crundel * [r90] R/rgeos_misc.R, src/init.c, src/rgeos.h, src/rgeos_misc.c: Added RGEOSArea and RGEOSLength in rgeos_misc 2010-05-30 20:40 crundel * [r89] src/rgeos.h: More cleaning of rgeos.h 2010-05-30 20:38 crundel * [r88] src/rgeos_contains.c, src/rgeos_distance.c, src/rgeos_length.c: Removed rgeos_contains.c, rgeos_distance.c, rgeos_length.c functionality will be covered by rgeos_misc.c 2010-05-30 20:37 crundel * [r87] src/init.c, src/rgeos.h: Removed rgeos_contains.c, rgeos_distance.c, rgeos_length.c functionality will be covered by rgeos_misc.c Cleaned up init.c and rgeos.h 2010-05-30 20:15 crundel * [r86] R/rgeos_buffer.R, src/rgeos_buffer.c: Added RGEOSBuffer 2010-05-30 20:11 crundel * [r85] R/rgeos_util.R: Added default value for setScale 2010-05-30 20:10 crundel * [r84] src/rgeos_poly2nb.c, src/rgeos_sp.c, src/rgeos_validate.c: Updated function names 2010-05-29 09:38 crundel * [r83] NAMESPACE, R/rgeos_wkt.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_geos2R.c, src/rgeos_wkt.c: Added writeWKT, small fixes to translate functions 2010-05-27 19:47 crundel * [r82] NAMESPACE, R/rgeos_buffer.R, R/rgeos_linearref.R, R/rgeos_topology.R, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_buffer.c, src/rgeos_predicate_unary.c, src/rgeos_topology.c: Added RGEOSBoundary, RGEOSGetCentroid, RGEOSPointOnSurface, RGEOSBuffer which mostly work 2010-05-26 17:59 rsbivand * [r81] ChangeLog, inst/ChangeLog: changelogs 2010-05-26 06:06 crundel * [r80] src/init.c: 2010-05-26 06:06 crundel * [r79] R/rgeos_topology.R, inst/tests/test-translate.R, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_geos2R.c, src/rgeos_sp.c, src/rgeos_topology.c: Small fixes to translation functions, everything should be working Updated test-translate.R with polygon unit tests Added RGEOSConvexHull (untested) 2010-05-24 04:40 crundel * [r78] R/rgeos_topology.R, R/rgeos_util.R, src/rgeos_topology.c: Added rgeos_envelope and RGEOSEnvelope functions 2010-05-24 04:25 crundel * [r77] src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_bbox.c, src/rgeos_geos2R.c: Unified bounding box functions, geom2bbox should work for all geometry types now 2010-05-23 08:03 crundel * [r76] NAMESPACE, R/rgeos_util.R, R/rgeos_wkt.R, inst/tests, inst/tests/test-jts-xml.R, inst/tests/test-translate.R, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_coord.c, src/rgeos_geos2R.c: Added proper ID handling to translation functions and readWKT. Currently point ids are stored as row names which is a design decision that should be revisited later (current implementation works, but probably doesn't integrate well with existing sp tools) Added fixes to test-translate.R, mostly related to IDs Removed SP2WKT (which never worked) and WKT2SP in favor of readWKT - revisit naming convention? 2010-05-21 22:00 crundel * [r75] NAMESPACE: 2010-05-21 22:00 crundel * [r74] R/rgeos_util.R, R/rgeos_wkt.R, inst/tests/test-translate.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_geos2R.c, src/rgeos_sp.c, tests/test-all.R: Added rgeos_convert_R2geos - generic function to translate R sp objects to geos geometries Moved rgeos_Polygons_i_2Polygon to rgeos_R2geos.c Added rgeos_double_translate which translates R->geos->R for testing purposes Added test-translate.R with unit tests for translations - currently tests Points, Lines, and Rings readWKT fix - if the result is only one object return it and not a list of objects 2010-05-21 00:59 crundel * [r73] src/rgeos_coord.c: Broke the geospoint2crdMat in the last commit, fixes POINT and MULTIPOINT cases 2010-05-20 22:46 crundel * [r72] src/rgeos_coord.c, src/rgeos_geos2R.c: Cleaned up / clarified point and line handling code 2010-05-20 21:25 crundel * [r71] src/rgeos_geos2R.c: Added handling of geometry collections of Lines and Multilines and Linear Rings 2010-05-20 20:40 rsbivand * [r70] src/rgeos_sp.c: temp FIXME in Line Intersection 2010-05-19 04:37 crundel * [r69] src/init.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_sp.c: Updated handling conversion of geos points to R to handle geometry collections of points and multipoints 2010-05-17 21:51 crundel * [r68] src/rgeos_geos2R.c: Fix to rgeos_multiline2SpatialLines, SpatialLines class was being built incorrectly, Lines class is now added to a list before being attached 2010-05-17 02:33 crundel * [r67] R/rgeos_util.R, R/rgeos_wkt.R, src/init.c, src/rgeos.h, src/rgeos_bbox.c, src/rgeos_geos2R.c, src/rgeos_wkt.c: Added rgeos_multiline2SpatialLines function to covert LINESTRING and MULTILINESTRING to SpatialLines Added rgeos_convert_geos2R function which is geometry type agnostic and calls other conversion functions based on geometry type Fixed rgeos_crdMat2bbox function to make updates to an existing bbox, added rgeos_initbbox and rgeos_formatbbox helper functions Added checkP4S for basic proj4string checking and initialization, should now be handled in R and an initialized CRS class passed to conversion functions Other small code cleanups 2010-05-15 05:41 crundel * [r66] src/init.c, src/rgeos_R2geos.c: More merge fixes 2010-05-15 05:39 crundel * [r65] src/rgeos.h: Broke rgeos.h somehow while merging. 2010-05-15 05:28 crundel * [r64] ., NAMESPACE, R, R/AAA.R, R/rgeos_wkt.R, inst/tests, inst/tests/test-jts-xml.R, inst/tests/testxml, inst/tests/testxml/general, inst/tests/testxml/general/TestBoundary.xml, inst/tests/testxml/general/TestCentroid.xml, inst/tests/testxml/general/TestConvexHull-big.xml, inst/tests/testxml/general/TestConvexHull.xml, inst/tests/testxml/general/TestFunctionAA.xml, inst/tests/testxml/general/TestFunctionAAPrec.xml, inst/tests/testxml/general/TestFunctionLA.xml, inst/tests/testxml/general/TestFunctionLAPrec.xml, inst/tests/testxml/general/TestFunctionLL.xml, inst/tests/testxml/general/TestFunctionLLPrec.xml, inst/tests/testxml/general/TestFunctionPA.xml, inst/tests/testxml/general/TestFunctionPL.xml, inst/tests/testxml/general/TestFunctionPLPrec.xml, inst/tests/testxml/general/TestFunctionPP.xml, inst/tests/testxml/general/TestInteriorPoint.xml, inst/tests/testxml/general/TestRectanglePredicate.xml, inst/tests/testxml/general/TestRelateAA.xml, inst/tests/testxml/general/TestRelateAC.xml, inst/tests/testxml/general/TestRelateLA.xml, inst/tests/testxml/general/TestRelateLC.xml, inst/tests/testxml/general/TestRelateLL.xml, inst/tests/testxml/general/TestRelatePA.xml, inst/tests/testxml/general/TestRelatePL.xml, inst/tests/testxml/general/TestRelatePP.xml, inst/tests/testxml/general/TestSimple.xml, inst/tests/testxml/general/TestValid.xml, inst/tests/testxml/general/TestValid2-big.xml, inst/tests/testxml/general/TestValid2.xml, inst/tests/testxml/general/TestWithinDistance.xml, inst/tests/testxml/robust, inst/tests/testxml/robust/ExternalRobustness.xml, inst/tests/testxml/robust/TestRobustOverlayFixed.xml, inst/tests/testxml/robust/TestRobustOverlayFloat.xml, inst/tests/testxml/robust/TestRobustRelate.xml, inst/tests/testxml/validate, inst/tests/testxml/validate/TestRelateAA-big.xml, inst/tests/testxml/validate/TestRelateAA.xml, inst/tests/testxml/validate/TestRelateAC.xml, inst/tests/testxml/validate/TestRelateLA.xml, inst/tests/testxml/validate/TestRelateLC.xml, inst/tests/testxml/validate/TestRelateLL.xml, inst/tests/testxml/validate/TestRelatePA.xml, inst/tests/testxml/validate/TestRelatePL.xml, inst/tests/testxml/validate/TestRelatePP.xml, inst/tests/testxml/vivid, src, src/gpc_geos.c, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_bbox.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_length.c, src/rgeos_sp.c, src/rgeos_wkt.c, tests, tests/.Rhistory, tests/test-all.R: Fixed issue where CoordSeq were not being destroyed Added some initial work on UnitTests using testthat package, testxml folder contains xml test files from JTS General cleaning and reorganization of C code. Added functions to convert point and multipoint geos geometries Added readWKT functions that are geometry agnostic 2010-05-13 20:10 crundel * [r63] R/rgeos_misc.R, R/rgeos_predicate_binary.R, R/rgeos_predicate_unary.R, R/rgeos_topology.R, R/rgeos_topology_relation.R: Created new files with basic rgeos functions organized by task, each file contains empty function definitions. 2010-05-06 16:19 rsbivand * [r62] ChangeLog, inst/ChangeLog: use points not polygons for b-box intersection envelope in poly2nb 2010-05-06 16:19 rsbivand * [r61] R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_poly2nb.c: use points not polygons for b-box intersection envelope in poly2nb 2010-05-05 08:42 rsbivand * [r60] ChangeLog, inst/ChangeLog: bounding box intersections 2010-05-05 08:41 rsbivand * [r59] NAMESPACE, R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_poly2nb.c: bounding box intersections 2010-05-03 17:19 rsbivand * [r58] DESCRIPTION: increment DESCRIPTION version # 2010-05-03 16:35 rsbivand * [r57] DESCRIPTION, R/AAA.R, R/rgeos.R: increment DESCRIPTION version # 2010-05-03 14:04 rsbivand * [r56] src/rgeos.c, src/rgeos.h, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_validate.c, src/rgeos_wkt.c: removing inline declaration in rgeos.h - see comment 2010-05-03 13:33 rsbivand * [r55] src/Makevars: removing pkg/src/Makevars - auto-generated from Makevars.in 2010-05-03 05:24 crundel * [r54] NAMESPACE, R/AAA.R, R/rgeos.R, R/rgeos_util.R, R/rgeos_wkt.R, src/Makevars, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_R2geos.c, src/rgeos_area.c, src/rgeos_coord.c, src/rgeos_geos2R.c, src/rgeos_sp.c, src/rgeos_validate.c, src/rgeos_wkt.c: Tidying existing functions, roughly grouped into files by task. Added functions for WKT output. Fixed precision issue leading to small polygons not being joined. Added functionality to get, set, and use a scale variable that determines min precision with appropriate rounding functions from GEOS. 2010-04-29 14:35 rsbivand * [r53] R/rgeos.R, man/LinesIntersections.Rd: fix poly2nb framework (non-operational) 2010-04-28 08:44 rsbivand * [r52] R/AAA.R, R/rgeos.R, R/rgeos_simplify.R, R/rgeos_union.R, src/gpc_geos.c, src/rgeos.c, src/rgeos.h, src/rgeos_distance.c, src/rgeos_length.c, src/rgeos_sp.c: tidy 2010-04-26 08:32 rsbivand * [r51] R/rgeos.R: starting poly2nb 2010-02-12 12:27 rsbivand * [r50] DESCRIPTION, NAMESPACE, R/AAA.R, R/Rgpc_funcs.R, R/gpc_geos.R, R/rgeos.R, R/rgeos_simplify.R, R/rgeos_union.R, data, data/poly_ex.rda, man/checkHolesGPC.Rd, man/gpc.poly-class.Rd, man/new-generics.Rd, man/unionSpatialPolygonsGEOS.Rd, src/gpc_geos.c, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_contains.c, src/rgeos_distance.c, src/rgeos_length.c, src/rgeos_sp.c: adding gpc.poly <-> GEOS interface 2010-02-08 14:55 rsbivand * [r49] configure.win, src/Makevars.win: Windows DLL to static 2010-02-01 18:01 rsbivand * [r48] R/Rgpc_funcs.R: Rgpc functions 2010-02-01 12:21 rsbivand * [r47] configure.win: Win binaries to 320 2010-01-31 19:22 rsbivand * [r46] ChangeLog, inst/ChangeLog: union buffer scale problem 2010-01-31 19:21 rsbivand * [r45] man/checkHolesGPC.Rd: union buffer scale problem 2010-01-31 19:19 rsbivand * [r44] R/gpc_geos.R, R/rgeos.R, R/rgeos_union.R, man/checkPolygonsGEOS.Rd, man/unionSpatialPolygonsGEOS.Rd, src/gpc_geos.c, src/init.c, src/rgeos.h, src/rgeos_sp.c: union buffer scale problem 2010-01-27 10:53 rsbivand * [r43] R/gpc_geos.R, src/gpc_geos.c: refactoring for gpcpoly objects 2010-01-27 10:20 rsbivand * [r42] DESCRIPTION, NAMESPACE, R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_sp.c: refactoring for gpcpoly objects 2010-01-14 07:41 rsbivand * [r41] ChangeLog, inst/ChangeLog: declaration for Windows binary 2010-01-14 07:41 rsbivand * [r40] inst/README.windows: declaration for Windows binary 2010-01-13 19:37 rsbivand * [r39] ChangeLog, inst/ChangeLog: rgeos_finish declaration in init.c 2010-01-13 19:37 rsbivand * [r38] src/init.c: rgeos_finish declaration in init.c 2010-01-10 19:01 rsbivand * [r37] ChangeLog, inst/ChangeLog: hole verification fix 2010-01-10 19:00 rsbivand * [r36] DESCRIPTION, R/rgeos.R, man/checkPolygonsGEOS.Rd: hole verification fix 2010-01-07 18:50 rsbivand * [r35] ChangeLog, inst/ChangeLog: union dim fix 2010-01-07 18:49 rsbivand * [r34] ChangeLog, inst/ChangeLog: union dim fix 2010-01-07 18:49 rsbivand * [r33] R/rgeos_union.R: union dim fix 2010-01-07 18:14 rsbivand * [r32] ChangeLog, inst/ChangeLog: missing man file 2010-01-07 18:11 rsbivand * [r31] man/LinesIntersections.Rd: missing man file 2010-01-07 12:08 rsbivand * [r30] DESCRIPTION, NAMESPACE, R/rgeos.R, src/init.c, src/rgeos.h, src/rgeos_sp.c: maptools integration 2010-01-04 09:35 rsbivand * [r29] configure.win: prepare for Windows binary 2010-01-04 07:48 rsbivand * [r28] configure.win: preparing for Windows build 2010-01-04 07:21 rsbivand * [r27] configure.win, src/Makevars.win, src/init.c, src/rgeos.h, src/rgeos_sp.c: preparing for Windows build 2010-01-03 16:41 rsbivand * [r26] src/init.c: tightening sp dependence 2010-01-03 16:36 rsbivand * [r25] DESCRIPTION, src/init.c, src/rgeos.c, src/rgeos.h, src/rgeos_sp.c, src/sp_rgeos.c: tightening sp dependence 2009-12-17 18:46 rsbivand * [r24] ChangeLog, inst/ChangeLog: C API tidy 2009-12-17 18:44 rsbivand * [r23] src/init.c, src/local_stubs.c: C API tidy 2009-12-17 18:42 rsbivand * [r22] DESCRIPTION, R/AAA.R, src/rgeos.h, src/rgeos_sp.c: C API tidy 2009-12-04 09:11 rsbivand * [r21] ChangeLog, inst/ChangeLog: small fixes from sp transition 2009-12-04 09:10 rsbivand * [r20] DESCRIPTION: small fixes from sp transition 2009-12-04 09:08 rsbivand * [r19] src/rgeos_sp.c: small fixes from sp transition 2009-12-03 08:50 rsbivand * [r18] svn2cl.xsl: first release 2009-12-03 08:47 rsbivand * [r17] ChangeLog, inst/ChangeLog: first release 2009-12-03 08:47 rsbivand * [r16] src/sp_rgeos.c: first release 2009-12-03 08:42 rsbivand * [r15] ChangeLog, inst, inst/ChangeLog: first release 2009-12-03 08:39 rsbivand * [r14] DESCRIPTION, NAMESPACE, R/AAA.R, R/rgeos_simplify.R, R/rgeos_union.R, configure, configure.in, man, man/checkPolygonsGEOS.Rd, man/thinnedSpatialPolyGEOS.Rd, man/unionSpatialPolygonsGEOS.Rd, src/Makevars.in, src/rgeos_length.c: first release 2009-12-02 21:03 rsbivand * [r13] R/rgeos.R, src/rgeos.h, src/rgeos_sp.c: status 2009-11-30 15:55 rsbivand * [r12] src/rgeos.h, src/rgeos_sp.c: simplify in and out 2009-11-29 20:52 rsbivand * [r11] src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: simplify in and out 2009-11-28 20:34 rsbivand * [r10] src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: simplify in and out 2009-11-25 20:52 rsbivand * [r9] src/rgeos.h, src/rgeos_sp.c: parse comment in C 2009-11-25 17:43 rsbivand * [r8] R/rgeos.R, src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: parse comment in C 2009-11-24 20:53 rsbivand * [r7] R/rgeos.R, src/rgeos.h, src/rgeos_sp.c: contains 2009-11-21 14:52 rsbivand * [r6] R/rgeos.R, src/rgeos.c, src/rgeos.h, src/rgeos_sp.c: after Oslo 2009-11-15 13:56 rsbivand * [r5] src/rgeos_sp.c: graphs and relations 2009-11-15 11:08 rsbivand * [r4] R/rgeos.R, src/rgeos.h, src/rgeos_sp.c: graphs and relations 2009-11-14 12:22 rsbivand * [r2] R, src, src/rgeos.c, src/rgeos.h, src/rgeos_contains.c, src/rgeos_distance.c, src/rgeos_length.c, src/rgeos_sp.c: initial C files 2009-05-28 12:17 stefan7th * [r1] .: R-Forge: updated repository structure rgeos/inst/SVN_VERSION0000644000176200001440000000000414455462430014145 0ustar liggesusers699 rgeos/inst/poly-ex-gpc/0000755000176200001440000000000014025150745014515 5ustar liggesusersrgeos/inst/poly-ex-gpc/ex-poly1.txt0000644000176200001440000000351414025150745016737 0ustar liggesusers1 105 317.3501 93.15816 317.364 93.22914 317.3727 93.3207 317.4023 93.38679 317.4785 93.38882 317.4871 93.45637 317.4670 93.52148 317.5072 93.65698 317.5528 93.7528 317.5552 93.84336 317.6117 93.86206 317.7282 93.8952 317.8046 93.81083 317.8712 93.69503 317.9629 93.60056 317.9215 93.43883 317.9315 93.25885 317.9963 93.10203 317.9284 93.04953 317.8426 92.97986 317.7969 92.8614 317.7409 92.89996 317.7889 92.82841 317.7360 92.73805 317.6357 92.69493 317.6026 92.72543 317.4844 92.64864 317.4445 92.54597 317.4242 92.4933 317.5481 92.4789 317.7326 92.37324 317.8098 92.29678 317.9795 92.2994 318.0062 92.15032 317.9915 92.04499 318.0591 92.0317 318.021 91.9497 317.9251 91.98268 317.8780 92.01659 317.815 92.02729 317.7812 92.05223 317.7314 92.03021 317.6697 91.98086 317.6577 91.9182 317.6082 91.94144 317.5317 91.98264 317.5407 91.90144 317.5102 91.79038 317.4726 91.74955 317.2593 91.74591 317.2033 91.7915 317.1228 91.7691 317.0824 91.7605 317.0843 91.77104 316.9512 91.7745 316.8917 91.7737 316.8837 91.78889 316.8023 91.77678 316.7249 91.78513 316.6370 91.77823 316.6003 91.72394 316.5545 91.73088 316.5038 91.77402 316.4809 91.71277 316.4164 91.72645 316.3707 91.74367 316.3026 91.71428 316.2563 91.702 316.2013 91.6787 316.1636 91.66837 316.2643 91.75067 316.2361 91.81156 316.3127 91.9039 316.3952 91.91097 316.4209 91.94312 316.4689 91.96004 316.4797 91.8893 316.5173 91.94232 316.5808 92.00445 316.6778 91.94444 316.8321 91.95919 316.8908 91.94161 316.8947 92.11817 316.8469 92.21952 316.9206 92.27069 316.8693 92.39573 316.8574 92.59142 316.8845 92.61746 317.0515 92.573 317.108 92.52248 317.1798 92.5366 317.2446 92.56925 317.3624 92.63748 317.4015 92.69787 317.2048 92.78319 317.1734 92.92751 317.3021 92.84552 317.3034 92.91617 317.3907 92.98261 317.4786 92.93507 317.4567 93.04823 317.5428 93.1414 317.4708 93.1045 317.4096 93.08861 317.3168 93.0415 rgeos/inst/poly-ex-gpc/hole-poly.txt0000644000176200001440000000005214025150745017163 0ustar liggesusers2 4 0 1 1 4 1 4 4 1 4 4 1 2 2 3 2 3 3 2 3 rgeos/inst/poly-ex-gpc/ex-poly2.txt0000644000176200001440000000233514025150745016740 0ustar liggesusers1 70 317.7923 92.71032 317.8721 92.81397 317.8161 92.86238 317.9423 92.94864 317.9708 93.06514 317.9024 93.14354 317.9944 93.10121 318.0435 93.05119 318.0752 93.15552 318.1362 93.34843 318.2878 93.38389 318.5084 93.41663 318.5511 93.25283 318.5019 93.18095 318.5958 93.02759 318.7896 92.88882 318.7635 92.77466 318.8625 92.76704 318.9 92.6019 318.8984 92.56074 318.8406 92.38701 318.9642 92.42784 319.0633 92.56795 319.1674 92.54714 319.1152 92.4234 319.0326 92.31596 319.1695 92.36221 319.0662 92.23476 319.0413 92.09074 319.1166 91.98645 319.2321 91.98661 319.2698 91.9251 319.1771 91.86553 318.9887 91.8624 318.7962 91.82497 318.5386 91.83337 318.4269 91.85156 318.2711 91.85401 318.168 91.87571 317.9057 91.87077 317.7538 91.78774 317.7905 91.94506 317.7827 91.9935 317.8094 92.01677 317.6982 91.97886 317.6621 91.8611 317.6485 91.8975 317.6089 91.939 317.5289 91.93032 317.5136 91.8742 317.3902 91.96788 317.3164 91.9879 317.3072 92.021 317.263 91.88749 317.2742 91.81092 317.1592 91.81743 317.0437 91.82041 317.0804 92.02054 317.0768 92.1367 317.2143 92.15653 317.3779 92.17453 317.5140 92.27006 317.5084 92.335 317.4464 92.41686 317.5979 92.42997 317.7568 92.3773 317.7674 92.48837 317.7331 92.54184 317.7872 92.59388 317.7876 92.69869 rgeos/inst/wkts/0000755000176200001440000000000014041735140013335 5ustar liggesusersrgeos/inst/wkts/sppsp.wkt0000644000176200001440000002164014025150745015240 0ustar liggesusersGEOMETRYCOLLECTION (LINESTRING (0.2655086600000000 0.6547239300000000, 0.2675082100000000 0.6737122300000000), LINESTRING (0.3721239000000000 0.3531972700000000, 0.2186452800000000 0.0948578600000000), LINESTRING (0.5728533600000000 0.2702601500000000, 0.5167968400000000 0.4925961200000000), LINESTRING (0.9082077900000000 0.9926840600000000, 0.2689505900000000 0.4615518400000000), LINESTRING (0.2016819300000000 0.6334932599999999, 0.1811683300000000 0.3752165300000000), LINESTRING (0.8983896800000000 0.2132081400000000, 0.5185761400000000 0.9910992199999999), LINESTRING (0.9446752700000000 0.1293723500000000, 0.5627829400000000 0.1763507100000000), LINESTRING (0.6607977900000001 0.4781180300000000, 0.1291568500000000 0.8134352100000000), LINESTRING (0.6291140400000000 0.9240744700000000, 0.2563676000000000 0.0684466400000000), LINESTRING (0.0617862700000000 0.5987609699999999, 0.7179352800000000 0.4004497500000000), LINESTRING (0.2059745700000000 0.9761706900000000, 0.9614099400000000 0.1411443300000000), LINESTRING (0.1765567500000000 0.7317925100000000, 0.1001408500000000 0.1933098600000000), LINESTRING (0.6870228500000000 0.3567269100000000, 0.7632226900000000 0.8413517200000000), LINESTRING (0.3841037200000000 0.4314736900000000, 0.9479663500000000 0.7199139900000000), LINESTRING (0.7698414200000000 0.1482115600000000, 0.8186346900000000 0.2672120800000000), LINESTRING (0.4976992400000000 0.0130775800000000, 0.3082923300000000 0.4950016400000000), LINESTRING (0.7176185100000000 0.7155660700000001, 0.6495794600000000 0.0831139000000000), LINESTRING (0.9919060900000000 0.1031842400000000, 0.9533554500000000 0.3538842400000000), LINESTRING (0.3800351800000000 0.4462843500000000, 0.9537326500000000 0.9692088100000000), LINESTRING (0.7774452200000000 0.6401010499999999, 0.3399792000000000 0.6247141899999999), LINESTRING (0.9347052300000001 0.9918386200000000, 0.2624741100000000 0.6646182500000000), LINESTRING (0.2121425200000000 0.4955935800000000, 0.1654539300000000 0.3124896600000000), LINESTRING (0.6516737700000000 0.4843495200000000, 0.3221680600000000 0.4056896100000000), LINESTRING (0.1255551000000000 0.1734423300000000, 0.5101252100000000 0.9960773700000000), LINESTRING (0.2672206700000000 0.7548209400000000, 0.9239684700000000 0.8550823600000000), LINESTRING (0.3861140900000000 0.4538954900000000, 0.5109597000000000 0.9535484000000000), LINESTRING (0.0133903300000000 0.5111697800000000, 0.2576212600000000 0.8123050900000000), LINESTRING (0.3823879600000000 0.2075451100000000, 0.0464608900000000 0.7821821200000000), LINESTRING (0.8696908500000000 0.2286581400000000, 0.4178562600000000 0.2678781300000000), LINESTRING (0.3403490000000000 0.5957120000000000, 0.8540015000000000 0.7621515300000000), LINESTRING (0.4820801200000000 0.5748722000000001, 0.3472306800000000 0.9863115900000000), LINESTRING (0.5995658300000000 0.0770643800000000, 0.1314423200000000 0.2936055500000000), LINESTRING (0.4935413100000000 0.0355405800000000, 0.3744868600000000 0.3993511100000000), LINESTRING (0.1862176000000000 0.6427954900000000, 0.6314202300000000 0.8121315200000000), LINESTRING (0.8273733200000000 0.9286152000000000, 0.3900789300000000 0.0771516700000000), LINESTRING (0.6684667399999999 0.5980924200000000, 0.6896278500000000 0.3636968100000000), LINESTRING (0.7942398600000000 0.5609007499999999, 0.6894134100000000 0.4425924700000000), LINESTRING (0.1079436300000000 0.5260277200000000, 0.5549006200000000 0.1567141300000000), LINESTRING (0.7237109500000000 0.9850952200000000, 0.4296244100000000 0.5822052700000000), LINESTRING (0.4112744300000000 0.5076418200000000, 0.4527200600000000 0.9701621800000000), LINESTRING (0.8209462900000000 0.6827880800000000, 0.3064432600000000 0.9894998300000000), LINESTRING (0.6470601900000000 0.6015412200000000, 0.5783539400000000 0.1764520400000000), LINESTRING (0.7829327600000000 0.2388686800000000, 0.9103703000000000 0.5421304200000000), LINESTRING (0.5530363100000000 0.2581659300000000, 0.1426040800000000 0.3843038900000000), LINESTRING (0.5297195800000000 0.7293096200000000, 0.4150476300000000 0.6761640500000000), LINESTRING (0.7893562300000000 0.4525708300000000, 0.2109257500000000 0.2692937800000000), LINESTRING (0.0233312000000000 0.1751267700000000, 0.4287503700000000 0.4692509400000000), LINESTRING (0.4772300700000000 0.7466982700000000, 0.1326899800000000 0.1718000800000000), LINESTRING (0.7323137400000000 0.1049876400000000, 0.4600964500000000 0.3691894600000000), LINESTRING (0.6927315600000000 0.8645449500000000, 0.9429570600000000 0.7254052700000000), LINESTRING (0.4776196200000000 0.6146449700000000, 0.7619738600000000 0.4861491000000000), LINESTRING (0.8612094800000000 0.5571595400000000, 0.9329098300000001 0.0638024700000000), LINESTRING (0.4380971100000000 0.3287773200000000, 0.4706785000000000 0.7845462300000000), LINESTRING (0.2447972800000000 0.4531314500000000, 0.6035880700000000 0.4183216400000000), LINESTRING (0.0706790500000000 0.5004409700000000, 0.4849896800000000 0.9810180800000000), LINESTRING (0.0994661600000000 0.1808663600000000, 0.1088063200000000 0.2828839600000000), LINESTRING (0.3162717100000000 0.5296306000000000, 0.2477268300000000 0.8478821500000000), LINESTRING (0.5186342600000000 0.0752757500000000, 0.4985145300000000 0.0822392300000000), LINESTRING (0.6620050800000000 0.2777559300000000, 0.3728667100000000 0.8864587500000000), LINESTRING (0.4068301900000000 0.2126995200000000, 0.9346913700000000 0.4719307300000000), LINESTRING (0.9128759200000000 0.2847904800000000, 0.5239860800000000 0.1091009600000000), LINESTRING (0.2936033700000000 0.8950941000000000, 0.3171446700000000 0.3332779800000000), LINESTRING (0.4590657300000000 0.4462353200000000, 0.2779660300000000 0.8374165700000000), LINESTRING (0.3323946700000000 0.7799848900000000, 0.7875405100000000 0.2768498400000000), LINESTRING (0.6508704700000000 0.8806190300000000, 0.7024625100000000 0.5870351400000000), LINESTRING (0.2580167800000000 0.4131242100000000, 0.1650276400000000 0.8367322699999999), LINESTRING (0.4785452500000000 0.0638084800000000, 0.0644575400000000 0.0711540200000000), LINESTRING (0.7663106700000000 0.3354874900000000, 0.7547056200000000 0.7027787400000000), LINESTRING (0.0842469100000000 0.7237259500000000, 0.6204100299999999 0.6988245400000000), LINESTRING (0.8753213300000000 0.3376153300000000, 0.1695767700000000 0.4639623800000000), LINESTRING (0.3390729400000000 0.6304141200000000, 0.0622140500000000 0.4369311100000000), LINESTRING (0.8394403499999999 0.8406145500000000, 0.1090292700000000 0.5621767900000000), LINESTRING (0.3466834900000000 0.8561316600000000, 0.3817163500000000 0.9284832300000000), LINESTRING (0.3337749300000000 0.3913592800000000, 0.1693109100000000 0.2304664100000000), LINESTRING (0.4763512500000000 0.3804938900000000, 0.2986525400000000 0.2218137500000000), LINESTRING (0.8921983400000000 0.8954454300000000, 0.1922095400000000 0.4202158900000000), LINESTRING (0.8643394700000000 0.6443157600000000, 0.2571700200000000 0.3335208100000000), LINESTRING (0.3899895400000000 0.7410786499999999, 0.1812318200000000 0.8648075500000000), LINESTRING (0.7773207000000000 0.6053034500000000, 0.4773137100000000 0.1771945400000000), LINESTRING (0.9606180000000000 0.9030816100000000, 0.7707370400000000 0.4933187300000000), LINESTRING (0.4346594800000000 0.2937301600000000, 0.0277871200000000 0.4297133700000000), LINESTRING (0.7125146800000000 0.1912601100000000, 0.5273107800000000 0.5642638400000000), LINESTRING (0.3999943700000000 0.8864509400000000, 0.8803190700000000 0.6561623200000000), LINESTRING (0.3253521500000000 0.5033394900000000, 0.3730633700000000 0.9785540600000000), LINESTRING (0.7570871500000000 0.8770575400000000, 0.0479591300000000 0.2321611500000000), LINESTRING (0.2026922600000000 0.1891936200000000, 0.1386282500000000 0.2408116000000000), LINESTRING (0.7111212200000000 0.7581030500000000, 0.3214921200000000 0.7968360799999999), LINESTRING (0.1216919200000000 0.7244988900000000, 0.1548316100000000 0.8316717200000000), LINESTRING (0.2454885100000000 0.9437248200000000, 0.1322281700000000 0.1135077100000000), LINESTRING (0.1433043800000000 0.5476465900000000, 0.2213059300000000 0.9633120200000000), LINESTRING (0.2396294200000000 0.7117438699999999, 0.2263808000000000 0.1473229000000000), LINESTRING (0.0589343800000000 0.3889051000000000, 0.1314165300000000 0.1436269400000000), LINESTRING (0.6422882600000001 0.1008731300000000, 0.9815634600000001 0.9252299400000000), LINESTRING (0.8762692100000000 0.9273020900000000, 0.3270137300000000 0.5070356000000000), LINESTRING (0.7789146800000000 0.2832325000000000, 0.5069395000000000 0.1548510200000000), LINESTRING (0.7973088300000000 0.5905731600000000, 0.6814425100000000 0.3483020500000000), LINESTRING (0.4552744500000000 0.1103606000000000, 0.0991691000000000 0.6598210300000000), LINESTRING (0.4100840800000000 0.8405070300000000, 0.1189025600000000 0.3117723700000000), LINESTRING (0.8108702400000000 0.3179636800000000, 0.0504396600000000 0.3515734100000000), LINESTRING (0.6049332900000000 0.7828513400000000, 0.9292539200000000 0.1478457100000000)) rgeos/inst/wkts/nc34.wkt0000644000176200001440000000542014041474771014646 0ustar liggesusersGEOMETRYCOLLECTION (POLYGON ((-80.4563445999999942 36.2425575299999991, -80.4763870200000042 36.2547264100000035, -80.5368804900000015 36.2567367600000026, -80.5450134299999974 36.2766571000000013, -80.5541534399999932 36.2784309399999998, -80.5905990600000024 36.2682762100000033, -80.6243133499999942 36.2730979899999966, -80.6674423200000064 36.2461013799999989, -80.6966552699999937 36.2590904199999997, -80.7240371700000026 36.2584724399999985, -80.7343673700000011 36.2647590600000029, -80.7525634800000063 36.2582969700000035, -80.7662963899999937 36.2618370100000007, -80.7826995799999992 36.2485771200000002, -80.8743820199999988 36.2338828999999976, -80.8708648700000055 36.3246231099999974, -80.8889236499999953 36.3544273400000009, -80.9245681799999943 36.3727531400000004, -80.9563903800000020 36.4037971500000026, -80.9496688800000044 36.4147338900000008, -80.9657745399999982 36.4672203100000019, -80.9335479700000064 36.4983138999999994, -80.9034423800000013 36.5652122500000019, -80.8381576499999994 36.5634384199999971, -80.6110534700000017 36.5572967499999990, -80.4353103600000026 36.5510444600000000, -80.4530105599999956 36.2570877100000004, -80.4563445999999942 36.2425575299999991)), MULTIPOLYGON (((-76.0089721700000069 36.3195953399999993, -76.0173492400000015 36.3377304099999989, -76.0328750599999950 36.3359756500000017, -76.0439529399999969 36.3535919199999995, -76.0950851399999948 36.3489150999999993, -76.1609268200000002 36.3918991099999971, -76.1581497199999973 36.4126892100000035, -76.1682891800000021 36.4270858799999999, -76.3302536000000060 36.5560569800000010, -76.1273956299999952 36.5571632400000013, -76.0459594699999997 36.5569534300000001, -76.0332107499999950 36.5143737799999997, -76.0910644500000046 36.5035667399999966, -75.9760742200000010 36.4362144500000014, -75.9697647100000069 36.4151191699999970, -76.0016097999999971 36.4189147900000023, -75.9512557999999984 36.3654708899999974, -75.9281234700000027 36.4232444800000010, -75.9245910599999974 36.3509483300000014, -75.8000564599999933 36.1128158599999978, -75.7988510100000070 36.0728187599999970, -75.8551635700000020 36.1056671099999988, -75.9137649500000009 36.2448005700000024, -75.9575119000000001 36.2594528199999999, -75.9419326799999936 36.2943382300000010, -76.0089721700000069 36.3195953399999993)), ((-76.0271682700000042 36.5567169199999995, -75.9986648600000052 36.5566520699999984, -75.9119186399999961 36.5425300599999971, -75.9248046900000020 36.4739761399999978, -75.9772796599999936 36.4780159000000026, -75.9762878399999977 36.5179252599999984, -76.0271682700000042 36.5567169199999995)), ((-75.9019851700000032 36.5561981199999977, -75.8781661999999955 36.5558738699999992, -75.7731552099999988 36.2292556800000014, -75.7831726099999941 36.2251930199999990, -75.9019851700000032 36.5561981199999977)))) rgeos/inst/wkts/sline2.wkt0000644000176200001440000007157214025150745015300 0ustar liggesusersLINESTRING (491555.3550056400126778 3158583.0149213098920882, 491948.4376713300007395 3158239.8743964801542461, 492188.8795631899847649 3157941.8343762899748981, 492380.4372084399801679 3157589.9483531098812819, 492723.8962607500143349 3157244.7188935000449419, 492979.0833524200133979 3157179.0318986098282039, 493308.4639162800158374 3157142.1402617702260613, 493661.3285363800241612 3157132.2162676099687815, 494037.2674854599754326 3157174.9268249501474202, 494514.1364549199934117 3157247.7492439202032983, 494989.0463587400154211 3157320.3734236001037061, 495335.7535077600041404 3157464.5920520899817348, 495563.4864823999814689 3157449.0907775200903416, 495943.8646949499961920 3157388.9106399700976908, 496399.3100389899918810 3157357.8329465999267995, 496936.0144839399727061 3157201.5372338099405169, 497858.9772274299757555 3156856.4525990099646151, 498417.8465675999759696 3156753.0728453900665045, 498937.3392008399823681 3156415.7392337298952043, 499276.0592385099735111 3156147.8672815700992942, 499535.8290416399831884 3155979.2899746601469815, 499895.9477292199735530 3155814.8792192898690701, 500591.3552414600271732 3155485.6728412997908890, 500979.0380783699802123 3155271.4388602199032903, 501552.8768612900166772 3154833.6958459299057722, 502000.2428740700124763 3154415.9092483199201524, 502449.7920794499805197 3153921.2225915398448706, 502840.3117384299985133 3153655.5578434900380671, 503335.7004412899841554 3153291.4762776498682797, 503876.3366732000140473 3153032.5773628298193216, 504212.1918386400211602 3152841.7848898200318217, 504502.8567570699960925 3152545.8268030402250588, 504820.1820181300281547 3152199.6485603898763657, 505166.0667443199781701 3151803.3522799201309681, 505406.5770264900056645 3151479.4938605800271034, 505618.2111794200027362 3150690.7693673400208354, 505606.4111702400259674 3149815.1390836299397051, 505645.8031334700062871 3149507.7703834301792085, 505711.8059577600215562 3149150.3735909401439130, 505755.6657515700208023 3148740.4930759300477803, 505842.0383027300122194 3148487.1629276401363313, 506006.6603054800070822 3148185.4527852400206029, 506271.3156102600041777 3147914.2314646900631487, 506557.6613544700085185 3147721.1079177199862897, 506786.4935092100058682 3147654.0470165698789060, 507090.0234846600214951 3147642.0808454002253711, 507546.8758098899852484 3147559.5967311598360538, 508072.5315821400145069 3147660.3833135599270463, 508580.8000709500047378 3148120.8160006999969482, 509226.6832462400197983 3148355.6773709100671113, 509828.2507439699838869 3148434.2349564600735903, 510301.7595471100066788 3148558.5076369801536202, 510504.9188870699726976 3148541.8074422399513423, 510758.1999063299736008 3148501.6472274898551404, 510863.9366445500054397 3148406.5016974201425910, 510928.8934337900136597 3148126.1195879699662328, 511076.1661658299854025 3147669.2779107899405062, 511222.1039163700188510 3147238.0792441000230610, 511475.3921929199714214 3146683.0841501899994910, 511772.3902886500000022 3146259.4836180899292231, 512046.0026205800240859 3145808.5689354301430285, 512392.8225520899868570 3145386.8944338299334049, 512630.0473736299900338 3145166.4839032501913607, 512888.9399365700082853 3145024.3838334400206804, 513197.1747435299912468 3144910.2326210900209844, 513712.2443291199742816 3145030.9472707198001444, 514342.4384846999892034 3145363.4234339501708746, 514875.3416662099771202 3145827.3183267200365663, 515581.3482603700249456 3146350.9651932199485600, 516050.2057321600150317 3146579.6922143599949777, 516657.5115137000102550 3147047.3097031000070274, 516729.8398557599866763 3147127.9489941401407123, 517368.9518920499831438 3147467.9772004201076925, 517884.6449915500124916 3147750.5709786899387836, 518551.3779624300077558 3148040.3158374200575054, 519219.4687584100174718 3148304.5836549601517618, 519639.3491719799931161 3148479.3954055700451136, 520105.2111630999715999 3148759.3820503498427570, 520603.8661528700031340 3149402.1318557299673557, 520726.7891049499739893 3150026.6518532698974013, 520844.4869116800255142 3150728.3694501798599958, 520912.4958742400049232 3151427.3856375799514353, 521053.1381944899912924 3152181.6119243199937046, 521244.8587255500024185 3152912.8111915797926486, 521326.4206195099977776 3153329.0254988600499928, 521559.3876738100079820 3153726.9451474500820041, 521804.0949375299969688 3153893.5872465302236378, 522076.0458748600212857 3153983.6969927698373795, 522221.6903746700263582 3153948.0266355900093913, 522617.9378188899718225 3153937.9487566500902176, 522799.9099378099781461 3153817.7019159398041666, 523620.7991558799985796 3153508.5385178499855101, 524004.4631137300166301 3153397.0823311600834131, 524237.5797590499860235 3153253.1751597700640559, 524620.3331518999766558 3153141.7036596802063286, 524851.5683230300201103 3153048.9238722398877144, 525423.9205009699799120 3152662.8240976100787520, 525888.8533893499989063 3152400.7317768298089504, 526177.8884204699425027 3152130.3776770099066198, 526610.9010364500572905 3152047.0405751699581742, 526988.9520362199982628 3152038.4968994199298322, 527461.6859218400204554 3152188.4253165097907186, 527906.6905399300158024 3152388.8359336801804602, 528471.6435729999793693 3152723.1953327697701752, 528884.1269980299985036 3153076.7259928700514138, 529447.1119145799893886 3153462.3611392998136580, 529758.7051121899858117 3153836.9275527098216116, 530327.3363990499638021 3154068.4063551197759807, 530916.5047401499468833 3154429.7783513600006700, 531382.3682907499605790 3154733.8626858298666775, 531673.3203586699673906 3154978.7330108401365578, 532033.4566049800487235 3155407.0944198998622596, 532434.1485093999654055 3156017.2474608002230525, 532746.0258793400134891 3156365.9984283200465143, 533084.1525518799899146 3156690.2893064701929688, 533351.5750141700264066 3156908.4198322799056768, 533915.6339355800300837 3157268.5974087100476027, 534474.7888585899490863 3157731.5418267901986837, 534810.8530796900158748 3158107.0152000300586224, 535395.7231189600424841 3158571.4863893999718130, 536161.6620430400362238 3158914.9132565599866211, 536548.2672880600439385 3159292.7637543999589980, 536972.7714653899893165 3159389.3733875099569559, 537260.0468935100361705 3159711.1909775901585817, 537970.7784153199754655 3160181.0555525599047542, 538255.9838288499740884 3160554.6956729497760534, 538470.4216955100419000 3160454.7714810902252793, 538423.2779133500298485 3159835.0478996401652694, 538411.1848487900570035 3159525.4444695501588285, 538398.6014468700159341 3159241.4311306299641728, 538485.2842269500251859 3159013.7188088698312640, 538697.6033403399633244 3158766.0827720100060105, 539056.9743061800254509 3158627.7910340200178325, 539710.5591616800520569 3158116.6939103198237717, 540096.7575473800534382 3157928.3012111200951040, 540551.0908100300002843 3157922.8559759999625385, 540885.6692405899520963 3157783.8860347499139607, 541124.9373484100215137 3157485.6117308600805700, 541066.6464464400196448 3157096.7686263099312782, 540935.8116565799573436 3156653.1401658700779080, 540924.7109151999466121 3156343.6104461401700974, 540889.3034203000133857 3156007.3098991699516773, 540986.8999030699487776 3155522.6831995998509228, 541127.3195394099457189 3155194.4015049301087856, 541471.3626575099769980 3154823.8291878402233124, 541834.3670271900482476 3154608.4491606401279569, 542218.7761189700104296 3154471.4880711799487472, 542632.9943208500044420 3154232.7902570599690080, 542966.7726488900370896 3154093.7527499301359057, 543322.4037182700121775 3154058.1853894698433578, 543855.4778253299882635 3153953.7214849698357284, 544265.7671709599671885 3153817.7563152601942420, 544548.4360759300179780 3153702.0025507300160825, 545038.7674798399675637 3153440.9426586697809398, 545399.9223133099731058 3153277.0423752302303910, 545712.9388982499949634 3153033.7856759899295866, 546211.7945051599526778 3152593.0009266398847103, 546447.3108371699927375 3152397.8724059900268912, 546710.6894027600064874 3152152.3451788499951363, 546938.7254511900246143 3152136.9687431100755930, 547337.2227557599544525 3152257.8909289999864995, 547655.7047309499466792 3152452.7341727199964225, 548093.3783756500342861 3152807.1233264999464154, 548381.4867747200187296 3153129.2889949199743569, 548816.3676322100218385 3154127.0639628102071583, 549218.5772058899747208 3154711.6457418999634683, 549574.5183880899567157 3155216.9613792300224304, 550012.0144725099671632 3155571.5646032900549471, 550182.8462444499600679 3155682.4588462398387492, 550415.8542716699885204 3155564.2177553898654878, 550534.3236964299576357 3155157.6154228798113763, 550815.3385319299995899 3154526.8073583100922406, 550935.3090579099953175 3154094.8044466897845268, 550999.9611881100572646 3152667.8673093798570335, 551044.9093531100079417 3151679.7862796699628234, 551244.8127568699419498 3150581.8932276698760688, 550983.3813330499688163 3149669.0611434001475573, 550850.7810464800568298 3149277.1203019898384809, 550608.8577642700402066 3149034.2871371000073850, 550426.1259973100386560 3148614.0753343501128256, 550320.9241613700287417 3148146.0207759798504412, 550292.7714415199588984 3147655.8280605501495302, 550388.4586894400417805 3147196.5051551000215113, 550504.4324010700220242 3146867.3080904302187264, 550650.7994473399594426 3146410.7259664000011981, 550645.5100229800445959 3145972.8464268501847982, 550585.4506280899513513 3145635.5810938999056816, 550523.9461807199986652 3145323.7281689099036157, 550334.6047810199670494 3145031.9795622797682881, 550119.8469858500175178 3144765.0406581801362336, 549620.0639429800212383 3144665.1136271301656961, 549293.3825907800346613 3144624.4213602398522198, 548594.1602089999942109 3144489.7607363699935377, 548036.7010945599758998 3144541.4620088501833379, 547137.5499935699626803 3144346.2972486400976777, 546686.9915717600379139 3144274.2969312202185392, 546259.8038171300431713 3144229.3775614001788199, 545588.8675356899620965 3144018.7524584499187768, 544902.4734907599631697 3143575.8222809401340783, 544235.4218992999522015 3143262.5392640801146626, 543714.6461462100269273 3143058.7464773999527097, 543408.2901927699567750 3143147.6719987099058926, 543005.4218225099612027 3143129.5634479098953307, 542604.0308389100246131 3143085.6135955499485135, 542463.1850734499748796 3142847.5782099901698530, 542203.8537989800097421 3142449.4993294598534703, 541920.0758493900066242 3142024.8685417100787163, 541762.6470880199922249 3141605.8887219200842083, 541502.2518147500231862 3141208.3389338199049234, 540961.3325226199813187 3140900.5931173600256443, 540322.7501568599836901 3140537.1288805301301181, 539956.4135608799988404 3140262.9622901701368392, 539605.6066581800114363 3140221.5765106999315321, 539091.4184022400295362 3139863.3764977902173996, 538793.7979644699953496 3139747.1003747801296413, 538379.5642711999826133 3139419.5318007599562407, 538062.3824831800302491 3139173.7358386600390077, 537795.9302373500540853 3138929.9084661300294101, 537684.1389620900154114 3138616.0225817500613630, 537628.4530917899683118 3138175.7445888300426304, 537478.9859136299928650 3137577.2162146000191569, 537252.3979199599707499 3137000.7361424001865089, 537398.1998359899735078 3136544.2490381300449371, 537714.3877227000193670 3136249.6601283601485193, 538034.0131112299859524 3135878.2406205497682095, 538261.8505047600483522 3135296.6169195598922670, 538386.2467615499626845 3134761.5747492201626301, 538327.4628330400446430 3133832.7366295298561454, 538139.3695803700247779 3132948.9106176299974322, 537934.0265503600239754 3131910.3197821998037398, 537837.6657147000078112 3131236.9521562401205301, 537597.1691914299735799 3130428.2527515199035406, 537521.7517784000374377 3129858.8289812100119889, 537395.5788219999521971 3129287.0956942001357675, 537169.6992566500557587 3128710.6506406199187040, 536921.3153778299456462 3128056.2626011702232063, 536377.2605656300438568 3127259.3602081001736224, 536086.1469207300106063 3126422.8847744301892817, 535769.5778147099772468 3125611.0323521899990737, 535554.2863618100527674 3124211.7478081998415291, 535326.6861959199886769 3123661.2504460299387574, 534962.5045216899598017 3122769.7872209600172937, 534495.1854776899563149 3121385.3086417401209474, 533618.7553890800336376 3120519.9742085901089013, 532223.8802972099510953 3118868.4663468399085104, 531695.4980223600286990 3118353.7714713299646974, 531375.6718584699556231 3118295.9981553601101041, 531141.8265066399471834 3118275.1248479997739196, 530818.6499970000004396 3118275.4945969199761748, 530485.4061184299644083 3118450.3066985202021897, 530205.6039864099584520 3118717.5325515298172832, 529946.6581333000212908 3119132.7222567000426352, 529809.6343642800347880 3119471.1232013697735965, 529791.2106519299559295 3119790.8807850498706102, 529928.7360981099773198 3120971.8931499398313463, 530118.8830892100231722 3121748.5469497498124838, 529948.1304043199634179 3123691.0760046001523733, 529933.0361869599437341 3123952.7099469299428165, 529866.2359094800194725 3124092.8584233601577580, 529711.8172959400108084 3124225.1916199098341167, 529361.3006866100477055 3124193.9486141297966242, 529080.9070820399792865 3123964.4228815902024508, 528793.8283433800097555 3123851.1881392300128937, 528616.8605768099660054 3123864.6568978298455477, 528314.7234611599706113 3124013.0836199601180851, 527796.4505379199981689 3124346.8325469801202416, 527562.7514124700101092 3124326.0482585499994457, 527364.9709828200284392 3124191.5712351999245584, 527228.9375654200557619 3124004.1550993598066270, 527037.7951534599997103 3123753.4114980702288449, 526754.8268887200392783 3123056.2104929001070559, 525470.0050494599854574 3121720.5959318000823259, 521610.5520165999769233 3120058.7323310398496687, 520456.4270763699896634 3119693.9852969301864505, 519133.4324385399813764 3119197.6744135199114680, 517772.9100838300073519 3118844.3332338798791170, 516706.1891161199891940 3118487.7639298099093139, 512669.0508011300116777 3118055.7230470301583409, 511594.7419942599954084 3117827.2332929801195860, 510830.3195900199934840 3117432.7713636900298297, 510476.4454831900075078 3116876.7897170898504555, 510066.7222064299858175 3116446.7792627899907529, 509616.1508106699911878 3115809.0131321800872684, 509317.5452147399773821 3115152.5841794600710273, 508756.0919542600167915 3114715.6504722801037133, 508236.4040411600144580 3114486.5799540798179805, 507605.1237884699949063 3114509.5888685202226043, 507022.8152160500176251 3114535.1264463299885392, 506428.2340547000057995 3114302.6144203301519156, 506015.5201008800067939 3113924.1583529398776591, 505753.9841327900066972 3113577.8828777000308037, 505313.1372589300153777 3113274.9538013702258468, 504777.1277183499769308 3113405.3134297300130129, 504392.3656413300195709 3113568.1842971500009298, 503973.7270249500288628 3113318.0045048398897052, 503518.1478766800137237 3112782.9949049800634384, 503115.0985451600281522 3112199.2814917499199510, 502564.0503281499841250 3111556.9588985498994589, 502351.2743738000281155 3111213.1513261599466205, 501658.6946858500014059 3110333.2914624400436878, 501062.3405595300137065 3109560.4500086097978055, 500717.5113000000128523 3109364.9235754800029099, 500438.3253302800003439 3109404.0043028001673520, 500127.0557197100133635 3109595.6900658397935331, 499744.1333161300281063 3110273.2954862699843943, 499437.0892227700096555 3110954.0027070902287960, 498987.6584737700177357 3111397.0155031699687243, 498593.1605703199747950 3111765.2765609500929713, 498032.2905980800278485 3111894.4883456900715828, 497418.4143466000095941 3112098.7240825798362494, 496438.2937491100165062 3112003.2752077598124743, 495473.9780233200290240 3111548.5597438900731504, 494808.5180402100086212 3111210.1197658102028072, 494327.3628069100086577 3110674.2706211800687015, 493771.6798420699778944 3110109.1202675099484622, 493310.6836288499762304 3109702.8511170600540936, 492651.4280967399827205 3109184.3656875598244369, 491876.5464380399789661 3108481.2412061300128698, 491516.5853211400099099 3108053.4867277499288321, 491416.7937571899965405 3107431.8157460601069033, 491556.8633796499925666 3106563.3496194500476122, 491418.0736023699864745 3105708.3537421599030495, 491067.5861148299882188 3105075.2515490502119064, 490439.9246378400130197 3105561.8281144797801971, 489994.6883673300035298 3105927.7893354799598455, 489470.6225855899974704 3106367.3632542998529971, 488689.3969643699820153 3106924.3670244500972331, 487915.2012401699903421 3107326.9649206898175180, 487488.1959941799868830 3107848.0213379100896418, 486994.5484271299792454 3108186.1908805300481617, 486656.3471852500224486 3108402.6172901801764965, 486156.1952451699762605 3108303.2581200399436057, 485444.5867931700195186 3107859.9420194597914815, 484591.0230890099774115 3107178.7952291201800108, 483334.4318861300125718 3105939.8004056601785123, 482635.2176909400150180 3105188.3904380397871137, 482375.2239997099968605 3104790.8803954799659550, 481837.6341615599812940 3104381.1441557398065925, 481464.3966217000270262 3104261.6577592999674380, 481013.6736731400014833 3104190.0995782702229917, 480496.7700355499982834 3104475.7883059000596404, 480159.5498991499771364 3104692.2574851899407804, 479365.1547482800087892 3104965.6146929599344730, 478598.3509266700129956 3105188.7055432000197470, 478113.3255478800274432 3105321.6447978201322258, 477835.4858665399951860 3105334.7473369101062417, 477480.4575373900006525 3105370.5811097798869014, 477168.6189071899862029 3105562.5127873001620173, 476861.6126952799968421 3105677.5114392098039389, 476646.4692690999945626 3105976.6011471999809146, 476511.3882946799858473 3106176.1641999199055135, 476193.8306909099919721 3106522.3198134801350534, 475848.7870201399782673 3106918.4953552098013461, 475252.8427155300159939 3107252.1361374300904572, 474603.8189682299853303 3107686.3797274301759899, 474190.0628960399772041 3107899.4706192999146879, 473903.0217906900215894 3108118.2170344800688326, 474089.9535474000149406 3108460.7101452997885644, 474383.1114117699908093 3108679.7164437300525606, 474771.5621454200008884 3109031.5946779302321374, 475342.4282509100157768 3109236.9825973701663315, 475929.5526744499802589 3109674.5548152099363506, 475945.8245200300007127 3110446.8251788099296391, 475743.5720553999999538 3111029.6736209699884057, 475553.5151473599835299 3111329.8408973501063883, 475313.5845658499747515 3111627.7609767802059650, 475004.2224210199783556 3111794.3185437899082899, 474565.3273008399992250 3112032.1793939601629972, 474345.2786353600095026 3112433.7693994399160147, 474325.1347168199717999 3112895.9227923601865768, 474462.0583233599900268 3113236.3129844302311540, 474902.1449151299893856 3114130.6164934299886227, 474911.0788807600038126 3114491.4492650898173451, 474767.7888853899785317 3114896.6540524200536311, 474416.6735833199927583 3115421.3285503401421010, 474318.2028217599727213 3115931.3456820398569107, 474221.9726838999777101 3116415.9922985201701522, 474152.2808974200161174 3116850.1366793499328196, 474135.9625923099811189 3117235.4292472600936890, 474112.0123728999751620 3117774.6388034098781645, 474097.2913497299887240 3118108.4017165401019156, 473922.7402672399766743 3118641.2435712898150086, 473511.3858204300049692 3119394.7008561100810766, 473078.0327981499722227 3120070.0045483298599720, 472677.6425893200212158 3120566.8514682902023196, 472234.0998167200013995 3120907.4104081802070141, 471666.5738900200231001 3121191.1078429301269352, 470935.7243074399884790 3121184.2070412300527096, 470793.4412783500156365 3120972.1493847002275288, 470281.0183837200165726 3120589.1784948799759150, 469682.7501253699883819 3119842.1474198698997498, 469133.9260520699899644 3119123.1912454199045897, 468657.9691993099986576 3118484.6092980802059174, 468073.9774112100130878 3117969.5757170300930738, 467640.8023106399923563 3117513.2589895902201533, 467087.9454475099919364 3116871.2310667601414025, 466734.5471951999934390 3116315.2057651299983263, 466132.9118979100021534 3115645.3931886497884989, 465252.6730203700135462 3114988.8318516500294209, 464553.5826325900270604 3114263.2281251600943506, 463854.6245185799780302 3113512.1158767798915505, 463354.6195775099913590 3112820.9951722701080143, 463291.6563968799891882 3113126.9164471598342061, 462961.0994151799823157 3113755.4102501100860536, 462583.1795579899917357 3114330.2300819698721170, 461890.3886353200068697 3115174.4346807999536395, 461343.8583177999826148 3115562.0759530900977552, 460116.5674152499996126 3116510.8085451698862016, 459851.3491998299723491 3116808.1138654397800565, 459729.9960156700108200 3117291.2306938502006233, 459944.8549252200173214 3117558.2145487298257649, 460301.0612034900113940 3118062.7322842800058424, 460660.6409743800177239 3118516.0431528701446950, 460860.0216338600148447 3119142.2650751201435924, 460787.2130816900171340 3119653.6621758500114083, 460599.0281145999906585 3119928.4342706901952624, 460304.4558184799971059 3120893.3205478601157665, 459805.9110751500120386 3121926.0223070499487221, 459384.1309512599837035 3122344.8554957001470029, 458888.2060568400193006 3122708.7378799100406468, 458395.7504989000153728 3123021.5179410302080214, 458123.0355001700227149 3123498.4309905897825956, 457970.9912624899880029 3124083.3831125497817993, 457835.9018144800211303 3124875.1871755700558424, 457601.6797460900270380 3125611.1734972898848355, 457373.4413540299865417 3126244.2296485998667777, 456954.7246518100146204 3126585.9051286098547280, 456502.2040076800039969 3127132.0140506401658058, 456245.2993875999818556 3127223.7214692900888622, 455771.6506088200258091 3127691.5346744600683451, 455196.4823071599821560 3128155.0684375697746873, 454745.3573188100126572 3128675.6391094801947474, 454575.0771089000045322 3129105.5068571497686207, 454095.4632518700091168 3129701.8510346999391913, 453905.4493590299971402 3130002.5194528899155557, 453649.2300773499882780 3130685.8757642898708582, 453796.7410271500120871 3131516.0115127097815275, 453879.4145290399901569 3131593.2405828800983727, 454315.1066565699875355 3131974.4273232701234519, 454629.9524461900000460 3132272.9757150402292609, 454772.6176165600190870 3132459.8107587401755154, 454991.1721223299973644 3132624.8155207401141524, 455352.0403468399890698 3133023.8050481299869716, 455554.2406087900162674 3133309.0249740402214229, 455803.8490651000174694 3133705.8454076899215579, 456302.6713383399765007 3134187.0347699201665819, 456774.8175500099896453 3134583.4564028899185359, 457385.9515600799932145 3135121.2905966099351645, 457356.3213326699915342 3135537.3933303002268076, 457180.0098044099868275 3135911.8804273498244584, 457013.6825683399802074 3136239.1429957901127636, 456643.6164215200114995 3136634.7295662797987461, 456200.7455831199767999 3136949.5153963700868189, 455955.8438246700097807 3137376.2923677898943424, 455831.3657162599847652 3137911.2132192300632596, 455822.8374310699873604 3138708.9765131501480937, 455373.6261798799969256 3139177.9487825301475823, 454662.0303366400185041 3139301.0102413198910654, 453887.3883077100035734 3139138.2519546700641513, 453472.4951441399753094 3138810.7618061499670148, 452892.7827654400025494 3138218.9770908998325467, 452245.5862279299763031 3138035.9375988701358438, 451568.6001204299973324 3137954.8021564800292253, 450799.9114135300042108 3138229.5323124597780406, 450214.3845795500092208 3138828.4212905000895262, 450766.2009604899794795 3138878.7209197301417589, 451398.2649059999966994 3138854.9697231701575220, 451344.7987838399712928 3139496.2743666199967265, 451258.9305820100125857 3139749.6813416201621294, 451173.3045194899896160 3139977.7350384299643338, 451029.4260415399912745 3140383.0791540900245309, 450879.1708160500274971 3140942.5699900700710714, 450750.1435453500016592 3141580.7502621700987220, 450636.0375589500181377 3141884.4714673599228263, 450597.5167138099786825 3142191.5500798700377345, 450594.5016874700086191 3142860.6596224699169397, 450449.4314725099829957 3143857.9832248701713979, 450132.0676104699959978 3144204.5030478602275252, 449716.7965752300224267 3144494.8748589898459613, 449438.2503942599869333 3144508.5093600098043680, 449151.9232125999988057 3144727.4353832700289786, 449042.9944452400086448 3144903.0160782299935818, 448980.8681475999765098 3145183.0705103799700737, 449071.2965855899965391 3145418.8261633999645710, 449493.5664444200228900 3145566.4466739599592984, 449992.6219427100149915 3145691.1281508100219071, 450463.3541920200223103 3145866.5708043100312352, 450836.1572393400128931 3145985.9787361100316048, 451512.2973153400234878 3146093.1094302898272872, 452239.0964352100272663 3146202.3541170097887516, 453073.4253060600021854 3146728.4559308099560440, 453838.3030056700226851 3147122.7766763600520790, 454554.8980330899939872 3147463.3326399698853493, 454868.0265835400205106 3147785.9393373201601207, 455255.1614051000215113 3148163.4143047397956252, 455371.4844624000252225 3148374.5424904501996934, 455619.4730076399864629 3149055.0020142202265561, 455297.4694995600148104 3150096.3293426898308098, 455233.9233793399762362 3150402.4623579801991582, 455438.9332308599841781 3150900.5661726300604641, 455672.4138946000020951 3151322.9180694301612675, 455854.9763854200136848 3151768.5438770898617804, 455863.2183857900090516 3152155.0502032800577581, 455825.7574199499795213 3152436.7371088499203324, 455782.0990772999939509 3152846.6891078897751868, 455645.2842137099942192 3153123.8378264298662543, 455505.3295707399956882 3153426.3244842300191522, 455381.0103699400206096 3153961.7480468600988388, 455397.9002864399808459 3154168.3667644602246583, 455402.1432463200180791 3154657.6571439299732447, 455608.2627060600207187 3155130.1431899098679423, 455966.4678744900156744 3155583.7940621501766145, 456306.3128210600116290 3155881.9757915497757494, 456898.2578299199813046 3156191.5101160798221827, 457460.6632462199777365 3156576.9355004797689617, 458058.7476616299827583 3156757.8389118900522590, 458528.5263081199955195 3156958.9622245398350060, 459028.1387287100078538 3157058.0298052001744509, 459452.2548803199897520 3157154.2576556801795959, 460196.1698257899843156 3157444.7853215602226555, 460750.0844347500242293 3157469.3258671401999891, 461275.7162025999859907 3157544.0743386698886752, 461706.0672769499942660 3157511.5755635402165353, 462230.1182871499913745 3157637.7201844900846481, 462729.6489609300042503 3157737.3176426701247692, 463327.8877541500260122 3157892.4049779600463808, 463879.5696628500008956 3157942.5202312101610005, 464231.9580107699730434 3157958.5347566697746515, 464850.9071522200247273 3158217.5979536701925099, 465133.1881346100126393 3158101.4117301101796329, 465391.9201903499779291 3157958.3726804098114371, 465648.4381022899760865 3157840.9353120001032948, 465910.9629438300034963 3157621.0535984002053738, 466170.0252907599788159 3157452.2120615202002227, 466372.8191535500227474 3157435.5813708300702274, 466679.9766687200171873 3157320.3239408899098635, 466954.1070250699995086 3157409.8447283101268113, 467224.7529150000191294 3157550.3950514299795032, 467462.6189822599990293 3157869.9180965698324144, 467764.0852577500045300 3157909.1490742200985551, 467967.4881978600169532 3157841.0294409999623895, 468204.3019295699778013 3157619.7222195100039244, 468549.3305589699884877 3157223.2067147800698876, 468974.6718640300096013 3157293.4154081800952554, 469593.2439512200071476 3157578.4829769199714065, 470279.9081175699830055 3157995.3262313399463892, 471003.7945692000212148 3158181.9667940600775182, 471552.5976272000116296 3158309.0699151400476694, 471951.7654222099808976 3158404.1777680101804435, 472278.0277682499727234 3158444.5719628799706697, 472582.6824923999956809 3158380.6950435298494995, 473061.1464841900160536 3158402.0877537298947573, 473515.0858483099727891 3158396.4539528200402856, 474398.4770119300228544 3158358.3081248900853097, 474710.8886082199751399 3158140.7129616900347173, 475020.7089429700281471 3157974.4319010698236525, 475346.0672407299862243 3158014.5498761199414730, 475647.5201382300001569 3158053.8039534799754620, 476042.4582870299927890 3158251.3965987400151789, 476409.0374993699952029 3158499.4604367301799357, 476636.3124511200003326 3158509.5410026498138905, 477017.7476928100222722 3158423.6117251301184297, 477473.0359187200083397 3158392.2884091702289879, 477832.2107492400100455 3158254.0736204301938415, 478305.8540970300091431 3158352.2936117001809180, 478938.1581932199769653 3158303.2587007801048458, 479591.9902414599782787 3158358.0959634301252663, 480157.0407954400288872 3158692.1513351900503039, 480602.8447565300157294 3158866.4603176098316908, 481370.6064967199927196 3159184.0459919399581850, 481868.3143255700124428 3159334.8768004900775850, 482510.2969351300271228 3159621.1163614699617028, 483324.6601741599733941 3160017.8241711799055338, 484149.7667466800194234 3160183.4732164498418570, 484744.6416242899722420 3160415.9150994201190770, 485197.2641042899922468 3160436.0389234800823033, 485648.1726464999956079 3160507.7611339800059795, 486271.7626124200178310 3160664.4015536298975348, 486792.8384480900131166 3160841.9794121901504695, 487493.1639036600245163 3160976.2406549700535834, 487994.9983474800246768 3161024.4251389000564814, 488509.5148637400125153 3160789.8116700099781156, 489051.5473540700040758 3160505.2179174600169063, 489334.4912376099964604 3160363.3728158301673830, 489721.6998459799797274 3160148.8764986298047006, 490085.4365685799857602 3159907.5808965899050236, 490401.2455563200055622 3159612.7141494001261890, 490764.9739138599834405 3159371.6671085101552308, 491104.3162348400219344 3159103.5277769300155342, 491369.5822514499886893 3158806.3056160900741816, 491555.3550056400126778 3158583.0149213098920882) rgeos/inst/wkts/sline1.wkt0000644000176200001440000007672414025150745015303 0ustar liggesusersLINESTRING (450214.3845795500092208 3138828.4212905000895262, 450799.9114135300042108 3138229.5323124597780406, 451568.6001204299973324 3137954.8021564697846770, 452245.5862279299763031 3138035.9375988701358438, 452892.7827654400025494 3138218.9770908998325467, 453472.4951441399753094 3138810.7618061499670148, 453887.3883077100035734 3139138.2519546700641513, 454662.0303366400185041 3139301.0102413198910654, 455373.6261798799969256 3139177.9487825301475823, 455822.8374310699873604 3138708.9765131501480937, 455831.3657162599847652 3137911.2132192300632596, 455955.8438246700097807 3137376.2923677898943424, 456200.7455831199767999 3136949.5153963700868189, 456643.6164215300232172 3136634.7295662797987461, 457013.6825683399802074 3136239.1429957798682153, 457180.0098044099868275 3135911.8804273498244584, 457356.3213326699915342 3135537.3933303100056946, 457385.9515600799932145 3135121.2905966099351645, 456774.8175500099896453 3134583.4564028899185359, 456302.6713383399765007 3134187.0347699201665819, 455803.8490651000174694 3133705.8454076899215579, 455554.2406087900162674 3133309.0249740402214229, 455352.0403468399890698 3133023.8050481299869716, 454991.1721223199856468 3132624.8155207401141524, 454772.6176165699725971 3132459.8107587401755154, 454629.9524461900000460 3132272.9757150402292609, 454315.1066565599758178 3131974.4273232701234519, 453879.4145290399901569 3131593.2405828800983727, 453796.7410271400003694 3131516.0115127097815275, 453649.2300773499882780 3130685.8757642898708582, 453905.4493590199854225 3130002.5194528899155557, 454095.4632518700091168 3129701.8510346999391913, 454575.0771089000045322 3129105.5068571399897337, 454745.3573188100126572 3128675.6391094801947474, 455196.4823071599821560 3128155.0684375697746873, 455771.6506088100140914 3127691.5346744600683451, 456245.2993875999818556 3127223.7214692900888622, 456502.2040076800039969 3127132.0140506401658058, 456954.7246518100146204 3126585.9051286098547280, 457373.4413540299865417 3126244.2296485998667777, 457601.6797460800153203 3125611.1734972898848355, 457835.9018144800211303 3124875.1871755598112941, 457970.9912624899880029 3124083.3831125497817993, 458123.0355001700227149 3123498.4309905897825956, 458395.7504989000153728 3123021.5179410302080214, 458888.2060568400193006 3122708.7378799100406468, 459384.1309512599837035 3122344.8554957001470029, 459805.9110751400003210 3121926.0223070499487221, 460304.4558184799971059 3120893.3205478601157665, 460599.0281145999906585 3119928.4342706901952624, 460787.2130816900171340 3119653.6621758500114083, 460860.0216338600148447 3119142.2650751201435924, 460660.6409743800177239 3118516.0431528599001467, 460301.0612034900113940 3118062.7322842800058424, 459944.8549252200173214 3117558.2145487298257649, 459729.9960156700108200 3117291.2306938502006233, 459851.3491998299723491 3116808.1138654397800565, 460116.5674152399878949 3116510.8085451698862016, 461343.8583177899708971 3115562.0759530900977552, 461890.3886353200068697 3115174.4346807999536395, 462583.1795579899917357 3114330.2300819600932300, 462961.0994151799823157 3113755.4102501100860536, 463291.6563968799891882 3113126.9164471598342061, 463354.6195775099913590 3112820.9951722701080143, 462798.1053157100104727 3112281.7812269199639559, 462307.0620860899798572 3111977.2254008799791336, 461700.5235794800100848 3111435.7764709000475705, 461120.4136695900233462 3110844.0377919799648225, 460680.3878755400073715 3110515.7974956398829818, 460216.6581980100017972 3110160.8694551098160446, 459951.9161969000124373 3109866.2721303598955274, 459442.2258956999867223 3109406.2855070699006319, 459055.7166596699971706 3109003.3120321901515126, 458665.1947638600249775 3108703.1568802199326456, 458299.5938228499726392 3108404.2038043797947466, 458146.9592194400029257 3107857.2712992997840047, 458217.1894724200246856 3107397.1148063298314810, 458439.1023659100173973 3106943.9248271598480642, 458966.1887569199898280 3106427.3626922201365232, 459260.3282583300024271 3106054.2906676698476076, 459432.6284859100123867 3105573.3914589900523424, 459780.6761955500114709 3104941.1147097297944129, 459230.6103617500048131 3104313.5681855902075768, 458863.4193843899993226 3104064.3652856801636517, 458252.9889749800204299 3103649.4735952802002430, 457668.7165986599866301 3103209.7328318101353943, 457048.5031412399839610 3102433.7205573199316859, 456602.5084579599788412 3101717.4682402200996876, 456255.9958707200130448 3101031.9288279497995973, 455796.3663632399984635 3100598.1968429200351238, 455109.6848725000163540 3100179.6711647198535502, 454740.7141440699924715 3099981.9459569100290537, 454580.9678423500154167 3099899.8547750897705555, 454095.1096354600158520 3099771.1673859800212085, 453668.8315684300032444 3099725.3127270201221108, 453319.9303604700253345 3099631.6600184799171984, 453042.0492939800024033 3099644.3714184700511396, 453045.9718865599716082 3099763.8980791601352394, 452118.3731796399806626 3099102.6620816099457443, 451475.4728390499949455 3098791.5951756699942052, 450883.2204946699785069 3098508.1962618101388216, 450293.8360144399921410 3098122.2432338399812579, 449871.3372250599786639 3097974.7954120999202132, 449209.3393742699990980 3097534.1212271298281848, 448721.9613314199959859 3097126.8269283398985863, 448459.9120977299753577 3096780.9689329899847507, 448301.4221330099971965 3096362.3641088698059320, 448171.4998279000283219 3095868.1796822501346469, 448223.4792449999949895 3095253.2375820898450911, 448234.4405191399855539 3094405.0124003700911999, 448191.4981505100149661 3093657.3363018301315606, 448078.9019105599727482 3092752.3095554201863706, 448008.8019006199901924 3092029.0612509897910058, 447977.3186522600008175 3091590.5764707801863551, 447916.5842187100206502 3090687.9127835398539901, 447806.7253886000253260 3090297.3393148100003600, 447781.2682403899962083 3089730.6398415700532496, 447768.3174011600203812 3088855.7086432101204991, 447688.2718231899780221 3088363.6068586600013077, 447581.7442423800239339 3087921.7416207399219275, 447661.1241260400274768 3087256.5918981297872961, 447651.0205675699980929 3086896.1725687901489437, 447420.0597717100172304 3085240.5415304698981345, 447318.5104773800121620 3084670.3300530100241303, 447160.9159196700202301 3084226.2281415099278092, 446864.4465005300007761 3083493.4172274498268962, 446541.6874559299903922 3082784.9651431101374328, 446155.4212673800066113 3081225.5142718101851642, 445859.9764022799790837 3080466.7129019899293780, 445854.5632551800226793 3080003.6450073099695146, 445852.7273286900017411 3079463.8412741799838841, 445920.3316275799879804 3078489.7171738301403821, 446109.3266944899805821 3077623.9575585601851344, 446248.5174843900022097 3076730.2211021902039647, 446381.2441664100042544 3076016.2521890699863434, 446414.2490542299929075 3075246.8444225201383233, 446266.2288989900262095 3074571.6885402300395072, 446193.0893074200139381 3073925.9250203999690711, 446148.3032543400186114 3073230.0521266697905958, 446163.1574173200060613 3072870.6744948499836028, 445898.3592640099814162 3071985.1991795701906085, 445778.6751853399910033 3071259.8569495799019933, 445736.6640345299965702 3070461.3574596601538360, 445903.5321282300283201 3070134.5411481298506260, 445830.2690544099896215 3069488.8399695800617337, 445699.7309743000078015 3068994.5939467200078070, 445442.6759696099907160 3068520.7111234799958766, 445105.6413847400108352 3068145.7902050800621510, 444849.9413506800192408 3067620.6472130799666047, 444758.6752900499850512 3066819.8208827199414372, 444664.9978367100120522 3066070.4354718797840178, 444590.4485143200145103 3065450.1849417700432241, 444474.0623075300245546 3064648.2341168201528490, 444271.7077619300107472 3064073.8431299501098692, 444145.7357457699836232 3063477.3497168598696589, 444066.0928958500153385 3062985.6774559100158513, 443838.6034564700094052 3062410.1621083500795066, 443536.0868958299979568 3061805.7422743202187121, 443232.0906124599860050 3061252.7066208301112056, 442979.4203346800059080 3060676.2960877898149192, 442785.1310381800285541 3060487.7749668401665986, 442375.0119426299934275 3059467.6101449602283537, 441879.8980809199856594 3058674.7464134600013494, 441548.4565893600229174 3058146.3260698402300477, 441261.0322984899976291 3057773.8016998101957142, 440994.8590304999961518 3056939.9063981100916862, 440654.9502967200241983 3056025.4421080998145044, 440190.6383210900239646 3055079.9612656501121819, 439875.4798136100289412 3054192.5856542801484466, 439600.8006678100209683 3053538.0294516501016915, 439456.1166586600011215 3052812.0281513701193035, 439377.2718720699776895 3052294.7673307899385691, 439126.4424613000010140 3051667.1170409498736262, 438887.4844091599807143 3050757.3370749298483133, 438802.5567367899930105 3050393.7853769301436841, 438659.1293926499783993 3050207.7256774897687137, 438153.8460501300287433 3050211.2923756199888885, 437843.4138589000212960 3050377.4946517301723361, 437561.5698589499806985 3050467.8302659299224615, 437009.7763052100199275 3050983.1594619802199304, 436583.5545726499985904 3051504.0259234998375177, 436213.6015014399890788 3051873.0727220699191093, 435948.5805805100244470 3052169.9294142699800432, 435506.8873422800097615 3052458.8935477398335934, 434972.2668915300164372 3053154.7502549700438976, 434446.0546712300274521 3053645.2987279901280999, 433897.1159915699972771 3054083.7716696001589298, 433589.3547781300148927 3054173.1561831901781261, 433287.2095930299838074 3054160.0432532997801900, 433094.7403087100246921 3053945.8444197201170027, 432855.7345336999860592 3053627.0260528801009059, 432720.3941892900038511 3053261.4634598097763956, 432629.4482255000039004 3053026.0873830001801252, 432183.2798139699734747 3053417.6192818200215697, 431674.7222770799999125 3053498.3502582497894764, 430804.6339863099856302 3053768.4533329899422824, 429793.8539761899737641 3054007.1177249602042139, 429470.2245724700042047 3054387.1340868799015880, 429291.3031140500097536 3054429.9898931900970638, 429164.6950904200202785 3054449.8695645797997713, 428936.7505788399721496 3054464.8769284100271761, 428688.2838343399926089 3054375.9970711800269783, 428592.6823428400093690 3054242.8698030500672758, 428509.3450853300164454 3053879.0189027101732790, 428394.2148489700048231 3053642.0436952901072800, 428054.5085439200047404 3053343.2701656999997795, 427613.4581014600116760 3053039.7687967699021101, 427216.6703404500149190 3052892.5450280299410224, 426849.5383916600258090 3052643.6937651699408889, 426205.3568808999843895 3052382.0985417598858476, 425706.9916404800023884 3052255.8645764798857272, 425540.4089827400166541 3052042.4160023201256990, 425282.7485638799844310 3051592.8904375699348748, 425134.3591782299918123 3050968.7476770598441362, 424891.0578637499711476 3050237.3162406901828945, 424637.6571868999744765 3049710.9413337698206306, 424231.4555177500005811 3049203.3595979497767985, 423849.2128751900163479 3048722.5249185701832175, 423467.9143623000127263 3048241.5158036500215530, 423279.5081091800238937 3047949.8696001800708473, 423221.1650254399864934 3047561.3417417900636792, 423221.9547997000045143 3046995.6166560398414731, 423278.5717035999987274 3046304.0841340599581599, 423302.2012668499955907 3045790.8113010199740529, 422997.2203653000178747 3045288.0239365901798010, 422632.9076786800287664 3044988.1997975897975266, 422137.6793077000183985 3044758.9299025097861886, 421460.7823764299973845 3044675.9583776500076056, 420474.9319781800149940 3044707.0797206400893629, 419563.3120402700151317 3044767.0909856301732361, 418579.7395331099978648 3044746.7583883698098361, 418050.1855228299973533 3044748.0860842699185014, 417661.4242394699831493 3044961.2467380198650062, 417311.7960222199908458 3045433.4457552800886333, 417043.0678732299711555 3045780.6901225000619888, 416703.3505959599860944 3046047.7840210702270269, 416347.6092331699910574 3046082.5255664098076522, 416034.3593177699949592 3045785.1701789498329163, 415819.5807458700146526 3045492.0929627497680485, 415789.2483389999833889 3045053.6664514699950814, 415623.2963778499979526 3044840.2483547399751842, 415432.5099629900068976 3044574.1069682599045336, 415177.1519044599845074 3044099.1742195598781109, 414812.7427164100226946 3043773.6744236899539828, 414636.9032701500109397 3043765.3979961001314223, 414231.8000044400105253 3043798.0898845000192523, 413930.5010473100119270 3043758.4218790698796511, 413431.5844542799750343 3043631.9439731198363006, 413039.7494567499961704 3043356.5355157800950110, 412598.6492366499733180 3043078.6745281000621617, 412248.1702681999886408 3043010.9692881098017097, 411994.8946283099940047 3043025.0653913998976350, 411604.4952892499859445 3043233.8042425001040101, 411276.0059625100111589 3043172.6659251400269568, 410876.3545721800182946 3043078.0354419299401343, 410653.6706978399888612 3042965.4410417601466179, 410354.9480933800223283 3043023.6855345200747252, 410112.0612734599853866 3043224.5600010198540986, 409899.0274047499988228 3043497.7406056700274348, 409707.0048277400201187 3043823.4584321798756719, 409684.0149024699931033 3044361.7378393700346351, 409742.8317593599786051 3044775.3546723597683012, 409848.6857698599924333 3045242.6384922601282597, 409900.9152872199774720 3045810.0192396999336779, 409987.0146200400195085 3046173.2904628799296916, 410066.6338678899919614 3046665.1164138899184763, 410104.7766933999955654 3046949.5077367699705064, 410087.2756917499937117 3047359.5547963101416826, 409948.5209539699717425 3047662.0382442101836205, 409860.0650365600013174 3047966.3221149500459433, 409699.6446118800085969 3048164.8178817699663341, 409535.9746416499838233 3048440.3602552898228168, 409373.2818775399937294 3048716.0655768299475312, 409306.7562893200083636 3049072.6139648300595582, 409288.0128127199714072 3049534.4985923399217427, 409298.9141487299930304 3049868.9286366500891745, 409433.1032462699804455 3050260.1556105599738657, 409388.2957563099917024 3050720.6031264499761164, 409296.5515490099787712 3051101.9709257399663329, 409283.4005985700059682 3051409.9583645202219486, 409211.3256705600069836 3051920.4507351899519563, 409241.7846822600113228 3052384.5783768901601434, 409089.0837055000010878 3052994.5973217999562621, 408917.6870665000169538 3053475.3227550298906863, 408790.0789247700013220 3054086.2215407998301089, 408681.9992266899789684 3054852.4506780002266169, 408735.4043289499823004 3055368.6712170499376953, 408851.9659168400103226 3055605.2348422701470554, 409011.0323219100246206 3056023.2282869098708034, 409149.5382975700194947 3056311.9450643002055585, 409186.4235532199963927 3056647.7529282900504768, 409397.8713542000041343 3057016.6847597300074995, 409636.4036824699724093 3057361.3511231001466513, 409820.6358235300285742 3057754.7918924898840487, 409955.6416954100131989 3058146.0064815799705684, 410009.9114789600134827 3058662.4221812398172915, 410097.0572312700096518 3058974.7532341098412871, 410084.9842858500196598 3059256.7107595698907971, 410096.8723053400171921 3059565.7079259902238846, 410105.3686980700003915 3059977.4264404601417482, 410057.3698413799866103 3060489.0238435701467097, 410068.0270816999836825 3060849.4120060200802982, 410124.5958214299753308 3061288.6273336601443589, 410199.4513755199732259 3061908.9397851801477373, 410234.2254279599874280 3062270.3635190902277827, 410313.6409209599951282 3062761.9003486097790301, 410415.7671917499974370 3063331.8571749101392925, 410647.5234190499759279 3063830.3892064001411200, 410812.9444198799901642 3064094.6680718800053000, 411074.2606563600129448 3064465.8419645498506725, 411360.4811392399715260 3064863.8634082698263228, 411504.1082073199795559 3065050.2355868602171540, 411771.8210549000068568 3065293.2858992200344801, 412068.0615091000217944 3065434.6892788698896766, 412382.5915828300057910 3065756.6412600399926305, 412752.6224120199913159 3065978.6804146599024534, 413059.3565590499783866 3066480.3191087199375033, 413224.6606379100121558 3066744.6502000498585403, 413387.7711168800015002 3067060.3462834102101624, 413469.0377504500211217 3067526.4820909900590777, 413554.8678182699950412 3067864.2837638300843537, 413618.7826878000050783 3068150.0291757001541555, 413631.6613738299929537 3068433.4708262099884450, 413621.6946459200116806 3068664.0217244499363005, 413577.7911887399968691 3069099.1084533301182091, 413562.2584982499829493 3069458.4333054898306727, 413495.3559874399797991 3069866.8696289202198386, 413557.2289555100142024 3070177.7551805498078465, 413642.8772630600142293 3070541.4586866898462176, 413731.8471253999741748 3070828.1895576999522746, 414002.6583652300178073 3070994.4607951901853085, 414222.4230172500247136 3071158.0956461001187563, 414416.0092394800158218 3071346.7071077497676015, 414662.8728587700170465 3071486.0698362397961318, 414829.1898449300206266 3071724.6233813897706568, 415043.3508446600171737 3072016.6961677097715437, 415264.0450877799885347 3072180.3939610300585628, 415528.2701525199809112 3072475.2156242700293660, 415696.6066890999791212 3072687.9803972300142050, 415861.7566830299911089 3072952.2780328500084579, 415925.5646407799795270 3073237.8534117699600756, 415914.3981690100044943 3073494.6032770802266896, 415953.2035086399991997 3073778.9802166000008583, 415942.0498980400152504 3074035.4028153801336884, 415753.4883027899777517 3074310.1052238200791180, 415482.0525094799813814 3074760.6886010598391294, 415138.9851585999713279 3075105.5891065001487732, 414716.3577976400265470 3075549.9696357101202011, 414371.1577963199815713 3075946.1611743802204728, 413933.7194004100165330 3076132.6692530401051044, 413550.6856999099836685 3076244.5632167197763920, 413192.6660383300040849 3076357.3121514501981437, 412903.1506596499821171 3076627.5077560101635754, 412622.5228166700107977 3076692.1714806798845530, 412083.9000772599829361 3076900.1925658797845244, 411823.8935444399830885 3077068.5651229801587760, 411409.2470860999892466 3077333.1922181099653244, 411022.0184662200044841 3077522.0067992601543665, 410634.6753238899982534 3077736.4993575699627399, 410426.8278062900062650 3077881.7052990500815213, 409991.7757120400201529 3078016.7095984299667180, 409634.0247007100260817 3078104.0572898099198937, 409234.9058725200011395 3078009.4024068098515272, 408849.9170564499800093 3078146.8292240598239005, 408521.4722883499925956 3078158.2377156699076295, 408140.7925513199879788 3078218.7632200899533927, 407759.1523960999911651 3078279.1542547899298370, 407500.3500721100135706 3078422.1252493797801435, 407265.3599833599873818 3078617.5850830301642418, 406953.2259675500099547 3078835.2034782101400197, 406838.9124037399888039 3079164.2800378100946546, 406774.7927144700079225 3079470.0408709198236465, 406711.6120314699946903 3079775.8399527198635042, 406675.7843230200232938 3080005.9085955698974431, 406614.8285637599765323 3080260.3572564800269902, 406621.2964642000151798 3080697.3764153500087559, 406685.3241161400219426 3080983.2636861298233271, 406888.4352245299960487 3081557.6773613397963345, 407193.7829573699855246 3082085.3430394101887941, 407409.4934450499713421 3081819.9970530900172889, 407899.8554950199904852 3081558.4208615701645613, 408462.9824659799924120 3081377.6627528001554310, 408812.9225506400107406 3081469.7482799100689590, 409181.3952092800172977 3081691.4541794802062213, 409442.0928350299946032 3082088.5924301501363516, 409674.4191952099790797 3082561.6496525299735367, 409855.5403107400052249 3083216.4924417501315475, 409961.8876749500050209 3083276.8751888899132609, 410285.7016328499885276 3083369.3620804501697421, 410410.7943185099866241 3083375.4091370902024209, 410637.8147590499720536 3083386.2837970801629126, 410759.5969410599791445 3083469.3227488598786294, 410958.3121668900130317 3083555.6724602598696947, 411128.8541957599809393 3083692.6023944797925651, 411162.4771291600191034 3084053.9209894798696041, 411145.0858532700221986 3084412.8246397902257740, 410970.0884519499959424 3084918.5242822901345789, 410784.2511975800152868 3085115.1396356499753892, 410469.2670840899809264 3085357.2109166099689901, 410132.4541272299829870 3085546.4465482500381768, 409847.8727277599973604 3085687.1584874298423529, 409813.1925191999762319 3085709.4336965498514473, 409749.6186187699786387 3086113.2317302101291716, 409705.7370603500166908 3086574.0359887899830937, 409756.5428218399756588 3087142.0581687199883163, 410256.3187905399827287 3087240.8680799300782382, 410622.1803359499899670 3087539.7952369698323309, 410807.6177166100242175 3087933.5651011499576271, 410860.3908005999983288 3088475.7977924598380923, 410789.4124917900189757 3088961.3620614297688007, 410739.0238645499921404 3089550.5054474901407957, 410683.1103134099976160 3090268.1474809697829187, 410658.8108474300242960 3090832.9877845398150384, 410664.8998950900277123 3091295.9774083001539111, 410471.4468454599846154 3091673.2631089100614190, 410138.6633550900151022 3092378.8027492500841618, 409692.1268914099782705 3092796.3614285299554467, 409478.0259940699907020 3093095.6399257797747850, 409188.1167389000183903 3093365.8773420499637723, 409101.0283847899991088 3093644.9341308497823775, 409116.1029811300104484 3093877.1336468202061951, 409351.4179564699879847 3094273.0607951800338924, 409594.4181349200080149 3094489.4755989001132548, 409940.5463051599799655 3094658.7303559100255370, 410309.4629978900193237 3094880.5733533701859415, 410755.3299805800197646 3095080.2878149501048028, 411175.2701737700263038 3095278.7975890100933611, 411824.0985591799835674 3095461.1823583599179983, 412469.6746779400273226 3095695.0545916198752820, 413052.8983575499732979 3096234.8680219999514520, 413596.3998153900029138 3096490.3095875601284206, 414018.3175078899948858 3096663.0223923497833312, 414408.6700371099868789 3096962.8942905799485743, 414804.4541130299912766 3097160.4182070000097156, 415442.0291438199928962 3097574.0210599298588932, 416271.0997535500209779 3098253.1841958998702466, 416734.9821304099750705 3098607.9509531799703836, 417068.3468048700015061 3099085.3462719898670912, 417228.2785770599730313 3099478.4518696898594499, 417285.0558475300204009 3099918.1905548400245607, 417364.5879381999839097 3100410.1765030701644719, 417402.0387467400287278 3100720.4505920200608671, 417414.7257456000079401 3101595.5367629402317107, 417489.3838777199853212 3102220.3399749798700213, 417527.5261028800159693 3102250.2769083599559963, 417696.4736384199932218 3102412.7827213797718287, 417890.2546297499793582 3102602.0601640101522207, 417948.4493667900096625 3102964.6171152400784194, 417661.9753253299859352 3103156.7460660301148891, 417150.2236036700196564 3103286.1946546798571944, 416743.4684898600098677 3103369.5728074098005891, 416438.7778069499763660 3103406.3909191298298538, 416280.3775171400047839 3103552.7814198201522231, 415984.0287104099988937 3103950.2248492701910436, 415892.6838287800201215 3104280.1185443401336670, 416061.6627896900172345 3104442.3857234600000083, 416358.5887773500289768 3104559.5347516899928451, 416636.0119307499844581 3104572.8954881201498210, 416860.3252394800074399 3104635.0713851000182331, 416898.4002967299893498 3104666.3488319697789848, 416839.7701839500223286 3105017.1935227098874748, 416714.1122790100052953 3105603.1048946399241686, 416602.2161582299740985 3106447.1391109498217702, 416521.9884564899839461 3107138.0191875798627734, 416359.0623888699919917 3108005.6536869700066745, 416453.2165257000015117 3108755.7738092900253832, 416699.1702348599792458 3109486.6288304901681840, 416726.4369763800059445 3110028.0105188400484622, 416862.4690095100086182 3110368.5571091198362410, 417003.9612230000202544 3110606.2663837200962007, 417196.3247833600034937 3110846.2047698600217700, 417539.4541299300035462 3111067.2945158099755645, 417982.0606149699888192 3111343.5711517301388085, 418625.0747413599747233 3111455.2583026802167296, 419340.7047481900081038 3111795.0972665902227163, 419674.2464938500197604 3112428.3071979298256338, 419532.0778598000179045 3113452.2650967300869524, 419122.9696516499971040 3114820.3112881900742650, 419022.3458765899995342 3115294.1110607502050698, 418940.9431594000197947 3115419.3054562299512327, 419006.7058370700106025 3115628.2722827899269760, 418990.8741073299897835 3115988.0116207599639893, 419099.6728012899984606 3116353.7989339302293956, 419140.3043230799958110 3116675.3146223300136626, 419148.9797971000079997 3116739.8605572301894426, 419093.1593760999967344 3116872.5847121300175786, 419240.2407539300038479 3117132.8173168399371207, 419456.3185758100007661 3117374.7836219798773527, 419619.3212583800195716 3117665.6868466897867620, 419958.6910231300280429 3117965.0325111201964319, 420248.1856405800208449 3118261.7543555498123169, 420491.4046112700016238 3118453.3427441599778831, 420688.1776093000080436 3118565.8080471102148294, 420889.5162881999858655 3118574.9256150000728667, 421140.6759134500171058 3118586.6004428900778294, 421421.1209801899967715 3118522.6103435899131000, 421731.0478118800092489 3118356.8367188400588930, 422019.4769797999761067 3118113.0414686598815024, 422323.7691513299942017 3118075.6015908401459455, 422392.8582131899893284 3118207.4624460497871041, 422412.0681022399803624 3118337.2180169802159071, 422428.9865353900240734 3118518.5888967202045023, 422526.1455046099727042 3118688.7188092102296650, 422321.4462901800288819 3118799.0001843199133873, 422166.9274368599872105 3118969.3001270000822842, 422131.9211858999915421 3119173.8321348698809743, 422123.9450773699791171 3119353.6619254797697067, 422090.0874793200055137 3119532.3310715998522937, 422212.0585578799946234 3119641.0651783598586917, 422407.8354250700213015 3119753.1965855797752738, 422758.4669130599941127 3119795.4596108798868954, 423136.1167746999999508 3119813.2532590799964964, 423303.3298128700116649 3120027.0120751601643860, 423298.7579379900125787 3120129.7953608199022710, 423080.5306769200251438 3120480.2354096998460591, 422895.9811672400101088 3120677.6781709901988506, 422655.3484735200181603 3120949.3803699798882008, 422493.4750908300047740 3121199.4532794901169837, 422300.2094935799832456 3121551.0204756399616599, 422155.4471717100241221 3121956.5735912299714983, 422016.2308023200021125 3122259.1613245401531458, 422054.6478203000151552 3122518.3592585599981248, 422268.2412622499978170 3122811.8049344900064170, 422506.7370990000199527 3123106.1437069298699498, 422644.6196242599980906 3123396.2332448400557041, 422703.3789343099924736 3123759.4546470697969198, 422742.9023829500074498 3123993.1242661997675896, 422728.0576661400264129 3124327.1611336399801075, 422692.8835627299849875 3124557.1837908797897398, 422634.1120447299908847 3124734.9875688799656928, 422426.2965565599733964 3124918.1812502900138497, 422713.4033383100177161 3125046.4994578100740910, 423014.6542623399873264 3125244.3577957600355148, 423335.6135415899916552 3125388.1227576602250338, 423664.5645577899995260 3125352.2742451201193035, 423973.1858571399934590 3125212.0744679300114512, 424520.1596264300169423 3124851.2821910101920366, 424891.0446153000229970 3124456.7271820600144565, 425255.1100844399770722 3124216.1702118702232838, 425429.3028116800123826 3124250.0975623400881886, 425514.9542129699839279 3124589.0733944699168205, 425422.0125734100001864 3124970.9996907501481473, 425359.7657114699832164 3125225.3865222302265465, 425247.8519366200198419 3125452.2072439100593328, 425080.4183697800035588 3125804.9011881398037076, 424886.7621275900164619 3126208.0362114901654422, 424794.0696732599753886 3126564.2958427998237312, 424519.2087893799762242 3127066.4981490699574351, 424368.6840956700034440 3127600.3976171100512147, 424292.6987945199944079 3128163.5496773500926793, 424319.7539256499730982 3128654.2203036700375378, 424435.8355031799874268 3128891.5564251202158630, 424707.0218547999975272 3129007.2348353499546647, 425035.6507549100206234 3128996.9029717901721597, 425419.8502231099992059 3128860.2417724798433483, 425658.3233515400206670 3128613.8368659201078117, 425769.2415408400120214 3128387.1980908699333668, 425960.3997558800037950 3128061.4840243798680604, 426042.9890481299953535 3127910.6746214600279927, 426308.6549283799831755 3127614.2217956501990557, 426698.7021258000168018 3127348.9497157298028469, 427234.3070424600155093 3127219.7118134298361838, 427560.7327670099912211 3127260.7483895299956203, 427676.9483392799738795 3127472.3285592300817370, 427640.6980531099834479 3127702.1902777901850641, 427469.7268288700142875 3128132.2361047598533332, 427428.6538383199949749 3128491.0325288199819624, 427210.3975013599847443 3128841.4303001100197434, 427130.7848067699815147 3129481.6185763101093471, 427150.7456101300194860 3130126.7282537398859859, 427200.9982320800190791 3130695.5669167297892272, 427279.5851479099947028 3131188.5911310100927949, 427335.8561009300174192 3131409.5981426001526415, 427385.3315059699816629 3131439.8805361799895763, 427861.9677580299903639 3131486.5687577500939369, 428305.5767739299917594 3131712.0176669098436832, 428627.0566955499816686 3131880.6957679800689220, 428993.8588234300259501 3132128.4148400598205626, 429588.4957556300214492 3132385.9982925099320710, 430179.9091307600028813 3133287.0630113300867379, 430419.8723420600290410 3134172.5993973598815501, 430550.1923676800215617 3134641.6532480800524354, 430660.2529045999981463 3135006.6612314898520708, 430673.0372415899764746 3135316.4231142299249768, 430733.5337976799928583 3135653.4927486199885607, 430670.9532670300104655 3135933.5812021200545132, 430507.8966005999827757 3136209.6914931698702276, 430470.0230413399985991 3136516.8245449298992753, 430457.0211050100042485 3136825.0944817299023271, 430697.2691403899807483 3137659.3099641501903534, 431815.8257203099783510 3137476.9763998198322952, 431834.8012408299837261 3138198.3768955399282277, 431840.7770617100177333 3138636.2544283601455390, 431925.8530162100214511 3139000.3901356002315879, 432170.2622988600051031 3139191.3105741101317108, 432522.3431357700028457 3139206.8935064901597798, 432971.1422428400255740 3139329.4741693302057683, 433331.4254717300063930 3139165.2017528498545289, 433662.1378487399779260 3139102.3966231602244079, 433895.1797359500196762 3138932.5629458501935005, 434101.7417621199856512 3138838.6310968999750912, 434282.5076837399974465 3138743.6319384900853038, 434539.0527261400129646 3138626.2956236000172794, 434796.5790508299833164 3138508.7821000101976097, 435005.7188695800141431 3138337.8893010797910392, 435388.6025700999889523 3138225.9038408501073718, 435900.1430241700145416 3138068.5582205802202225, 436575.9603798500029370 3138175.5764213898219168, 437239.5150819799746387 3138590.7213821802288294, 437406.8996796500287019 3139370.1766885998658836, 437738.3858248500037007 3139873.7946111699566245, 438044.0088144000037573 3140376.2513212999328971, 438460.4951617000042461 3140677.7554238201119006, 438854.9190079600084573 3140875.2251220401376486, 439304.7802058699890040 3140972.6881197099573910, 439650.8493821700103581 3141116.2095908601768315, 440151.3958426900207996 3141215.6033689398318529, 440476.1395240299752913 3141281.3972328999079764, 441160.0860584300244227 3141208.7581696901470423, 441550.3414245599997230 3140917.0994584900327027, 441885.8560562399798073 3140751.5432338598184288, 442352.9387102799955755 3140437.5722827902063727, 442590.6807731700246222 3140190.7110945400781929, 442843.4867585899773985 3140176.1126116598024964, 443197.9175505000166595 3140140.2274073502048850, 443553.3502234600018710 3140104.4020106801763177, 443880.7915783699718304 3140093.1007609800435603, 444328.2366040499764495 3140241.6444543101824820, 444652.7552367299795151 3140333.2706770999357104, 444821.5081003599916585 3139902.9743073498830199, 444942.6630021100281738 3139445.0826004198752344, 445036.8015081799821928 3139011.5249873502179980, 445077.5486184299807064 3138653.1393659599125385, 445228.4170902600162663 3138093.5023561101406813, 445499.8753283999976702 3137642.1259461501613259, 445892.8139094699872658 3137299.3776351502165198, 446364.0418808900285512 3137474.5977299399673939, 446712.3590731300064363 3137592.6582306600175798, 447546.7811043700203300 3138118.7176013500429690, 448066.2636719800066203 3138347.4820291600190103, 448739.0782453200081363 3138557.3604085701517761, 449208.9881253999774344 3138758.2652944400906563, 449709.8606138100149110 3138831.9150221101008356, 450214.3845795500092208 3138828.4212905000895262) rgeos/cleanup0000755000176200001440000000004714455462450012760 0ustar liggesusers#!/bin/sh rm -f config.* src/Makevars rgeos/configure0000755000176200001440000027402114455462450013317 0ustar liggesusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for rgeos 0.6-4. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: Roger.Bivand@nhh.no about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='rgeos' PACKAGE_TARNAME='rgeos' PACKAGE_VERSION='0.6-4' PACKAGE_STRING='rgeos 0.6-4' PACKAGE_BUGREPORT='Roger.Bivand@nhh.no' PACKAGE_URL='' ac_unique_file="src/rgeos.c" ac_subst_vars='LTLIBOBJS LIBOBJS PKG_LIBS PKG_CPPFLAGS GEOS_CONFIG target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_geos_config ' ac_precious_vars='build_alias host_alias target_alias' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures rgeos 0.6-4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/rgeos] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of rgeos 0.6-4:";; esac cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-geos-config=GEOS_CONFIG the location of geos-config Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF rgeos configure 0.6-4 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by rgeos $as_me 0.6-4, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # find R home and set correct compiler + flags : ${R_HOME=`R RHOME`} if test -z "${R_HOME}"; then as_fn_error $? "cannot determine R_HOME. Make sure you use R CMD INSTALL!" "$LINENO" 5 fi RBIN="${R_HOME}/bin/R" # pick all flags for testing from R : ${CC=`"${RBIN}" CMD config CC`} : ${CXX=`"${RBIN}" CMD config CXX`} #: ${CPP=`"${RBIN}" CMD config CPP`} : ${CFLAGS=`"${RBIN}" CMD config CFLAGS`} : ${CPPFLAGS=`"${RBIN}" CMD config CPPFLAGS`} : ${LDFLAGS=`"${RBIN}" CMD config LDFLAGS`} # AC_SUBST([CC],["clang"]) # AC_SUBST([CXX],["clang++"]) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CC: ${CC}" >&5 printf "%s\n" "$as_me: CC: ${CC}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CXX: ${CXX}" >&5 printf "%s\n" "$as_me: CXX: ${CXX}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${PACKAGE_NAME}: ${PACKAGE_VERSION}" >&5 printf "%s\n" "$as_me: ${PACKAGE_NAME}: ${PACKAGE_VERSION}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for /usr/bin/svnversion" >&5 printf %s "checking for /usr/bin/svnversion... " >&6; } if test ${ac_cv_file__usr_bin_svnversion+y} then : printf %s "(cached) " >&6 else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/usr/bin/svnversion"; then ac_cv_file__usr_bin_svnversion=yes else ac_cv_file__usr_bin_svnversion=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_bin_svnversion" >&5 printf "%s\n" "$ac_cv_file__usr_bin_svnversion" >&6; } if test "x$ac_cv_file__usr_bin_svnversion" = xyes then : SVN_VERSION=`svnversion -n '.'` else $as_nop SVN_VERSION="" fi if test -n "${SVN_VERSION}" && test "${SVN_VERSION}" != "exported" && test "${SVN_VERSION}" != "Unversioned directory"; then echo "${SVN_VERSION}" > inst/SVN_VERSION else SVN_VERSION=`cat inst/SVN_VERSION | tr -d '\n'` fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: svn revision: ${SVN_VERSION}" >&5 printf "%s\n" "$as_me: svn revision: ${SVN_VERSION}" >&6;} GEOS_CONFIG="geos-config" GEOS_CONFIG_SET="no" # Check whether --with-geos-config was given. if test ${with_geos_config+y} then : withval=$with_geos_config; geos_config=$withval fi if test -n "$geos_config" ; then GEOS_CONFIG_SET="yes" GEOS_CONFIG="${geos_config}" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: geos-config set to $GEOS_CONFIG" >&5 printf "%s\n" "$as_me: geos-config set to $GEOS_CONFIG" >&6;} fi if test "$GEOS_CONFIG_SET" = "no" ; then # Extract the first word of ""$GEOS_CONFIG"", so it can be a program name with args. set dummy "$GEOS_CONFIG"; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GEOS_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $GEOS_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GEOS_CONFIG="$GEOS_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_GEOS_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GEOS_CONFIG" && ac_cv_path_GEOS_CONFIG=""no"" ;; esac fi GEOS_CONFIG=$ac_cv_path_GEOS_CONFIG if test -n "$GEOS_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GEOS_CONFIG" >&5 printf "%s\n" "$GEOS_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "$GEOS_CONFIG" = "no" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "geos-config not found or not executable." "$LINENO" 5 fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos-config exists" >&5 printf %s "checking geos-config exists... " >&6; } if test -r "${GEOS_CONFIG}"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "geos-config not found - configure argument error." "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos-config executable" >&5 printf %s "checking geos-config executable... " >&6; } if test -x "${GEOS_CONFIG}"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "geos-config not executable." "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos-config usability" >&5 printf %s "checking geos-config usability... " >&6; } if test `${GEOS_CONFIG} --version`; then GEOS_VER=`${GEOS_CONFIG} --version` MAJ_VER=`echo $GEOS_VER | cut -d "." -f 1` MIN_VER=`echo $GEOS_VER | cut -d "." -f 2` PAT_VER=`echo $GEOS_VER | cut -d "." -f 3 | cut -c 1` # GEOS_VER_DOT=`echo $GEOS_VER | tr -d "." | cut -c1-3` GEOS_CPPFLAGS=`${GEOS_CONFIG} --cflags` if test ${MAJ_VER} = 3 && test ${MIN_VER} -lt 7 ; then # if test ${GEOS_VER_DOT} -lt 370 ; then GEOS_LIBS=`${GEOS_CONFIG} --libs` else GEOS_LIBS=`${GEOS_CONFIG} --clibs` fi GEOS_DEP_CLIBS=`${GEOS_CONFIG} --static-clibs | sed 's/-m/-lm/g'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "${GEOS_CONFIG} not usable" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: GEOS version: ${GEOS_VER}" >&5 printf "%s\n" "$as_me: GEOS version: ${GEOS_VER}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos version at least 3.2.0" >&5 printf %s "checking geos version at least 3.2.0... " >&6; } if test ${MAJ_VER} = 3 && test ${MIN_VER} -lt 2 ; then #if test ${GEOS_VER_DOT} -lt 320 ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "Upgrade GEOS to at least 3.2.0" "$LINENO" 5 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi #AC_MSG_CHECKING([geos version not more than 3.8.0]) #if test ${GEOS_VER_DOT} -gt 380 ; then # AC_MSG_RESULT(no) # AC_MSG_ERROR([GEOS version number too high]) #else # AC_MSG_RESULT(yes) #fi TEST_332="no" if test ${MAJ_VER} -gt 3 ; then TEST_332="yes" fi if test ${MAJ_VER} = 3 && test ${MIN_VER} -gt 3 ; then TEST_332="yes" fi if test ${MAJ_VER} = 3 && test ${MIN_VER} = 3 && test ${PAT_VER} -ge 2 ; then TEST_332="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos-config clibs" >&5 printf %s "checking geos-config clibs... " >&6; } if test ${TEST_332} = "yes" ; then #if test ${GEOS_VER_DOT} -lt 332 ; then GEOS_CLIBS=`${GEOS_CONFIG} --clibs` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } GEOS_CLIBS="-lgeos_c" fi PKG_CPPFLAGS="${PKG_CPPFLAGS} ${GEOS_CPPFLAGS}" #AC_SUBST([PKG_LIBS],["${PKG_LIBS} ${GEOS_LIBS} ${GEOS_CLIBS}"]) PKG_LIBS="${PKG_LIBS} ${GEOS_CLIBS}" # honor PKG_xx overrides # for CPPFLAGS we will superfluously double R's flags # since we'll set PKG_CPPFLAGS with this, but that shouldn't hurt CPPFLAGS="${CPPFLAGS} ${PKG_CPPFLAGS}" LIBS="${LIBS} ${PKG_LIBS}" #geosok=yes #AC_CHECK_HEADERS(geos_c.h,,geosok=no) #if test "${geosok}" = no; then # AC_MSG_ERROR([geos_c.h not found in given locations.]) #fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos_c.h presence and usability" >&5 printf %s "checking geos_c.h presence and usability... " >&6; } cat > geos_test.c << _EOCONF #include #include #include int main() { printf("%d\n", GEOS_CAPI_VERSION); exit(0); } _EOCONF if test `${CC} ${CPPFLAGS} -o geos_test geos_test.c 2> /dev/null; echo $?` = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "geos_c.h not found in standard or given locations." "$LINENO" 5 fi rm -f geos_test geos_test.c #AC_CHECK_LIB(geos_c,initGEOS_r,,geosok=no) cat > geos_test.cc <<_EOCONF #include #ifdef __cplusplus extern "C" { #endif static void __errorHandler(const char *fmt, ...) { return; } static void __warningHandler(const char *fmt, ...) { return; } int main() { GEOSContextHandle_t r = initGEOS_r((GEOSMessageHandler) __warningHandler, (GEOSMessageHandler) __errorHandler); finishGEOS_r(r); } #ifdef __cplusplus } #endif _EOCONF #echo "${CXX} ${CPPFLAGS} -o geos_test geos_test.cc ${LIBS}" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos: linking with libgeos_c" >&5 printf %s "checking geos: linking with libgeos_c... " >&6; } ${CXX} ${CPPFLAGS} -o geos_test geos_test.cc ${LIBS} 2> errors.txt if test `echo $?` -ne 0 ; then geosok=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "${geosok}" = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking geos: linking with ${GEOS_DEP_CLIBS}" >&5 printf %s "checking geos: linking with ${GEOS_DEP_CLIBS}... " >&6; } ${CXX} ${CPPFLAGS} -o geos_test geos_test.cc ${GEOS_DEP_CLIBS} 2> errors.txt if test `echo $?` -ne 0 ; then geosok=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } cat errors.txt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Install failure: compilation and/or linkage problems." >&5 printf "%s\n" "$as_me: Install failure: compilation and/or linkage problems." >&6;} as_fn_error $? "initGEOS_r not found in libgeos_c." "$LINENO" 5 else geosok=yes PKG_LIBS="${PKG_LIBS} ${GEOS_DEP_CLIBS}" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi if test "${geosok}" = no; then cat errors.txt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Install failure: compilation and/or linkage problems." >&5 printf "%s\n" "$as_me: Install failure: compilation and/or linkage problems." >&6;} as_fn_error $? "initGEOS_r not found in libgeos_c." "$LINENO" 5 fi rm -f geos_test errors.txt geos_test.cc if test "${geosok}" = no; then as_fn_error $? "libgeos_c not found in given locations." "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: PKG_CPPFLAGS: ${PKG_CPPFLAGS}" >&5 printf "%s\n" "$as_me: PKG_CPPFLAGS: ${PKG_CPPFLAGS}" >&6;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: PKG_LIBS: ${PKG_LIBS}" >&5 printf "%s\n" "$as_me: PKG_LIBS: ${PKG_LIBS}" >&6;} ac_config_files="$ac_config_files src/Makevars" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by rgeos $as_me 0.6-4, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ rgeos config.status 0.6-4 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi