Рассчитайте расстояние между большим полигоном и большой линией строк - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть большой 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();
...