初始化

This commit is contained in:
hukekuan@163.com 2017-12-11 15:25:23 +08:00
parent 310fd4fa47
commit 973326ae5c
19 changed files with 344 additions and 21 deletions

View File

@ -73,12 +73,17 @@
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<version>42.1.0</version> <version>42.1.0</version>
</dependency> </dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>
<dependency> <dependency>
<groupId>org.geotools</groupId> <groupId>org.geotools</groupId>
<artifactId>gt-opengis</artifactId> <artifactId>gt-opengis</artifactId>
<version>${geotools.version}</version> <version>${geotools.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.geotools</groupId> <groupId>org.geotools</groupId>
<artifactId>gt-api</artifactId> <artifactId>gt-api</artifactId>
<version>${geotools.version}</version> <version>${geotools.version}</version>

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.common;/** package com.gis3c.spatial.common;/**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.
*/ */
@ -15,7 +15,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
* @Description 空间坐标系相关方法 * @Description 空间坐标系相关方法
* @date 2017-07-10 下午6:31 * @date 2017-07-10 下午6:31
*/ */
public class CRSUtil { public class CRSUtilities {
private final static FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null); private final static FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
public static CoordinateReferenceSystem GetCRSFromSRID(String sridNumber) public static CoordinateReferenceSystem GetCRSFromSRID(String sridNumber)

View File

@ -0,0 +1,315 @@
package com.gis3c.spatial.common;
import com.vividsolutions.jts.geom.*;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import com.vividsolutions.jts.io.WKTWriter;
import org.geotools.geometry.jts.JTSFactoryFinder;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Geometry相关方法
* Created by hukekuan on 2017/12/11.
*/
public class GeometryUtilities {
private final static GeometryFactory geomFactory = JTSFactoryFinder.getGeometryFactory();
private final static WKTReader reader = new WKTReader(geomFactory);
private final static WKTWriter write = new WKTWriter();
/**
* 根据坐标信息生成Point
* @param coordinate
* @return
*/
public static Point CreatePoint(Coordinate coordinate){
return geomFactory.createPoint(coordinate);
}
/**
* 根据经纬度生成Point
* @param x
* @param y
* @return
*/
public static Point CreatePoint(double x,double y){
return geomFactory.createPoint(new Coordinate(x,y));
}
/**
* wkt转geometry
* @param wktStr
* @return
* @throws ParseException
*/
public static Geometry Wkt2Geometry(String wktStr) throws ParseException {
Geometry resultGeometry = null;
if(wktStr == null || "".equals(wktStr)){
return resultGeometry;
}
resultGeometry = reader.read(wktStr);
return resultGeometry;
}
/**
* geometry转wkt
* @param geometry
* @return
*/
public static String Geometry2Wkt(Geometry geometry){
String resultWkt=null;
if(geometry == null){
return resultWkt;
}
resultWkt = write.write(geometry);
return resultWkt;
}
public static Point JSONObject2Point(JSONObject jsonObj){
Point resultPoint = null;
if(jsonObj != null){
resultPoint = GeometryUtilities.CreatePoint(jsonObj.getDouble("x"),jsonObj.getDouble("y"));
}
return resultPoint;
}
public static LineString JSONObject2LineString(JSONArray jsonPaths){
LineString resultLineString = null;
JSONArray pointArray;
JSONArray pointJSON;
List<Coordinate> coordinateList;
if(jsonPaths != null && jsonPaths.size() > 0){
coordinateList = new ArrayList<>();
pointArray = jsonPaths.getJSONArray(0);
for(Object pointObj : pointArray){
pointJSON = (JSONArray) pointObj;
coordinateList.add(new Coordinate(pointJSON.getDouble(0),pointJSON.getDouble(1)));
}
if(coordinateList.size() > 0){
resultLineString = geomFactory.createLineString((Coordinate[]) coordinateList.toArray(new Coordinate[0]));
}
}
return resultLineString;
}
public static Polygon JSONObject2Polygon(JSONArray jsonRings){
Polygon resultPolygon = null;
JSONArray pointArray;
JSONArray pointJSON;
List<Coordinate> coordinateList;
LinearRing linearRing = null;
List<LinearRing> holeRings;
if(jsonRings != null && jsonRings.size() > 0){
if(jsonRings.size() == 1){
pointArray = (JSONArray) jsonRings.get(0);
coordinateList = new ArrayList<>();
for(Object pointObj : pointArray){
pointJSON = (JSONArray) pointObj;
coordinateList.add(new Coordinate(pointJSON.getDouble(0),pointJSON.getDouble(1)));
}
resultPolygon = geomFactory.createPolygon((Coordinate[]) coordinateList.toArray(new Coordinate[0]));
}else if(jsonRings.size() > 1){
holeRings = new ArrayList<>();
for(Object ring : jsonRings){
pointArray = (JSONArray) ring;
coordinateList = new ArrayList<>();
for(Object pointObj : pointArray){
pointJSON = (JSONArray) pointObj;
coordinateList.add(new Coordinate(pointJSON.getDouble(0),pointJSON.getDouble(1)));
}
if(linearRing == null){
linearRing = geomFactory.createLinearRing((Coordinate[]) coordinateList.toArray(new Coordinate[0]));
}else{
holeRings.add(geomFactory.createLinearRing((Coordinate[]) coordinateList.toArray(new Coordinate[0])));
}
}
resultPolygon = geomFactory.createPolygon(linearRing,(LinearRing[])holeRings.toArray(new LinearRing[0]));
}
}
return resultPolygon;
}
public static ReferencedEnvelope Geometry2Envelope(Geometry geometry){
ReferencedEnvelope resultEnvelope = null;
if(geometry != null && (geometry instanceof Polygon || geometry instanceof MultiPolygon)){
Coordinate[] coordinates = geometry.getEnvelope().getCoordinates();
double xmin = 180,xmax = 0,ymin = 90,ymax=0;
if(coordinates != null && coordinates.length == 5){
for(Coordinate coordinate : coordinates){
if(xmin > coordinate.x){
xmin = coordinate.x;
}
if(xmax < coordinate.x){
xmax = coordinate.x;
}
if(ymin > coordinate.y){
ymin = coordinate.y;
}
if(ymax < coordinate.y){
ymax = coordinate.y;
}
}
resultEnvelope = new ReferencedEnvelope(xmin, xmax, ymin, ymax, DefaultGeographicCRS.WGS84);
}
}
return resultEnvelope;
}
public static Polygon Line2Polygon(LineString lineString,ReferencedEnvelope referencedEnvelope,Polygon envelopePolygon)
throws IllegalArgumentException{
if(lineString == null || referencedEnvelope == null || envelopePolygon == null){
throw new IllegalArgumentException("Line2Polygon方法参数输入有误");
}
Polygon polygonFromLine = null;
LineString intersectLine = null;
Geometry intersectGeo = null;
Coordinate[] lineCoordinate;
List<Coordinate> coordinateList;
if(lineString.isClosed()){
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineString.getCoordinates()),null);
if(!envelopePolygon.contains(polygonFromLine)){
intersectGeo = polygonFromLine.intersection(envelopePolygon);
if(intersectGeo instanceof Polygon){
polygonFromLine = (Polygon) intersectGeo;
}
}
}else if(!lineString.isEmpty()){
lineCoordinate = lineString.getCoordinates();
double minX = referencedEnvelope.getMinX(),
maxX = referencedEnvelope.getMaxX(),
minY = referencedEnvelope.getMinY(),
maxY = referencedEnvelope.getMaxY();
Point centerPoint;
coordinateList = new ArrayList(Arrays.asList(lineCoordinate));
if(Math.abs(lineCoordinate[0].x - minX) < 0.00001 && Math.abs(lineCoordinate[lineCoordinate.length - 1].x - maxX) < 0.00001){
centerPoint = lineString.getCentroid();
if(centerPoint.getY() <= (minY + maxY)/2){
coordinateList.add(new Coordinate(maxX,minY));
coordinateList.add(new Coordinate(minX,minY));
}else{
coordinateList.add(new Coordinate(maxX,maxY));
coordinateList.add(new Coordinate(minX,maxY));
}
coordinateList.add(lineCoordinate[0]);
lineCoordinate = coordinateList.toArray(new Coordinate[0]);
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineCoordinate),null);
}else if(Math.abs(lineCoordinate[0].x - maxX) < 0.00001 && Math.abs(lineCoordinate[lineCoordinate.length - 1].x-minX) < 0.00001) {
centerPoint = lineString.getCentroid();
if(centerPoint.getY() <= (minY + maxY)/2){
coordinateList.add(new Coordinate(minX,minY));
coordinateList.add(new Coordinate(maxX,minY));
}else{
coordinateList.add(new Coordinate(minX,maxY));
coordinateList.add(new Coordinate(maxX,maxY));
}
coordinateList.add(lineCoordinate[0]);
lineCoordinate = coordinateList.toArray(new Coordinate[0]);
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineCoordinate),null);
}else if(Math.abs(lineCoordinate[0].y - minY) < 0.00001 && Math.abs(lineCoordinate[lineCoordinate.length - 1].y - maxY) < 0.00001){
centerPoint = lineString.getCentroid();
if(centerPoint.getX() <= (minX + maxX)/2){
coordinateList.add(new Coordinate(minX,maxY));
coordinateList.add(new Coordinate(minX,minY));
}else{
coordinateList.add(new Coordinate(maxX,maxY));
coordinateList.add(new Coordinate(maxX,minY));
}
coordinateList.add(lineCoordinate[0]);
lineCoordinate = coordinateList.toArray(new Coordinate[0]);
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineCoordinate),null);
}else if(Math.abs(lineCoordinate[0].y-maxY) < 0.00001 && Math.abs(lineCoordinate[lineCoordinate.length - 1].y - minY) < 0.00001){
centerPoint = lineString.getCentroid();
if(centerPoint.getX() <= (minX + maxX)/2){
coordinateList.add(new Coordinate(minX,minY));
coordinateList.add(new Coordinate(minX,maxY));
}else{
coordinateList.add(new Coordinate(maxX,minY));
coordinateList.add(new Coordinate(maxX,maxY));
}
coordinateList.add(lineCoordinate[0]);
lineCoordinate = coordinateList.toArray(new Coordinate[0]);
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineCoordinate),null);
}else if(lineCoordinate[0].x == lineCoordinate[lineCoordinate.length - 1].x
|| lineCoordinate[0].y == lineCoordinate[lineCoordinate.length - 1].y){
coordinateList.add(lineCoordinate[0]);
lineCoordinate = coordinateList.toArray(new Coordinate[0]);
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineCoordinate),null);
}else{
Coordinate startCoordinate = lineCoordinate[0];
Coordinate endCoordinate = lineCoordinate[lineCoordinate.length - 1];
double x = 0,y = 0;
if(startCoordinate.x == minX || startCoordinate.x == maxX){
x = startCoordinate.x;
}
if(startCoordinate.y == minY || startCoordinate.y == maxY){
y = startCoordinate.y;
}
if(endCoordinate.x == minX || endCoordinate.x == maxX){
x = endCoordinate.x;
}
if(endCoordinate.y == minY || endCoordinate.y == maxY){
y = endCoordinate.y;
}
if(x != 0 && y != 0){
coordinateList.add(new Coordinate(x,y));
}
coordinateList.add(lineCoordinate[0]);
lineCoordinate = (Coordinate[]) coordinateList.toArray(new Coordinate[0]);
if(lineCoordinate.length >= 4){
polygonFromLine = geomFactory.createPolygon(geomFactory.createLinearRing(lineCoordinate),null);
}
}
}
return polygonFromLine;
}
public static MultiPolygon Geometry2MuitlPolygon(Geometry geometry){
MultiPolygon resultPolygon = null;
if(geometry != null){
if(geometry instanceof Polygon){
Polygon[] polygons = new Polygon[]{(Polygon)geometry};
resultPolygon = geomFactory.createMultiPolygon(polygons);
}else if(geometry instanceof MultiPolygon){
resultPolygon = (MultiPolygon) geometry;
}
}
return resultPolygon;
}
public static GeometryCollection GeometryCollection(List<Geometry> geometryList){
GeometryCollection gc
= geomFactory.createGeometryCollection((Geometry[]) geometryList.toArray(new Geometry[0]));
return gc;
}
public static Geometry GetBoundaryFromGeometries(List<Geometry> geometryList){
GeometryCollection gc = GeometryCollection(geometryList);
return gc.getEnvelope();
}
}

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity;
import org.geotools.data.FeatureSource; import org.geotools.data.FeatureSource;
import org.geotools.map.FeatureLayer; import org.geotools.map.FeatureLayer;

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity;
import com.sun.media.jai.codec.ImageCodec; import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder; import com.sun.media.jai.codec.ImageEncoder;

View File

@ -1,8 +1,9 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity;
import com.gis3c.spatial.entity.feature.BaseFeature;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
public class GeoCity extends BaseFeature{ public class GeoCity extends BaseFeature {
private String code; private String code;
private String name; private String name;
private Geometry geometry; private Geometry geometry;

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.feature;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
import org.geotools.data.DataUtilities; import org.geotools.data.DataUtilities;
@ -35,7 +35,9 @@ public class BaseFeature {
this.geometry = geometry; this.geometry = geometry;
} }
/**
* 获取所有字段信息
*/
private List<Field> AllFieldes(){ private List<Field> AllFieldes(){
List<Field> fieldList = new ArrayList<>(); List<Field> fieldList = new ArrayList<>();

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.feature;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity;/** package com.gis3c.spatial.entity.geometry;/**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.
*/ */

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity;/** package com.gis3c.spatial.entity.geometry;/**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.
*/ */

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity;/** package com.gis3c.spatial.entity.geometry;/**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.
*/ */

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.crs.CoordinateReferenceSystem;

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
/** /**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
/** /**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
/** /**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
/** /**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
/** /**
* Created by hukekuan on 17-7-10. * Created by hukekuan on 17-7-10.

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.entity; package com.gis3c.spatial.entity.geometry;
/** /**

View File

@ -1,4 +1,4 @@
package com.c3gis.spatial.postgis; package com.gis3c.spatial.postgis;
import java.io.IOException; import java.io.IOException;
import java.sql.CallableStatement; import java.sql.CallableStatement;