# Geometric Operations

In this section, we consider some of the common kinds of geometries that arises in applications. These include Point, LineString, Polygon, GeometryCollection, MultiPolygon, MultiPoint, and MultiLineString. For brevity in the examples, we will use the prefix const AG = ArchGDAL.

## Geometry Creation

To create geometries of different types,

point = ArchGDAL.createpoint(1.0, 2.0)
linestring = ArchGDAL.createlinestring([(i,i+1) for i in 1.0:3.0])
linearring = ArchGDAL.createlinearring([(0.,0.), (0.,1.), (1.,1.)])
simplepolygon = ArchGDAL.createpolygon([(0.,0.), (0.,1.), (1.,1.)])
complexpolygon = ArchGDAL.createpolygon([[(0.,0.), (0.,j), (j,j)] for j in 1.0:-0.1:0.9])
multipoint = ArchGDAL.createlinearring([(0.,0.), (0.,1.), (1.,1.)])
multilinestring = ArchGDAL.createmultilinestring([[(i,i+1) for i in j:j+3] for j in 1.0:5.0:6.0])
multipolygon = ArchGDAL.createmultipolygon([[[(0.,0.), (0.,j), (j,j)]] for j in 1.0:-0.1:0.9])
Geometry: MULTIPOLYGON (((0 0,0 1,1 1)),((0 0,0.0 0.9,0.9 0.9)))

Alternatively, they can be assembled from their components.

point = ArchGDAL.createpoint()

linestring = ArchGDAL.createlinestring()
for i in 1.0:3.0
end

linearring = ArchGDAL.createlinearring()
for i in 1.0:3.0
end

polygon = ArchGDAL.createpolygon()
for j in 1.0:-0.1:0.9
ring = ArchGDAL.createlinearring([(0.,0.), (0.,j), (j,j)])
end

multipoint = ArchGDAL.createmultipoint()
for i in 1.0:3.0
pt = ArchGDAL.createpoint(i, i+1)
end

multilinestring = ArchGDAL.createmultilinestring()
for j in 1.0:5.0:6.0
line = ArchGDAL.createlinestring([(i,i+1) for i in j:j+3])
end

multipolygon = ArchGDAL.createmultipolygon()
for j in 1.0:-0.1:0.9
poly = ArchGDAL.createpolygon([(0.,0.), (0.,j), (j,j)])
end

They can also be constructed from other data formats such as:

## Geometry Modification

The following methods are commonly used for retrieving elements of a geometry.

The following methods are commonly used for modifying or adding to a geometry.

## Unary Operations

The following is an non-exhaustive list of unary operations available for geometries.

### Predicates

The following predicates return a Bool.

### Immutable Operations

The following methods do not modify geom.

### Mutable Operations

The following methods modifies the first argument geom.

## Binary Operations

The following is an non-exhaustive list of binary operations available for geometries.

### Predicates

The following predicates return a Bool.

### Immutable Operations

The following methods do not mutate the input geomteries g1 and g2.

### Mutable Operations

The following method modifies the first argument g1.