com.biz.common.jts.GeometryUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of biz-all Show documentation
Show all versions of biz-all Show documentation
BizX 是一个灵活而高效的业务开发框架, 其中也有很多为业务开发所需要的工具类的提供。
The newest version!
package com.biz.common.jts;
import com.biz.common.utils.Common;
import lombok.SneakyThrows;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.util.List;
/**
* 提供JTS(Java Topology Suite)几何对象的常用操作工具方法。
* 该工具类提供了几何对象的创建、操作、计算等常见功能,封装了对JTS库的使用。
*
* 该类是不可实例化的,因为它只包含静态方法。
*
* 示例代码:
* {@code
* Geometry geom = GeometryUtils.geometryStrToGeometry("POINT (30 10)");
* double[] center = GeometryUtils.center(geom);
* }
*
* @author francis
* @version 1.0.1
* @since 1.0.1
*/
public final class GeometryUtils {
/**
* WKTReader实例,用于解析WKT字符串到Geometry对象。
* 将其实例化为类级变量以避免重复创建,提升性能。
*/
private static final WKTReader WKT_READER = new WKTReader();
/**
* 将给定的几何字符串转换为Geometry对象。
*
* @param str WKT(Well-Known Text)格式的几何字符串。
* @return 对应的Geometry对象,如果输入为空或格式不正确则返回null。
* @throws ParseException 如果WKT字符串无法解析,则抛出此异常。
*/
@SneakyThrows(ParseException.class)
public static Geometry geometryStrToGeometry(final String str) {
if (Common.isBlank(str)) {
return null;
}
return WKT_READER.read(str);
}
/**
* 将Coordinate列表转换为Geometry对象。
*
* @param coordinates Coordinate列表,代表几何对象的点序列。
* @return 如果输入为空,则返回null;否则返回由这些点构成的Geometry对象。
*/
public static Geometry coordinatesToGeometry(List coordinates) {
if (coordinates == null || coordinates.isEmpty()) {
return null;
}
Coordinate[] coordinatesArray = new Coordinate[coordinates.size()];
return JTSUtils.GEOMETRY_FACTORY.createPolygon(coordinates.toArray(coordinatesArray));
}
/**
* 计算给定Geometry对象的中心点的经纬度。
*
* @param geometry 目标Geometry对象。
* @return 包含中心点经度和纬度的double数组,如果输入为null则返回null。
*/
public static double[] center(Geometry geometry) {
if (geometry == null) {
return null;
}
Point centroid = geometry.getCentroid();
return Common.toDoubles(centroid.getX(), centroid.getY());
}
/**
* 对两个Geometry对象进行并集运算。
*
* @param geo1 第一个Geometry对象。
* @param geo2 第二个Geometry对象。
* @return 两个Geometry对象的并集,如果任一输入为null则返回null。
*/
public static Geometry union(Geometry geo1, Geometry geo2) {
if (geo1 == null || geo2 == null) {
return null;
}
return geo1.union(geo2);
}
/**
* 对给定的Geometry对象进行缓冲区处理。
*
* @param geometry 目标Geometry对象。
* @param radius 缓冲区半径。
* @return 缓冲后的Geometry对象,如果输入为null则返回null。
*/
public static Geometry buffer(Geometry geometry, double radius) {
if (geometry == null) {
return null;
}
return geometry.buffer(radius);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy