Преобразование из UTM в WGS84 с использованием GeoTools с отсутствующим файлом .prj? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть функция, которая читает набор координат, и я получаю UTM-координаты.Позже я конвертирую эти UTM-координаты в WGS84.Нет проблем, когда эти данные поступают из набора из 4 файлов (shp, .dbf, .shx и .prj).

Это мой код для получения координат и их преобразования:

public Geometry getGeometryDistrict(String refCatDistrict, String shapeFileDistrict){

                Geometry union = null;

                File shapeFile = new File (shapeFileDistrict);

                try {

                   Query query = new Query();
                   query.setCoordinateSystem(DefaultGeographicCRS.WGS84);

                   Filter filter = CQL.toFilter("obj_co_id = '"+refCatDistrict+"'");
                   query.setFilter(filter);

                   FileDataStore storeDistrict = FileDataStoreFinder.getDataStore(shapeFile);

                   SimpleFeatureSource featureSource = storeDistrict.getFeatureSource();

                   SimpleFeatureCollection collection = featureSource.getFeatures(query);
                   SimpleFeature fDistrict = null;

                   ArrayList<Geometry> geometries = new ArrayList<>();

                   SimpleFeatureIterator itrDistrict = collection.features();

                   while(itrDistrict.hasNext()){

                      fDistrict = itrDistrict.next();

                      Geometry geomDistrict = (Geometry)fDistrict.getDefaultGeometry();
                      geometries.add(geomDistrict);

                   }

                   GeometryFactory factory = new GeometryFactory();

                   GeometryCollection geometryCollection = (GeometryCollection) factory.buildGeometry( geometries );

                   union = geometryCollection.union();

                   itrDistrict.close();
                   storeDistrict.dispose();

               }catch(IOException | NoSuchElementException | CQLException e){
                   Throwable cause = e.getCause();
                   System.out.println(cause);
               }

                return union;
            }

Моя проблема заключается в том, что эти данные не всегда содержат файл .prj (необходимый для преобразования координат), и поступают только 3 файла (.dbf, .shp и .shx).

Мое сомнение:Есть ли способ конвертировать UTM-координаты в WGS84 без файла .prj?

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы не можете конвертировать UTM координаты в WGS84 без prj. Для конвертации вам необходим Центральный меридиан или UTM зона.

Однако есть обходной путь. Вы можете предсказать UTM-зону, используя World UTM zone . Это можно сделать, если вы знаете точную площадь. Затем, используя метод проб и ошибок, вы можете конвертировать и проверять ближайшие 2-3 зоны.

0 голосов
/ 24 июня 2019

Я нашел это решение и, видимо, оно прекрасно работает:

 try{      

   CoordinateReferenceSystem sourceutm = CRS.decode(String.format("AUTO2:42001,%s,%s", -3.691406, 40.403431), true);
   CoordinateReferenceSystem targetlatlong = CRS.decode("EPSG:4326", true);

   MathTransform transform = CRS.findMathTransform(sourceutm, targetlatlong, false);
   Geometry union = JTS.transform( geometryCollection, transform);

   System.out.println(union.toString());

  }catch(MismatchedDimensionException | FactoryException | TransformException e){
         throw new RuntimeException(e);
       }    

Это внутри, конечно, пока.И возвращает мне координаты степени от UTM.Нет необходимости .pjr.

...