使用JAVA中的geotools从定义距离(km)内的直线(GPS坐标)生成多边形
使用geotools,是否可以从定义距离内的直线(坐标[])生成多边形? 例如(100100),(101100),(102100),距离为1km。 因此,从每个点开始,它生成一个圆,并变成如下: --------------以前 (==========)之后使用JAVA中的geotools从定义距离(km)内的直线(GPS坐标)生成多边形,java,gps,geolocation,gis,geotools,Java,Gps,Geolocation,Gis,Geotools,使用geotools,是否可以从定义距离内的直线(坐标[])生成多边形? 例如(100100),(101100),(102100),距离为1km。 因此,从每个点开始,它生成一个圆,并变成如下: --------------以前 (==========)之后 或者我必须先把GPS坐标转换成以千米为单位的正交坐标,然后用三角函数生成一个多边形,最后再把它转换成GPS 是的,这绝对可以在不转换坐标的情况下实现。但是,如果要查看某些属性,例如直线,则可能需要进行坐标转换。最简单的方法是,只需对底层JT
或者我必须先把GPS坐标转换成以千米为单位的正交坐标,然后用三角函数生成一个多边形,最后再把它转换成GPS 是的,这绝对可以在不转换坐标的情况下实现。但是,如果要查看某些属性,例如直线,则可能需要进行坐标转换。最简单的方法是,只需对底层JTS几何体调用缓冲区(距离)方法。棘手的一点是处理以米为单位的投影之间的重投影(因此可以以米或公里为单位指定缓冲区) 公共SimpleFeature缓冲区功能(SimpleFeature功能, 测量距离){ //提取几何体 GeometryAttribute gProp=feature.getDefaultGeometryProperty(); CoordinateReferenceSystem origCRS=gProp.getDescriptor() .getCoordinateReferenceSystem(); 几何图形几何图形=(几何图形)特征。getDefaultGeometry(); 几何图形pGeom=几何图形; MathTransform-toTransform,fromTransform=null; //将几何体重新投影到局部投影 如果(!(项目CRS的原始CRS实例)){ 点c=geom.getCentroid(); double x=c.getCoordinate().x; 双y=c.getCoordinate().y; 字符串代码=“自动:42001,”+x+,“+y; //System.out.println(代码); 自动协调参考系统; 试一试{ 自动=CRS.解码(代码); toTransform=CRS.findMathTransform( 默认地理位置(CCRS.WGS84,自动); fromTransform=CRS.findMathTransform(自动, (CCRS.WGS84); pGeom=JTS.变换(geom,toTransform); }捕获(不匹配DimensionException | TransformException |工厂(e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } //缓冲区 几何输出=缓冲区(pGeom,距离.双值(SI.米)); 几何retGeom=输出; //将几何体重新投影到原始投影 如果(!(项目CRS的原始CRS实例)){ 试一试{ retGeom=JTS.transform(out,fromTransform); }捕获(不匹配的DimensionException | TransformException e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } //返回包含几何图形的新特征 SimpleFeatureType架构=feature.getFeatureType(); SimpleFeatureTypeBuilder ftBuilder=新SimpleFeatureTypeBuilder(); ftBuilder.SETCR(原始GCR); //ftBuilder.setDefaultGeometry(“缓冲区”); ftBuilder.addAll(schema.getAttributeDescriptors()); ftBuilder.setName(schema.getName()); SimpleFeatureType nSchema=ftBuilder.buildFeatureType(); SimpleFeatureBuilder=新SimpleFeatureBuilder(nSchema); List atts=feature.getAttributes(); for(int i=0;i)表示如何处理整个问题
public SimpleFeature bufferFeature(SimpleFeature feature,
Measure<Double, Length> distance) {
// extract the geometry
GeometryAttribute gProp = feature.getDefaultGeometryProperty();
CoordinateReferenceSystem origCRS = gProp.getDescriptor()
.getCoordinateReferenceSystem();
Geometry geom = (Geometry) feature.getDefaultGeometry();
Geometry pGeom = geom;
MathTransform toTransform,fromTransform = null;
// reproject the geometry to a local projection
if (!(origCRS instanceof ProjectedCRS)) {
Point c = geom.getCentroid();
double x = c.getCoordinate().x;
double y = c.getCoordinate().y;
String code = "AUTO:42001," + x + "," + y;
// System.out.println(code);
CoordinateReferenceSystem auto;
try {
auto = CRS.decode(code);
toTransform = CRS.findMathTransform(
DefaultGeographicCRS.WGS84, auto);
fromTransform = CRS.findMathTransform(auto,
DefaultGeographicCRS.WGS84);
pGeom = JTS.transform(geom, toTransform);
} catch (MismatchedDimensionException | TransformException
| FactoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// buffer
Geometry out = buffer(pGeom, distance.doubleValue(SI.METER));
Geometry retGeom = out;
// reproject the geometry to the original projection
if (!(origCRS instanceof ProjectedCRS)) {
try {
retGeom = JTS.transform(out, fromTransform);
} catch (MismatchedDimensionException | TransformException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// return a new feature containing the geom
SimpleFeatureType schema = feature.getFeatureType();
SimpleFeatureTypeBuilder ftBuilder = new SimpleFeatureTypeBuilder();
ftBuilder.setCRS(origCRS);
//ftBuilder.setDefaultGeometry("buffer");
ftBuilder.addAll(schema.getAttributeDescriptors());
ftBuilder.setName(schema.getName());
SimpleFeatureType nSchema = ftBuilder.buildFeatureType();
SimpleFeatureBuilder builder = new SimpleFeatureBuilder(nSchema);
List<Object> atts = feature.getAttributes();
for(int i=0;i<atts.size();i++) {
if(atts.get(i) instanceof Geometry) {
atts.set(i, retGeom);
}
}
SimpleFeature nFeature = builder.buildFeature(null, atts.toArray() );
return nFeature;
}