У меня есть большой Polygon и большая LineString, достаточная для учета кривизны Земли, и я хотел рассчитать расстояние между ними. Я пытался использовать автопроекцию, но все еще не могу получить близкие результаты. Я уже просмотрел блог Яна , чтобы вычислить площадь многоугольника, где четко указано, что это только для маленьких многоугольников, поскольку JTS не учитывает кривизну земли, когда это делает GeodeticCalculator. Должен ли я найти первую и последнюю точку пересечения и, возможно, затем использовать GeodeticCalculator для расчета расстояния пересечения или есть какой-либо другой способ сделать это, может быть как проекция равной площади?
DefaultGeographicCRS crs = DefaultGeographicCRS.WGS84;
GeometryFactory geomFactory = new GeometryFactory();
//my WGS 84 crs axis order is longitude first hence all coordinates are long,lat
Coordinate[] polygonCoOrdinates = new Coordinate[]{new Coordinate(44.783323, -13.115134),
new Coordinate(43.381886, -10.994365),
new Coordinate(45.367769, -4.368934),
new Coordinate(51.220897, 4.818909),
new Coordinate(59.268949, 16.105438),
new Coordinate(67.52604, 10.616453),
new Coordinate(69.825484, 4.402182),
new Coordinate(73.274649, -0.923968),
new Coordinate(65.749198, -10.789091),
new Coordinate(52.579659, -10.686401),
new Coordinate(44.783323, -13.115134)
};
Coordinate[] lineStringCoordinates = new Coordinate[]{new Coordinate(72.8777, 19.0760),
new Coordinate(31.049999, -29.883333)
};
LineString lineString = geomFactory.createLineString(lineStringCoordinates);
LinearRing ring = geomFactory.createLinearRing(polygonCoOrdinates);
org.locationtech.jts.geom.Polygon polygon = geomFactory.createPolygon(polygonCoOrdinates);
Geometry geometryIntersection = polygon.intersection(lineString);
Point centroid = polygon.getCentroid();
String code = "AUTO:42001," + centroid.getX() + "," + centroid.getY();
CoordinateReferenceSystem auto = CRS.decode(code);
MathTransform transform = CRS.findMathTransform(DefaultGeographicCRS.WGS84, auto);
Geometry projgeometryIntersection = JTS.transform(geometryIntersection, transform);
double areaa = projgeometryIntersection.getArea();