2012-06-15 60 views
2

的座標,我得到的GeoTIFF元數據與GeoTiffIIOMetadataAdapter類:得到TIFF文件

String filename = pathToMyTiffFile; 
    FileImageInputStream f = new FileImageInputStream(
      new RandomAccessFile(filename, "r")); 

    // Look through ImageIO readers 
    Iterator iter = ImageIO.getImageReaders(f); 
    IIOMetadata imdata = null; 
    GeoTiffIIOMetadataAdapter geo_data; 
    while (iter.hasNext() && imdata == null) { 
     ImageReader reader = (ImageReader) iter.next(); 
     reader.setInput(f, true); 
     String reader_name = reader.getFormatName().toLowerCase(); 
     if (reader_name.equalsIgnoreCase("tif")) { 
      // Get Image metadata 
      imdata = reader.getImageMetadata(0); 
      geo_data = new GeoTiffIIOMetadataAdapter(imdata); 
      if (geo_data != null && 
        geo_data.getGeoKeyDirectoryVersion() == 1) { 
       geo_data.getModelTiePoints(); //here i get [0.0,0.0,0.0,173084.9999999999,5845515.0,0.0] 
      } 
     } 
    } 

我怎樣才能提取/這個數組轉換爲平時的緯度/經度座標?我對173084.9999999999,5845515.0是tiff文件的左上角座標嗎?

在此先感謝!

+0

你需要知道的投射比變換從投影座標轉換​​成經/緯度 – Thomas

回答

2

答案是:是的,它是我的tiff文件的左上角。我的Tiff在http://spatialreference.org/ref/epsg/32612/。 爲座標wsg84(http://spatialreference.org/ref/epsg/4326/)與geotools我需要轉換:

CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:4326", true); 
    CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:32612"); 
    MathTransform transformToEpsg4326 = CRS.findMathTransform(targetCRS, sourceCRS); 
    double lon = geo_data.getModelTiePoints()[3];// 175784.99999999997 - X 
    double lat = geo_data.getModelTiePoints()[4];// 5842215.0 - Y 
    GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 32612); 
    Geometry pointUpperLeft = geometryFactory.createPoint(new Coordinate(lon, lat)); 
+0

我試圖轉換爲4326,但沒有工作,代碼與EPSG 4326的變化相同。 –

+0

351399.0450625顯示出22和69 –