You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Paul Ramsey 14a18becb0 Private method name change, 1def2ed0c8 3 hours ago
benchmarks Clean out some old iterator loops in favour of for loops 1 month ago
capi Rename OverlayNGSnapIfNeeded to OverlayNGRobust, 5 days ago
cmake Remove GIT_COMMIT_HASH entirely 1 year ago
debian Complete Note#1 in the to get out of incubation. 8 years ago
doc Squashed commit of the following: 5 months ago
examples/client Modernize CMake configuration 1 year ago
include Private method name change, 3 hours ago
macros Autotools: Add std=c++11 automatically to the builds 7 months ago
src Private method name change, 3 hours ago
swig Applying patches for Closes #742 2 years ago
tests Add OverlayNG strict mode, from and 4 days ago
tools Fix doxygen errors and re-enable CI test 1 month ago
.astylerc Apply 4-spaces standard indenting, 1 year ago
.azure-pipelines.yml Port MaximumInscribedCircle and LargestEmptyCircle 4 months ago
.codecov.yml Squashed commit of the following: 5 months ago
.drone-1.0.yml Turn off doc building on dronie for now -- all screwy since we are in flux 1 month ago
.editorconfig Remove redundant EditorConfig properties 5 months ago
.git-blame-ignore-revs Add reformatting commit to ignorable commits in blame 1 year ago
.gitignore properly ignore files ending in tilde 4 months ago
.gitlab-ci.yml [automake] Enable silent rule, use in Dronie and Gitlab-CI 1 year ago
.mailmap Add Paul van der Linden merge email 1 year ago
.travis.yml Comment out s390 as seems to hang builds from time to time 1 month ago
AUTHORS Update Martin's email address 2 years ago
CMakeLists.txt Add compile-time flags to turn on OverlayNG 1 month ago
COPYING Fix FSF address in license file (#662) 7 years ago Add developer notes draft 3 months ago
HOWTO_RELEASE add note about trac milestone 6 months ago
INSTALL Move build section from to INSTALL 1 year ago Squashed commit of the following: 5 months ago
NEWS Expose "precise" overlay CAPI functions 4 weeks ago Fix README badge URLs 8 months ago
Version.txt Bump versions for master development to 3.9 11 months ago
acsite.m4 git-svn-id: 5242fede-7e19-0410-aef8-94bd7d2200fb 7 years ago
appveyor.yml Try to get clean appveyor build 1 year ago Stop symlinking as README 3 years ago Add compile-time flags to turn on OverlayNG 1 month ago

GEOS -- Geometry Engine, Open Source

GEOS is a C++11 library for performing operations on two-dimensional vector geometries. It is primarily a port of the JTS Topology Suite Java library. It provides many of the algorithms used by PostGIS, the Shapely package for Python, the sf package for R, and others.

More information is available the project homepage.

Build status

branch / CI Debbie Winnie Dronie Travis CI GitLab CI AppVeyor Bessie Bessie32
master debbie winnie dronie travis gitlab-ci appveyor bessie bessie32
3.8 debbie winnie dronie travis gitlab-ci appveyor
3.7 debbie winnie dronie travis gitlab-ci appveyor


See INSTALL file

Client applications

Using the C interface

GEOS promises long-term stability of the C API. In general, successive releases of the C API may add new functions but will not remove or change existing types or function signatures. The C library uses the C++ interface, but the C library follows normal ABI-change-sensitive versioning, so programs that link only against the C library should work without relinking when GEOS is upgraded. For this reason, it is recommended to use the C API for software that is intended to be dynamically linked to a system install of GEOS.

The geos-config program can be used to determine appropriate compiler and linker flags for building against the C library:

CFLAGS += `geos-config --cflags`
LDFLAGS += `geos-config --ldflags` -lgeos_c

All functionality of the C API is available through the geos_c.h header file.

Documentation for the C API is provided via comments in the geos_c.h header file. C API usage examples can be found in the GEOS unit tests and in the source code of software that uses GEOS, such as PostGIS and the sf package for R.

Using the C++ interface

The C++ interface to GEOS provides a more natural API for C++ programs, as well as additional functionality that has not been exposed in the C API. However, developers who decide to use the C++ interface should be aware that GEOS does not promise API or ABI stability of the C++ API between releases. Breaking changes in the C++ API/ABI are not typically announced or included in the NEWS file.

The C++ library name will change on every minor release.

The geos-config program can be used to determine appropriate compiler and linker flags for building against the C++ library:

CFLAGS += `geos-config --cflags`
LDFLAGS += `geos-config --ldflags` -lgeos

A compiler warning may be issued when building against the C++ library. To remove the compiler warning, define USE_UNSTABLE_GEOS_CPP_API somewhere in the program.

Commonly-used functionality of GEOS is available in the geos.h header file. Less-common functionality can be accessed by including headers for individual classes, e.g. #include <geos/algorithm/distance/DiscreteHausdorffDistance.h>.

#include <geos.h>

Documentation for the C++ API is available at, and basic C++ usage examples can be found in doc/example.cpp.

Scripting language bindings


Ruby bindings are part of GEOS. To build, use the --enable-ruby option when configuring:

./configure .. --enable-ruby


PHP bindings for GEOS are available separately from php-geos.


Python bindings are available via:

  1. Shapely package.
  2. Calling functions from libgeos_c via Python ctypes.


Doxygen documentation can be generated using either the autotools or CMake build systems.

Using Autotools:

cd doc
make doxygen-html

Using CMake:

make docs


To format your code into the desired style, use the astyle version included in source tree:

tools/ <yourfile.cpp>