使用缺少 .prj 文件的地理工具从 UTM 转换为 WGS84



我有一个函数,可以读取一组坐标并得到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(。

我的疑问是:有没有办法在没有 .prj 文件的情况下将 UTM 坐标转换为 WGS84?

如果没有 prj,则无法将 UTM 坐标转换为 WGS84。您需要中央子午线或UTM区进行转换。

但是有一个解决方法。您可以使用世界 UTM 区域 来预测 UTM 区域。如果您知道确切的区域,则可以执行此操作。然后使用反复试验,您可以转换并检查附近的 2-3 个区域。

我找到了这个解决方案,显然它工作正常:

 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。

相关内容

  • 没有找到相关文章

最新更新