Update geo-shape-type documentation

Update `geo-shape-type.asciidoc` to include all `GeoShapeType`s supported by the `org.elasticsearch.common.geo.builders.ShapeBuilder`.

Changes include:

1. A tabular mapping of GeoJSON types to Elasticsearch types
2. Listing all types, with brief examples, for all support Elasticsearch types
3. Putting non-standard types to the bottom (really just moving Envelope to the bottom)
4. Linking to all GeoJSON types.
5. Adding whitespace around tightly nested arrays (particularly `multipolygon`) for readability
This commit is contained in:
pickypg 2014-05-06 14:40:46 +02:00 committed by Clinton Gormley
parent 19468880a8
commit 2c11475bdd
1 changed files with 132 additions and 21 deletions

View File

@ -132,49 +132,86 @@ overly bloating the resulting index too much relative to the input size.
[float]
==== Input Structure
The http://www.geojson.org[GeoJSON] format is used to represent Shapes
as input as follows:
The http://www.geojson.org[GeoJSON] format is used to represent
http://geojson.org/geojson-spec.html#geometry-objects[shapes] as input
as follows:
[cols="<,<,<",options="header",]
|=======================================================================
|GeoJSON Type |Elasticsearch Type |Description
|`Point` |`point` |A single geographic coordinate.
|`LineString` |`linestring` |An arbitrary line given two or more points.
|`Polygon` |`polygon` |A _closed_ polygon whose first and last point
must match, thus requiring `n + 1` vertices to create an `n`-sided
polygon and a minimum of `4` vertices.
|`MultiPoint` |`multipoint` |An array of unconnected, but likely related
points.
|`MultiLineString` |`multilinestring` |An array of separate linestrings.
|`MultiPolygon` |`multipolygon` |An array of separate polygons.
|`N/A` |`envelope` |A bounding rectangle, or envelope, specified by
specifying only the top left and bottom right points.
|`N/A` |`circle` |A circle specified by a center point and radius with
units, which default to `METERS`.
|`GeometryCollection` |`N/A` | An unsupported GeoJSON shape similar to the
`multi*` shapes except that multiple types can coexist (e.g., a Point
and a LineString).
|=======================================================================
[NOTE]
=============================================
For all types, both the inner `type` and `coordinates` fields are
required.
Note: In GeoJSON, and therefore Elasticsearch, the correct *coordinate
order is longitude, latitude (X, Y)* within coordinate arrays. This
differs from many Geospatial APIs (e.g., Google Maps) that generally
use the colloquial latitude, longitude (Y, X).
=============================================
[float]
===== http://geojson.org/geojson-spec.html#id2[Point]
A point is a single geographic coordinate, such as the location of a
building or the current position given by a smartphone's Geolocation
API.
[source,js]
--------------------------------------------------
{
"location" : {
"type" : "point",
"coordinates" : [45.0, -45.0]
"coordinates" : [-77.03653, 38.897676]
}
}
--------------------------------------------------
Note, both the `type` and `coordinates` fields are required.
The supported `types` are `point`, `linestring`, `polygon`, `multipoint`
and `multipolygon`.
Note, in geojson the correct order is longitude, latitude coordinate
arrays. This differs from some APIs such as e.g. Google Maps that
generally use latitude, longitude.
[float]
===== Envelope
===== http://geojson.org/geojson-spec.html#id3[LineString]
Elasticsearch supports an `envelope` type which consists of coordinates
for upper left and lower right points of the shape:
A `linestring` defined by an array of two or more positions. By
specifying only two points, the `linestring` will represent a straight
line. Specifying more than two points creates an arbitrary path.
[source,js]
--------------------------------------------------
{
"location" : {
"type" : "envelope",
"coordinates" : [[-45.0, 45.0], [45.0, -45.0]]
"type" : "linestring",
"coordinates" : [[-77.03653, 38.897676], [-77.009051, 38.889939]]
}
}
--------------------------------------------------
The above `linestring` would draw a straight line starting at the White
House to the US Capitol Building.
[float]
===== http://www.geojson.org/geojson-spec.html#id4[Polygon]
A polygon is defined by a list of a list of points. The first and last
points in each (outer) list must be the same (the polygon must be closed).
points in each (outer) list must be the same (the polygon must be
closed).
[source,js]
--------------------------------------------------
@ -204,6 +241,42 @@ arrays represent the interior shapes ("holes"):
}
--------------------------------------------------
[float]
===== http://www.geojson.org/geojson-spec.html#id5[MultiPoint]
A list of geojson points.
[source,js]
--------------------------------------------------
{
"location" : {
"type" : "multipoint",
"coordinates" : [
[102.0, 2.0], [103.0, 2.0]
]
}
}
--------------------------------------------------
[float]
===== http://www.geojson.org/geojson-spec.html#id6[MultiLineString]
A list of geojson linestrings.
[source,js]
--------------------------------------------------
{
"location" : {
"type" : "multilinestring",
"coordinates" : [
[ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0] ],
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0] ],
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8] ]
]
}
}
--------------------------------------------------
[float]
===== http://www.geojson.org/geojson-spec.html#id7[MultiPolygon]
@ -215,14 +288,52 @@ A list of geojson polygons.
"location" : {
"type" : "multipolygon",
"coordinates" : [
[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
[[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
[ [[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]] ],
[ [[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]] ]
]
}
}
--------------------------------------------------
[float]
===== Envelope
Elasticsearch supports an `envelope` type, which consists of coordinates
for upper left and lower right points of the shape to represent a
bounding rectangle:
[source,js]
--------------------------------------------------
{
"location" : {
"type" : "envelope",
"coordinates" : [ [-45.0, 45.0], [45.0, -45.0] ]
}
}
--------------------------------------------------
[float]
===== Circle
Elasticsearch supports a `circle` type, which consists of a center
point with a radius:
[source,js]
--------------------------------------------------
{
"location" : {
"type" : "circle",
"coordinates" : [-45.0, 45.0],
"radius" : "100m"
}
}
--------------------------------------------------
Note: The inner `radius` field is required. If not specified, then
the units of the `radius` will default to `METERS`.
[float]
==== Sorting and Retrieving index Shapes