Geometry Value
 
 
 

Geometry values are handled using a function call GeomFromText('AGF Text string'), as is typical in an SQL query.

The Autodesk extension to WKT, referred to as AGF Text, is a superset of WKT (that is, you can enter WKT as valid AGF Text strings). Dimensionality is optional. It can be XY, XYM, XYZ, or XYZM. If it is not specified, it is assumed to be XY. For more information about AGF, see GisAgfGeometryFactory.

NoteExtra ordinates are ignored, rather than generating an error during AGF text parsing. For example, in the string “POINT (10 11 12)”, the ‘12’ is ignored because the dimensionality is assumed to be XY.

The following is the grammar definition for AGF Text:

<AGF Text> ::= POINT <Dimensionality> <PointEntity>

| LINESTRING <Dimensionality> <LineString>

| POLYGON <Dimensionality> <Polygon>

| CURVESTRING <Dimensionality> <CurveString>

| CURVEPOLYGON <Dimensionality> <CurvePolygon>

| MULTIPOINT <Dimensionality> <MultiPoint>

| MULTILINESTRING <Dimensionality> <MultiLineString>

| MULTIPOLYGON <Dimensionality> <MultiPolygon>

| MULTICURVESTRING <Dimensionality> <MultiCurveString>

| MULTICURVEPOLYGON <Dimensionality> <MultiCurvePolygon>

| GEOMETRYCOLLECTION <GeometryCollection>

<PointEntity> ::= '(' <Point> ')'

<LineString> ::= '(' <PointCollection> ')'

<Polygon> ::= '(' <LineStringCollection> ')'

<MultiPoint> ::= '(' <PointCollection> ')'

<MultiLineString> ::= '(' <LineStringCollection> ')'

<MultiPolygon> ::= '(' <PolygonCollection> ')'

<GeometryCollection : '(' <AGF Collection Text> ')'

<CurveString> ::= '(' <Point> '(' <CurveSegmentCollection> ')' ')'

<CurvePolygon> ::= '(' <CurveStringCollection> ')'

<MultiCurveString> ::= '(' <CurveStringCollection> ')'

<MultiCurvePolygon> ::= '(' <CurvePolygonCollection> ')'

<Dimensionality> ::= // default to XY

| XY

| XYZ

| XYM

| XYZM

<Point> ::= DOUBLE DOUBLE

| DOUBLE DOUBLE DOUBLE

| DOUBLE DOUBLE DOUBLE DOUBLE

<PointCollection> ::= <Point>

| <PointCollection ',' <Point>

<LineStringCollection> ::= <LineString>

| <LineStringCollection> ',' <LineString>

<PolygonCollection> ::= <Polygon>

| <PolygonCollection> ',' <Polygon>

<AGF Collection Text> ::= <AGF Text>

| <AGF Collection Text> ',' <AGF Text>

<CurveSegment> ::= CIRCULARARCSEGMENT '(' <Point> ',' <Point> ')'

| LINESTRINGSEGMENT '(' <PointCollection> ')'

<CurveSegmentCollection> ::= <CurveSegment>

| <CurveSegmentCollection> ',' <CurveSegment>

<CurveStringCollection> ::= <CurveString>

| <CurveStringCollection> ',' <CurveString>

<CurvePolygonCollection> ::= <CurvePolygon>

| <CurvePolygonCollection> ',' <CurvePolygon>

The only other token type is DOUBLE, representing a double precision floating point values. Integer (non-decimal point) input is converted to DOUBLE in the lexical analyzer.

Examples of the Autodesk extensions include:

POINT XY (10 11) // equivalent to POINT (10 11)

POINT XYZ (10 11 12)

POINT XYM (10 11 1.2)

POINT XYZM (10 11 12 1.2)

GEOMETRYCOLLECTION (POINT xyz (10 11 12),POINT XYM (30 20 1.8), LINESTRING XYZM(1 2 3 4, 3 5 15, 3 20 20))

CURVESTRING (0 0 (LINESTRINGSEGMENT (10 10, 20 20, 30 40))))

CURVESTRING (0 0 (CIRCULARARCSEGMENT (11 11, 12 12), LINESTRINGSEGMENT (10 10, 20 20, 30 40)))

CURVESTRING (0 0 (ARC (11 11, 12 12), LINESTRINGSEGMENT (10 10, 20 20, 30 40)))

CURVESTRING XYZ (0 0 0 (LINESTRINGSEGMENT (10 10 1, 20 20 1, 30 40 1)))

MULTICURVESTRING ((0 0 (LINESTRINGSEGMENT (10 10, 20 20, 30 40))),(0 0 (ARC (11 11, 12 12), LINESTRINGSEGMENT (10 10, 20 20, 30 40))))

CURVEPOLYGON ((0 0 (LINESTRINGSEGMENT (10 10, 10 20, 20 20), ARC (20 15, 10 10))), (0 0 (ARC (11 11, 12 12), LINESTRINGSEGMENT (10 10, 20 20, 40 40, 90 90))))

MULTICURVEPOLYGON (((0 0 (LINESTRINGSEGMENT (10 10, 10 20, 20 20), ARC (20 15, 10 10))), (0 0 (ARC (11 11, 12 12), LINESTRINGSEGMENT (10 10, 20 20, 40 40, 90 90)))),((0 0 (LINESTRINGSEGMENT (10 10, 10 20, 20 20), ARC (20 15, 10 10))), (0 0 (ARC (11 11, 12 12), LINESTRINGSEGMENT (10 10, 20 20, 40 40, 90 90)))))