Geometry Transformations

Introduction

Each Symbolizer has a property GeometryExpression that allows specifying which geometry attribute will be used in rendering. Being an expression, this property can be used to compute feature geometry utilizing one of the supported transformation functions. The return value of transformation function is a Geometry object.

Supported Transformations

CenterLine

CenterPoint

Returns the center point of a curve.

Syntax

GeometryTransformations.CenterPoint([geom_field])

Example

CentroidPoint

Returns the centroid point of a geometry.

Syntax

GeometryTransformations.CentroidPoint([geom_field])

Example

ConvexHull

Returns the convex hull or convex envelope of the points that form the given geometry object.

Syntax

GeometryTransformations.ConvexHull([geom_field])

Example

Densify

Inserts extra vertices along the line segments that describe the geometry. The distance between these points is defined by distanceTolerance parameter.

Syntax

GeometryTransformations.Densify([geom_field], distanceTolerance)

Example

EndPoint

Returns the end point of a geometry.

Syntax

GeometryTransformations.EndPoint([geom_field]) blue - end points, purple - start points, green - inner points.

Example

blue - end points, purple - start points, green - inner points.

Envelope

Returns a bounding box of the geometry object.

Syntax

GeometryTransformations.Envelope([geom_field])

Example

MBR

Returns the minimum bounding rectangle (MBR) of the geometry object.

Syntax

GeometryTransformations.MBR([geom_field])

Example

MBRLongestAxis

Returns the longest axis of the minimum bounding rectangle.

Syntax

GeometryTransformations.MBRLongestAxis([geom_field])

Example

Offset

Translates the geometry to a new location by adding offset parameters deltaX and deltaY to each coordinate.

Syntax

GeometryTransformations.Offset([geom_field], deltaX, deltaY)

Example

OffsetCurve

Computes the offsetting (inflating/deflating) of both open and closed paths using a number of different join types and end types (Square = 0, Round = 1, Miter = 2).

Syntax

GeometryTransformations.OffsetCurve([geom_field], offset, endType)

Example

Street names are located along the curve produced by OffsetCurve function.

StartPoint

Returns the start point of a geometry.

Syntax

GeometryTransformations.StartPoint([geom_field])

Example

blue - end points, purple - start points, green - inner points.

Vertices

Returns a list of vertices that form the geometry object.

Syntax

GeometryTransformations.Vertices([geom_field])

Example

ViewTransformation

Returns a new geometry object with coordinates transformed to the map view coordinate system that is normally measured in map units (for example, pixels). This function helps to operate with other functions such as OffsetCurve that have parameters measured in map units.

Syntax

GeometryTransformations.ViewTransformation([geom_field], [ViewTransformation])

Custom Transformations

You can extend the list of supported geometry transformations with your own functions. This can be accomplished by implementing a custom function class inherited from GeometryTransformationFunction class defined in MapSurfer.Geometries.TransformationFunctions namespace (MapSurfer.Geometries.dll). This class should have an overriden TransformGeometry function that contains the logic of the function. The parameters of a constructor will be used as parameters of the function. For example, the constructor MyFunc(double deltaX, double deltaY) corresponds to the function GeometryTransformations.MyFunc(Geometry, double, double). In order to give a unique name to the function, you need to add PluginDescription attribute to the class and provide a name as the first parameter of its constructor. See example below

using System;
using GeoAPI.Geometries;
using MapSurfer.Configuration;

namespace MapSurfer.Geometries.TransformationFunctions
{
  [PluginDescription("EndPoint")]
  public class EndPointTranformationFunction : GeometryTransformationFunction
  {
    public EndPointTranformationFunction()
    { 
    }

    protected override Geometry TransformGeometry(Geometry geom)
    {
      ICoordinate[] coords = geom.Coordinates;
      return new Point((ICoordinate)coords[coords.Length - 1].Clone());
    } 
  }
}

Once you have an assembly containing custom geometry functions, you need to copy it to the folder ..\Core\Plugins\Algorithms\GeometryTransformations. Next, you need to clear the cache of assemblies used by MapSurfer.NET to speed up loading. This cache is normally located in C:\Users\YOURUSER\AppData\Local\MapSurfer.NET\YOURVERSION\Core\UserCache, where YOURUSER is the user name for which the framework with the version YOURVERSION was installed.