Это точка в многоугольнике. Координаты широты и долготы. GeoTools - PullRequest
0 голосов
/ 30 апреля 2020

Учитывая полигон, который я прослеживаю с помощью координат широты и логики, учитывая, что я также получаю чертовски (в широте, логичности).

Мне нужно знать, находится ли эта точка внутри моего многоугольника или нет

import org.geotools.geometry.jts.JTSFactoryFinder;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.geom.PrecisionModel;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.referencing.operation.TransformException;

    private void isPointInPolygon() {
        GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();

        Coordinate[] coords = new Coordinate[] { new Coordinate(40.174256, -3.483185),
                new Coordinate(40.173279, -3.481339), new Coordinate(40.172597, -3.482541),
                new Coordinate(40.173403, -3.485401), new Coordinate(40.174256, -3.483185) };

        Polygon polygon = geometryFactory.createPolygon(coords);

        System.out.println("polygon : " + polygon.isValid());

        double scale = Math.pow(10, 2);
        PrecisionModel pm = new PrecisionModel(scale);
        GeometryFactory gf = new GeometryFactory(pm);

        Geometry testPoint = gf.createPoint(new Coordinate(40.173597, -3.483798));
        System.out.println("polygon contains point : " + polygon.contains(testPoint));
    }

// MAVEN

    <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-geojson</artifactId>
            <version>24-SNAPSHOT</version>
        </dependency>

Следующий код является правильным, то есть он не выдает никакой ошибки.

У меня есть сомнения, если его результат правильно, или если мне нужно сделать какое-то преобразование, чтобы результат был правильным. Если мне придется сгладить его или если это код, он уже знает, как хорошо вылечить.

1 Ответ

0 голосов
/ 01 мая 2020

Если ваш многоугольник достаточно мал, все будет хорошо.

Если ваш многоугольник:

  • приближается к половине мира, тогда ответ может быть неправильным.
  • пересекает анти-меридиан (180W / E), тогда ответ, вероятно, будет неправильным.
  • если стороны многоугольника очень длинные, но на них мало точек, тогда ответ вполне может быть неправильным.
...