| BlueSpray - Help © SchoonerTurtles, Inc. 2012-2015
Introduction
Contents
Getting Started
Download
Navigating
Tutorials
Scripting
Advanced
About
| # The Java Topology Suite (needs to be updated to Python) BlueSpray uses some portions of the GeoTools including the Java Topology Suite(JTS) from Vivid Solutions, Inc. This package contains the defintions for the Simple Features from the OpenGIS Consortium. These features represent the most commonly used geometric shapes for working with vector data and a number of valuable functions for working with the shapes. The one clarification we must make is that while the JTS contains some functions that perform topological operations, the JTS does not include topological data structures.It you are editing or processing topological data such as stream or road networks or polotical boundaries you'll want to use LayerVector objects instead of Simple Features. BlueSpray provides special functions for working specifically with geometries. You can open and save geometries from shapefiles, query and update them in databases, and convert them to other layer types. Most of these functions were described on the Packages page. The Vivid Solutions library also provides a large number of functions for working with geometries. These are summarized below. We have included the JavaDocs for the geometries and the class names below are linked to them. Coordinate - coordinates define each of the points within a geometry Geometry - the base class for all geometry types and the one you'll probably use the most often Polygon - contains special functions to access the holes within a polygon Geometry Factory - class to create the geometry objects WKTReader - converts Well-Known Text format strings defining geometries into binary geometries WKTWriter - converts existing geometries into the Well-Known Text format Below we've provided a selection of the most commonly used JTS packages, classes, and functions with examples of how they would be tyically used. The examples are in JavaScript syntax and, since JavaScript is a variant-type language, we've provided the type of the return value in the name. Some clues to the type of return value are: Flag - a boolean variable with a value of "true" or "false" TheGeomtry - an object created from one of the subclasses of "Geoemtry" ## Package for SimpleFeature data types: com.vividsolutions.jts.geom ### Class: Coorindate This is a very simple class that is used to hold 2 dimensional (x,y) coordinates and 3 dimensional (x,y,z) coordinates. Attributes:
    double x;
    double y;
    double z;
### Class: Geometry Geometry is a very powerful and flexible class. Geometries represent all types of SimpleFeatures including collections of SimpleFeatures. I've found that since the Geometry class contains functions to access the individual geometries in a collection I really don't need the GeometryCollection class. #### Basics
    	var NewGeometry=TheGeomtry.clone();
    	var TypeString=TheGeomtry.getGeometryType(): - "MULTIPOLYGON", "POINT", etc.
#### Information about Geometries
    var Flag=TheGeometry.isSimple(); - no lines intersect
    var Flag=TheGeometry.isValid(); - true if the geometry is valid (i.e. no overlapping polygons)
    var Flag=TheGeometry.isEmpty();
    var Flag=TheGeometry.getDimension(); - returns 2 for 2d data, 3 for 3d
#### Working with collections of geometries
    	var NumGeometries=TheGeometry.getNumGeometries(); - returns the number of geometries in a geometry collection
#### Calculations
    	var TheDistance=TheGeometry.distance(Geometry);
       var TheArea=TheGeometry.getArea();
       var TheLength=TheGeometry.getLength();
#### Boundaries of Geometries
    	var NewGeometry=TheGeometry.getBoundary(); - ?
    	var NewGeometry=TheGeometry.getEnvelope(); - returns a bounding rectangle
    	var NewGeometry=TheGeometry.convexHull();
#### Getting Points
    	var ThePoint=TheGeometry.getCentroid(); - returns a POINT geometry at the centroid of the geometry
    	var ThePoint=TheGeometry.getInteriorPoint(); - returns a POINT in the interior if possible, otherwise on the boundary
#### Convertions
    	var TheWKTString=TheGeometry.toText() - Well-Known text (WKT) representation
       var NumPoints=TheGeometry.getNumPoints();
    	var CoordinateArray=TheGeometry.getCoordinates();
#### Relationships with other Geometries
    	var Flag=Geoemtry1.disjoint(Geometry2); - true if the geometries do not touch at all
      	var Flag=Geoemtry1.touches(Geometry2); -
       var Flag=Geoemtry1.intersects(Geometry2);
       var Flag=Geoemtry1.crosses(Geoemtry2)
       var Flag=Geoemtry1.within(Geoemtry2); - true if this geometry is within the specified geomegtry
       var Flag=Geoemtry1.contains(Geoemtry2) - true if this geometry contains the specified geometry within it's boundary (i.e. does not touch the boundary)
       var Flag=Geoemtry1.overlaps(Geoemtry2)
       var Flag=Geoemtry1.covers(Geoemtry2) - true if this geometry completely covers the speciifed geometry (i.e. their boundaries may be shared)
       var Flag=Geoemtry1.equals(Geoemtry2)
#### Operations to create new Geometries from the Relationships between two Geometries
    	var NewGeometry=Geoemtry1.intersection(Geometry2);
     	var NewGeometry=Geoemtry1.union(Geometry2);
     	var NewGeometry=Geoemtry1.difference(Geometry2);
#### Buffering
    	BufferOp.CAP_ROUND - (default) a semi-circle
    	BufferOp.CAP_BUTT - a straight line perpendicular to the end segment
    	BufferOp.CAP_SQUARE - a half-square
    	var NewGeometry=TheGeometry.buffer(TheDistance); - creates a buffered geometry based on the distance in map units
      	var NewGeometry=TheGeometry.buffer(TheDistance,NumQuatratSegements); - buffer with the number of segments used to create a circle specified
       var NewGeometry=TheGeometry.buffer(TheDistance,NumQuatratSegements,TheEndCapStyle); - buffer with the end cap style added
### Polygon
    	var NumHoles=ThePolygon.getNumInteriorRing();
    	var TheLineString=ThePolygon.getInteriorRingN(index); - returns a LineString
    	var TheLineString=ThePolygon.getExteriorRing();
### GeometryFactory This class creates a number of functions to create geometries of all types.
    	var TheFactory=GeometryFactory(); - creates a new geometry factory
    	var TheGeometryCollection=createGeometryCollection(Geometry[] TheGeometries); - creates a geometry collection from an array of existing geometries

     	var ThePoint=createPoint(TheCoordinate); - creates a Point geometry from a single coordinate
     	var TheLinearRing=createLinearRing(TheCoordinates); - creates a linear ring from an array of coordinates
     	var TheLineString=createLineString(TheCoordinates); - creates a linear string from an array of coordinates
     	var TheMultiLineString=createMultiLineString(TheLineStrings)- creates a geometry with mulitple linear strings from an array of linear strings
     	var TheMultiPolygon=createMultiPolygon(ThePolygons); - creates a Multipolygon geometry from an array of polygons
     	var ThePolygon=createPolygon(TheLinearRingShell,TheLinearRingHoles); creates a polygon from a shell (the exterior) and an array of interior holes
## Package for Input and Output: com.vividsolutions.jts.io These functions convert data to and from the SimpleFeature data types. This allow syou to get geomtries in the standard Well Known Text (WKT) format and the Well Known Binary (WKB) format. The text format is valuable because it both allows you to look at your spatial data and because spatial databases typically use this as the format to insert data into the database. The binary format ### WKTReader The example below shows how to create a polygon that covers the northern hemisphere in geographic coordinates.
    	var TheReader=new WKTReader();
    	var TheBox=TheReader.read("POLYGON((-180 90,180 90,180 0,-180 0,-180 90))");
### WKTWriter Converting an existing SimpleFeature into a WKT string:
    	var TheWriter=new WKTWriter();
    	var TheWKTString=TheWriter.write(TheGeometry);
----------- not needed: ### Geometry Collection Iterator
    GeometryCollectionIterator(Geometry parent)
    boolean hasNext();
    Object next();