Package org.goplanit.io.geo
Class PlanitOpenGisUtils
- java.lang.Object
-
- org.goplanit.io.geo.PlanitOpenGisUtils
-
public class PlanitOpenGisUtils extends Object
General geotools related utils. Uses geodetic distance when possible. In case the CRS is not based on an ellipsoid (2d plane) it will simply compute the distance between coordinates using Pythagoras with the unit distance in meters, consistent with theCartesianAuthorityFactory.GENERIC_2DIt is assumed that x coordinate refers to latitude and y coordinate refers to longitude- Author:
- markr
-
-
Field Summary
Fields Modifier and Type Field Description static org.opengis.referencing.crs.CoordinateReferenceSystemCARTESIANCRSIn absence of a geographic crs we can also use cartesian: GENERIC_2Dstatic org.geotools.referencing.crs.DefaultGeographicCRSDEFAULT_GEOGRAPHIC_CRSDefault Coordinate Reference System: WGS84
-
Constructor Summary
Constructors Constructor Description PlanitOpenGisUtils()Constructor Uses default coordinate reference systemPlanitOpenGisUtils(org.opengis.referencing.crs.CoordinateReferenceSystem coordinateReferenceSystem)Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description List<org.opengis.geometry.DirectPosition>convertToDirectPositions(org.locationtech.jts.geom.Coordinate[] coordinates)Convert JTS coordinates to OpenGIS directPositionsorg.opengis.geometry.coordinate.LineStringconvertToOpenGisLineString(org.locationtech.jts.geom.LineString jtsLineString)Convert a JTS line string object to an OpenGis LineString instance by transferring the internal coordinatesorg.opengis.geometry.coordinate.LineStringconvertToOpenGisLineString(org.locationtech.jts.geom.MultiLineString jtsMultiLineString)Converts a JTS MultiLineString with a single entry into an OpenGIS LineString instanceorg.opengis.geometry.DirectPositioncreateDirectPosition(double xCoordinate, double yCoordinate)Create DirectPosition object from X- and Y-coordinatesorg.opengis.geometry.coordinate.LineStringcreateLineString(String value, char ts, char cs)Based on the CSV string construct a line stringorg.opengis.geometry.coordinate.LineStringcreateLineString(List<Double> coordinateList)Create a line string from the doubles passed in (list of doubles containing x1,y1,x2,y2,etc.org.opengis.geometry.coordinate.LineStringcreateLineStringFromCsvString(String value, String ts, String cs)Based on the CSV string construct a line stringorg.opengis.geometry.coordinate.LineStringcreateLineStringFromPositions(List<org.opengis.geometry.coordinate.Position> positionList)Create a line string from the passed in positionsorg.opengis.geometry.coordinate.PositiongetClosestSamplePointOnLineString(org.opengis.geometry.coordinate.Position toMatch, org.opengis.geometry.coordinate.LineString lineString)Find the closest explicit sample point registered on the line string compared to the passed in positiondoublegetDistanceInKilometres(Vertex vertexA, Vertex vertexB)Compute the distance in kilometres between two vertices assuming the positions are set and based on the same crs as registered on this class instancedoublegetDistanceInKilometres(org.opengis.geometry.coordinate.LineString geometry)Compute the length of the line string by traversing all nodes and computing the segment by segment distances TODO: find out if a faster way is possibledoublegetDistanceInKilometres(org.opengis.geometry.coordinate.Position startPosition, org.opengis.geometry.coordinate.Position endPosition)Compute the distance in kilometres between two positions assuming the positions are provided in the same crs as registered on this class instancedoublegetDistanceInMetres(org.opengis.geometry.coordinate.Position startPosition, org.opengis.geometry.coordinate.Position endPosition)Compute the distance in metres between two positions assuming the positions are provided in the same crs as registered on this class instance
-
-
-
Field Detail
-
DEFAULT_GEOGRAPHIC_CRS
public static final org.geotools.referencing.crs.DefaultGeographicCRS DEFAULT_GEOGRAPHIC_CRS
Default Coordinate Reference System: WGS84
-
CARTESIANCRS
public static final org.opengis.referencing.crs.CoordinateReferenceSystem CARTESIANCRS
In absence of a geographic crs we can also use cartesian: GENERIC_2D
-
-
Constructor Detail
-
PlanitOpenGisUtils
public PlanitOpenGisUtils()
Constructor Uses default coordinate reference system
-
PlanitOpenGisUtils
public PlanitOpenGisUtils(org.opengis.referencing.crs.CoordinateReferenceSystem coordinateReferenceSystem)
Constructor- Parameters:
coordinateReferenceSystem- OpenGIS CoordinateReferenceSystem object containing geometry
-
-
Method Detail
-
getDistanceInMetres
public double getDistanceInMetres(org.opengis.geometry.coordinate.Position startPosition, org.opengis.geometry.coordinate.Position endPosition) throws PlanItExceptionCompute the distance in metres between two positions assuming the positions are provided in the same crs as registered on this class instance- Parameters:
startPosition- location of the start pointendPosition- location of the end point- Returns:
- distance in metres between the points
- Throws:
PlanItException- thrown if there is an error
-
getDistanceInKilometres
public double getDistanceInKilometres(org.opengis.geometry.coordinate.Position startPosition, org.opengis.geometry.coordinate.Position endPosition) throws PlanItExceptionCompute the distance in kilometres between two positions assuming the positions are provided in the same crs as registered on this class instance- Parameters:
startPosition- location of the start pointendPosition- location of the end point- Returns:
- distance in kilometres between the points
- Throws:
PlanItException- thrown if there is an error
-
getDistanceInKilometres
public double getDistanceInKilometres(Vertex vertexA, Vertex vertexB) throws PlanItException
Compute the distance in kilometres between two vertices assuming the positions are set and based on the same crs as registered on this class instance- Parameters:
vertexA- vertex with locationvertexB- vertex with location- Returns:
- distance in kilometres between the points
- Throws:
PlanItException- thrown if there is an error
-
createDirectPosition
public org.opengis.geometry.DirectPosition createDirectPosition(double xCoordinate, double yCoordinate) throws PlanItExceptionCreate DirectPosition object from X- and Y-coordinates- Parameters:
xCoordinate- X-coordinate (longitude assumed)yCoordinate- Y-coordinate (latitude assumed)- Returns:
- DirectPosition object representing the location
- Throws:
PlanItException- thrown if there is an error during processing
-
convertToOpenGisLineString
public org.opengis.geometry.coordinate.LineString convertToOpenGisLineString(org.locationtech.jts.geom.LineString jtsLineString) throws PlanItExceptionConvert a JTS line string object to an OpenGis LineString instance by transferring the internal coordinates- Parameters:
jtsLineString- JTS line string input- Returns:
- LineString GeoTools line string output object
- Throws:
PlanItException- thrown if there is an error
-
convertToOpenGisLineString
public org.opengis.geometry.coordinate.LineString convertToOpenGisLineString(org.locationtech.jts.geom.MultiLineString jtsMultiLineString) throws PlanItExceptionConverts a JTS MultiLineString with a single entry into an OpenGIS LineString instance- Parameters:
jtsMultiLineString- JTS MultiLineString input object- Returns:
- LineString GeoTools MultiLineString output object
- Throws:
PlanItException- thrown if there is an error
-
createLineString
public org.opengis.geometry.coordinate.LineString createLineString(List<Double> coordinateList) throws PlanItException
Create a line string from the doubles passed in (list of doubles containing x1,y1,x2,y2,etc. coordinates- Parameters:
coordinateList- source- Returns:
- created line string
- Throws:
PlanItException- thrown if error
-
createLineString
public org.opengis.geometry.coordinate.LineString createLineString(String value, char ts, char cs) throws PlanItException
Based on the CSV string construct a line string- Parameters:
value- the values containing the x,y coordinates in the crs of this instancets- tuple separating charactercs- comma separating character- Returns:
- the LineString created from the String
- Throws:
PlanItException- thrown if error
-
createLineStringFromPositions
public org.opengis.geometry.coordinate.LineString createLineStringFromPositions(List<org.opengis.geometry.coordinate.Position> positionList) throws PlanItException
Create a line string from the passed in positions- Parameters:
positionList- source- Returns:
- created line string
- Throws:
PlanItException- thrown if error
-
createLineStringFromCsvString
public org.opengis.geometry.coordinate.LineString createLineStringFromCsvString(String value, String ts, String cs) throws PlanItException
Based on the CSV string construct a line string- Parameters:
value- the values containing the x,y coordinates in the crs of this instancets- tuple separating string (which must be a a character)cs- comma separating string (which must be a a character)- Returns:
- the LineString created from the String
- Throws:
PlanItException- thrown if error
-
convertToDirectPositions
public List<org.opengis.geometry.DirectPosition> convertToDirectPositions(org.locationtech.jts.geom.Coordinate[] coordinates) throws PlanItException
Convert JTS coordinates to OpenGIS directPositions- Parameters:
coordinates- array of JTS Coordinate objects- Returns:
- List of GeoTools Position objects
- Throws:
PlanItException- thrown if there is an error
-
getDistanceInKilometres
public double getDistanceInKilometres(org.opengis.geometry.coordinate.LineString geometry) throws PlanItExceptionCompute the length of the line string by traversing all nodes and computing the segment by segment distances TODO: find out if a faster way is possible- Parameters:
geometry- to extract length from- Returns:
- length in km
- Throws:
PlanItException- thrown if error
-
getClosestSamplePointOnLineString
public org.opengis.geometry.coordinate.Position getClosestSamplePointOnLineString(org.opengis.geometry.coordinate.Position toMatch, org.opengis.geometry.coordinate.LineString lineString) throws PlanItExceptionFind the closest explicit sample point registered on the line string compared to the passed in position- Parameters:
toMatch- position to get closest tolineString- to sample ordinates from to check- Returns:
- closest ordinate (position) on line string to passed in toMatch position
- Throws:
PlanItException- thrown if error
-
-