基于GeoTools生成一个圆面的规则格网点,点坐标需要用经纬度坐标表示,使用java语言开发
时间: 2024-03-21 16:41:24 浏览: 185
可以使用以下代码基于GeoTools生成一个圆面的规则格网点,点坐标使用经纬度坐标表示:
```java
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.geotools.geometry.jts.JTSUtilities;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.GeodeticCalculator;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import java.util.ArrayList;
import java.util.List;
public class GeoToolsCircleGrid {
public static void main(String[] args) throws Exception {
// 圆心点坐标
double centerLon = 116.3975;
double centerLat = 39.9085;
// 圆半径,单位:米
double radius = 5000;
// 网格大小,单位:米
double gridSize = 500;
// 创建GeometryFactory
GeometryFactory geomFactory = JTSFactoryFinder.getGeometryFactory();
// 创建圆面
Point center = geomFactory.createPoint(new Coordinate(centerLon, centerLat));
Geometry circle = center.buffer(radius);
// 获取圆面最小外接矩形
ReferencedEnvelope envelope = new ReferencedEnvelope(circle.getEnvelopeInternal(), DefaultGeographicCRS.WGS84);
// 获取圆面最小外接矩形的中心点坐标
double centerX = envelope.getMedian(0);
double centerY = envelope.getMedian(1);
// 创建GeodeticCalculator
GeodeticCalculator calculator = new GeodeticCalculator(DefaultGeographicCRS.WGS84);
// 设置计算起点
calculator.setStartingGeographicPoint(centerX, centerY);
// 计算网格点坐标
List<Coordinate> coords = new ArrayList<>();
double x = envelope.getMinX();
while (x <= envelope.getMaxX()) {
double y = envelope.getMinY();
while (y <= envelope.getMaxY()) {
// 计算网格点距离圆心的距离
calculator.setDestinationGeographicPoint(x, y);
double dist = calculator.getOrthodromicDistance();
// 判断网格点是否在圆面内
if (dist <= radius) {
coords.add(new Coordinate(x, y));
}
y += gridSize;
}
x += gridSize;
}
// 打印网格点坐标
for (Coordinate coord : coords) {
System.out.println("Lon: " + coord.x + ", Lat: " + coord.y);
}
}
}
```
需要注意的是,该代码使用的是WGS84坐标系,如果需要使用其他坐标系,需要修改代码中的相关部分。
阅读全文