All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.biz.common.jts.GeometryUtils Maven / Gradle / Ivy

Go to download

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