private GeoCoding addTiePointGridGeo(ImageMetadata metadata, int width, int height) { float[][] cornerLonsLats = metadata.getCornerLonsLats(); int sceneWidth = width; int sceneHeight = height; TiePointGrid latGrid = createTiePointGrid("latitude", 2, 2, 0, 0, sceneWidth , sceneHeight, cornerLonsLats[1]); TiePointGrid lonGrid = createTiePointGrid("longitude", 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[0]); return new TiePointGeoCoding(latGrid, lonGrid); }
private void writeTiePointGeoCoding(TiePointGeoCoding tgc, String nodeType) { addRow("The " + nodeType + " uses a tie-point based geo-coding."); addEmptyRow(); addRow("Name of latitude tie-point grid", tgc.getLatGrid().getName()); addRow("Name of longitude tie-point grid", tgc.getLonGrid().getName()); addRow("Crossing 180 degree meridian", String.valueOf(tgc.isCrossingMeridianAt180())); addEmptyRow(); addRow("<html>Geographic coordinates (lat,lon) are computed from pixel coordinates (x,y)<br/>" + "by linear interpolation between tie points.</html>"); final int numApproximations = tgc.getNumApproximations(); if (numApproximations > 0) { addRow("<html>Pixel coordinates (x,y) are computed from geographic coordinates (lat,lon)<br/>" + final TiePointGeoCoding.Approximation approximation = tgc.getApproximation(i); final FXYSum fX = approximation.getFX(); final FXYSum fY = approximation.getFY();
if (sourceGeoCoding instanceof TiePointGeoCoding) { final TiePointGeoCoding geoCoding = (TiePointGeoCoding) sourceGeoCoding; latGridName = geoCoding.getLatGrid().getName(); lonGridName = geoCoding.getLonGrid().getName();
private GeoCoding addTiePointGridGeo(ImageMetadata metadata, int width, int height) { float[][] cornerLonsLats = metadata.getCornerLonsLats(); int sceneWidth = width; int sceneHeight = height; TiePointGrid latGrid = createTiePointGrid("latitude", 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[1]); TiePointGrid lonGrid = createTiePointGrid("longitude", 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[0]); return new TiePointGeoCoding(latGrid, lonGrid); }
private void initGeoCoding(Product product) { DeimosMetadata deimosMetadata = metadata.get(0); DeimosMetadata.InsertionPoint[] geopositionPoints = deimosMetadata.getGeopositionPoints(); if (geopositionPoints != null) { int numPoints = geopositionPoints.length; if (numPoints > 1 && (int)(numPoints / Math.sqrt((double)numPoints)) == numPoints) { float stepX = geopositionPoints[1].stepX - geopositionPoints[0].stepX; float stepY = geopositionPoints[1].stepY - geopositionPoints[0].stepY; float[] latitudes = new float[numPoints]; float[] longitudes = new float[numPoints]; for (int i = 0; i < numPoints; i++) { latitudes[i] = geopositionPoints[i].y; longitudes[i] = geopositionPoints[i].x; } TiePointGrid latGrid = addTiePointGrid(stepX, stepY, product, DeimosConstants.LATITUDE_BAND_NAME, latitudes); TiePointGrid lonGrid = addTiePointGrid(stepX, stepY, product, DeimosConstants.LONGITUDE_BAND_NAME, longitudes); GeoCoding geoCoding = new TiePointGeoCoding(latGrid, lonGrid); product.setSceneGeoCoding(geoCoding); } } }
public static void setTiePointGeoCoding(final Product product) { TiePointGrid lonGrid = null, latGrid = null; for (String lonStr : NetcdfConstants.LON_VAR_NAMES) { lonGrid = product.getTiePointGrid(lonStr); if (lonGrid != null) break; } for (String latStr : NetcdfConstants.LAT_VAR_NAMES) { latGrid = product.getTiePointGrid(latStr); if (latGrid != null) break; } if (latGrid != null && lonGrid != null) { final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid); product.setSceneGeoCoding(tpGeoCoding); } }
/** * Uses the 4 lat-lon corners of a detector to create the geocoding */ private GeoCoding getGeoCodingFromTileBandInfo(L1BBandInfo tileBandInfo, Map<String, Tile> tileList, Product product) { Objects.requireNonNull(tileBandInfo); Objects.requireNonNull(tileList); Objects.requireNonNull(product); Set<String> ourTileIds = tileBandInfo.getTileIdToPathMap().keySet(); List<Tile> aList = new ArrayList<>(ourTileIds.size()); List<Coordinate> coords = new ArrayList<>(); for (String tileId : ourTileIds) { Tile currentTile = tileList.get(tileId); aList.add(currentTile); } // sort tiles by position Collections.sort(aList, (Tile u1, Tile u2) -> u1.getTileGeometry(S2SpatialResolution.R10M).getPosition().compareTo(u2.getTileGeometry(S2SpatialResolution.R10M).getPosition())); coords.add(aList.get(0).corners.get(0)); coords.add(aList.get(0).corners.get(3)); coords.add(aList.get(aList.size() - 1).corners.get(1)); coords.add(aList.get(aList.size() - 1).corners.get(2)); float[] lats = convertDoublesToFloats(getLatitudes(coords)); float[] lons = convertDoublesToFloats(getLongitudes(coords)); TiePointGrid latGrid = addTiePointGrid(aList.get(0).getTileGeometry(S2SpatialResolution.R10M).getNumCols(), aList.get(0).getTileGeometry(S2SpatialResolution.R10M).getNumRowsDetector(), tileBandInfo.getDetectorId() + tileBandInfo.getBandInformation().getPhysicalBand() + ",latitude", lats); product.addTiePointGrid(latGrid); TiePointGrid lonGrid = addTiePointGrid(aList.get(0).getTileGeometry(S2SpatialResolution.R10M).getNumCols(), aList.get(0).getTileGeometry(S2SpatialResolution.R10M).getNumRowsDetector(), tileBandInfo.getDetectorId() + tileBandInfo.getBandInformation().getPhysicalBand() + ",longitude", lons); product.addTiePointGrid(lonGrid); return new TiePointGeoCoding(latGrid, lonGrid); }
private GeoCoding addTiePointGridGeo(Kompsat2Metadata metadata, Band targetBand) { float[][] cornerLonsLats = metadata.getMetadataComponent().getTiePointGridPoints(); int sceneWidth = targetBand.getRasterWidth(); int sceneHeight = targetBand.getRasterHeight(); TiePointGrid latGrid = createTiePointGrid(Kompsat2Constants.LAT_DS_NAME, 2, 2, 0, 0, sceneWidth , sceneHeight, cornerLonsLats[0]); TiePointGrid lonGrid = createTiePointGrid(Kompsat2Constants.LON_DS_NAME, 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[1]); return new TiePointGeoCoding(latGrid, lonGrid); }
lonGrid.setUnit(Unit.DEGREES); final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid);
private void initProductTiePointGeoCoding(ImageMetadata imageMetadata, Product product) { float[][] cornerLonsLats = imageMetadata.getCornerLonsLats(); int sceneWidth = product.getSceneRasterWidth(); int sceneHeight = product.getSceneRasterHeight(); TiePointGrid latGrid = createTiePointGrid("latitude", 2, 2, 0, 0, sceneWidth , sceneHeight, cornerLonsLats[1]); product.addTiePointGrid(latGrid); TiePointGrid lonGrid = createTiePointGrid("longitude", 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[0]); product.addTiePointGrid(lonGrid); product.setSceneGeoCoding(new TiePointGeoCoding(latGrid, lonGrid)); }
private void initProductTiePointGeoCoding(ImageMetadata imageMetadata, Product product) { float[][] cornerLonsLats = imageMetadata.getCornerLonsLats(); int sceneWidth = product.getSceneRasterWidth(); int sceneHeight = product.getSceneRasterHeight(); TiePointGrid latGrid = createTiePointGrid("latitude", 2, 2, 0, 0, sceneWidth , sceneHeight, cornerLonsLats[1]); product.addTiePointGrid(latGrid); TiePointGrid lonGrid = createTiePointGrid("longitude", 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[0]); product.addTiePointGrid(lonGrid); product.setSceneGeoCoding(new TiePointGeoCoding(latGrid, lonGrid)); }
private void initGeoCoding(Product product) { TiePointGrid latGrid = addTiePointGrid(product.getSceneRasterWidth(), product.getSceneRasterHeight(), product, "latitude", metadata.getCornersLatitudes()); TiePointGrid lonGrid = addTiePointGrid(product.getSceneRasterWidth(), product.getSceneRasterHeight(), product, "longitude", metadata.getCornersLongitudes()); GeoCoding geoCoding = new TiePointGeoCoding(latGrid, lonGrid); product.setSceneGeoCoding(geoCoding); }
0.0f, 0.0f, (int) subSamplingX, (int) subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180); final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid);
TiePointGrid latGrid = createTiePointGrid("latitude", 2, 2, 0, 0, imageWidth, imageHeight, latPoints); TiePointGrid lonGrid = createTiePointGrid("longitude", 2, 2, 0, 0, imageWidth, imageHeight, lonPoints); geoCoding = new TiePointGeoCoding(latGrid, lonGrid); product.addTiePointGrid(latGrid); product.addTiePointGrid(lonGrid);
0.0f, 0.0f, subSamplingX, subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180); final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid);
/** * Creates geo-coding based on latitude/longitude {@code TiePointGrid}s</li> * * @param k2Metadata Kompsat2Metadata parameter * @param product Product to add TiePointGrid and TiePointGridGeoCoding */ private void initProductTiePointGeoCoding(Kompsat2Metadata k2Metadata, Product product) { float[][] cornerLonsLats = k2Metadata.getMetadataComponent().getTiePointGridPoints(); int sceneWidth = product.getSceneRasterWidth(); int sceneHeight = product.getSceneRasterHeight(); TiePointGrid latGrid = createTiePointGrid(Kompsat2Constants.LAT_DS_NAME, 2, 2, 0, 0, sceneWidth , sceneHeight, cornerLonsLats[0]); product.addTiePointGrid(latGrid); TiePointGrid lonGrid = createTiePointGrid(Kompsat2Constants.LON_DS_NAME, 2, 2, 0, 0, sceneWidth, sceneHeight, cornerLonsLats[1]); product.addTiePointGrid(lonGrid); if (latGrid != null && lonGrid != null) { product.setSceneGeoCoding(new TiePointGeoCoding(latGrid, lonGrid)); } }
0.0f, 0.0f, subSamplingX, subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180); final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid);
0.0f, 0.0f, subSamplingX, subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180); final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid);
0.0f, 0.0f, subSamplingX, subSamplingY, targetLonTiePoints, TiePointGrid.DISCONT_AT_180); final TiePointGeoCoding tpGeoCoding = new TiePointGeoCoding(latGrid, lonGrid);
if (latGrid != null && lonGrid != null) { resultProduct.setSceneGeoCoding( new TiePointGeoCoding(latGrid, lonGrid, sourceProduct.getSceneGeoCoding().getGeoCRS()));