private static PixelPos toPixelPos(Coordinate coordinate) { if (coordinate != null) { return new PixelPos((float) coordinate.x, (float) coordinate.y); } return null; }
private GeoPos getGeoPos(final PixelPos pixelPos, final GeoPos geoPos) { final PixelPos localPixelPos = new PixelPos(); localPixelPos.setLocation(pixelPos.getX() - _location.x, pixelPos.getY() - _location.y); return _geoGoding.getGeoPos(localPixelPos, geoPos); }
@Override public PixelPos getPixelPos(final GeoPos geoPos, PixelPos pixelPos) { if (pixelPos == null) { pixelPos = new PixelPos(); } if (geoPos.isValid()) { // ensurePixelPosEstimatorExist(); // if (pixelPosEstimator.canGetPixelPos()) { pixelPosEstimator.getPixelPos(geoPos, pixelPos); if (pixelPos.isValid()) { pixelFinder.findPixelPos(geoPos, pixelPos); } // } else { // pixelPos.setInvalid(); // } } else { pixelPos.setInvalid(); } return pixelPos; }
/** * {@inheritDoc} */ public PixelPos getPixelPos(final GeoPos geoPos, PixelPos pixelPos) { final Point2D.Double point = new Point2D.Double(geoPos.lon, geoPos.lat); rotator.transform(point); if (pixelPos == null) { pixelPos = new PixelPos(); } pixelPos.setLocation(inverseMap.getValue(point)); if (!pixelPos.isValid() || pixelPos.x < 0 || pixelPos.x >= sceneWidth || pixelPos.y < 0 || pixelPos.y >= sceneHeight) { pixelPos.x = -1; pixelPos.y = -1; } return pixelPos; }
@Override public PixelPos getPixelPos(final GeoPos geoPos, PixelPos pixelPos) { if (pixelPos == null) { pixelPos = new PixelPos(); } pixelPos.setLocation(_width / 360.0f * (geoPos.getLon() + 180.0f), _height - (_height / 180.0f * (geoPos.getLat() + 90.0f))); return pixelPos; }
@Override public PixelPos getPixelPos(final GeoPos geoPos, PixelPos pixelPos) { if (pixelPos == null) { pixelPos = new PixelPos(); } pixelPos.setInvalid(); if (geoPos.isValid()) { getPixelPosUsingQuadTreeSearch(geoPos, pixelPos); } return pixelPos; }
public void testTransferGeoCoding_WithSpatialSubset() throws IOException { final Scene srcScene = SceneFactory.createScene(createProduct()); final ProductSubsetDef subsetDef = new ProductSubsetDef(); subsetDef.setRegion(2, 2, PW - 4, PH - 4); subsetDef.setSubSampling(1,2); final Product destProduct = ProductSubsetBuilder.createProductSubset(new Product("test2", "test2", PW, PH), subsetDef, "test2", ""); final Scene destScene = SceneFactory.createScene(destProduct); final boolean transferred = srcScene.transferGeoCodingTo(destScene, subsetDef); assertTrue(transferred); final GeoCoding destGeoCoding = destScene.getGeoCoding(); assertTrue(destGeoCoding instanceof TiePointGeoCoding); final GeoPos srcGeoPos = srcScene.getGeoCoding().getGeoPos(new PixelPos(4.5f, 6.5f), null); final PixelPos destPixelPos = destScene.getGeoCoding().getPixelPos(srcGeoPos, null); assertEquals(2.5, destPixelPos.getX(), 1.0e-1); assertEquals(1.5, destPixelPos.getY(), 1.0e-1); }
private void initCoordinates(Placemark[] gcps) { for (final Placemark gcp : gcps) { final PixelPos pixelPos = gcp.getPixelPos(); final GeoPos geoPos = gcp.getGeoPos(); if (pixelPos == null || !pixelPos.isValid() || geoPos == null || !geoPos.isValid()) { throw new IllegalArgumentException("Invalid ground control point."); } } x = new double[gcps.length]; y = new double[gcps.length]; lons = new double[gcps.length]; lats = new double[gcps.length]; for (int i = 0; i < gcps.length; i++) { final PixelPos pixelPos = gcps[i].getPixelPos(); x[i] = pixelPos.getX(); y[i] = pixelPos.getY(); final GeoPos geoPos = gcps[i].getGeoPos(); lons[i] = geoPos.getLon(); lats[i] = geoPos.getLat(); } }
@Override public PixelPos getPixelPos(GeoPos geoPos, PixelPos pixelPos) { if (pixelPos == null) { pixelPos = new PixelPos(); } try { DirectPosition directGeoPos = new DirectPosition2D(geoPos.getLon(), geoPos.getLat()); DirectPosition directPixelPos = geoToImage.transform(directGeoPos, null); pixelPos.setLocation((float) directPixelPos.getOrdinate(0), (float) directPixelPos.getOrdinate(1)); } catch (Exception ignored) { pixelPos.setInvalid(); } return pixelPos; }
@Test @Ignore public void testGetPixelPosForSimulatedSwath() { final int nx = 512; final int ny = 36000; final PlanarImage[] images = generateSwathCoordinates(nx, ny, 0.009, 0.009, new Rotator(0.0, -5.0, 269.0)); final PlanarImage lonImage = images[0]; final PlanarImage latImage = images[1]; final PlanarImage maskImage = images[2]; final PixelPosEstimator estimator = new PixelPosEstimator(lonImage, latImage, maskImage, 0.5); final GeoPos g = new GeoPos(); final PixelPos p = new PixelPos(); for (int y = 0; y < ny; y++) { final Rectangle region = new Rectangle(0, y, nx, 1); final Raster lonData = lonImage.getData(region); final Raster latData = latImage.getData(region); for (int x = 0; x < nx; x++) { final float lon = lonData.getSampleFloat(x, y, 0); final float lat = latData.getSampleFloat(x, y, 0); g.setLocation(lat, lon); estimator.getPixelPos(g, p); assertTrue(p.isValid()); assertEquals(x + 0.5, p.getX(), 0.5); assertEquals(y + 0.5, p.getY(), 0.5); } } }
final float[] floats = new float[6]; final GeoPos geoPos = new GeoPos(); final PixelPos pixelPos = new PixelPos(); final PixelPos lastPixelPos = new PixelPos(); final GeneralPath geoPath = new GeneralPath(); while (!pathIterator.isDone()) { } else if (segmentType == PathIterator.SEG_LINETO) { final double maxDist = 1.5; final double distance = lastPixelPos.distance(pixelPos); if (distance > maxDist) { final float startX = lastPixelPos.x; final float addX = (endX - startX) / numParts; final float addY = (endY - startY) / numParts; pixelPos.setLocation(startX + addX, startY + addY); for (int i = 1; i < numParts; i++, pixelPos.x += addX, pixelPos.y += addY) { geoCoding.getGeoPos(pixelPos, geoPos); geoPath.lineTo(geoPos.lon, geoPos.lat); pixelPos.setLocation(endX, endY); geoCoding.getGeoPos(pixelPos, geoPos); geoPath.lineTo(geoPos.lon, geoPos.lat); lastPixelPos.setLocation(pixelPos); } else { geoCoding.getGeoPos(pixelPos, geoPos); geoPath.lineTo(geoPos.lon, geoPos.lat); lastPixelPos.setLocation(pixelPos);
final Point2D viewCenter = new Point2D.Double(viewCenterX, viewCenterY); final Point2D modelCenter = thisViewport.getViewToModelTransform().transform(viewCenter, null); final PixelPos imageCenter = new PixelPos(); getBaseImageLayer().getModelToImageTransform().transform(modelCenter, imageCenter); final GeoPos geoCenter = new GeoPos(); thisGeoCoding.getGeoPos(imageCenter, geoCenter); thatGeoCoding.getPixelPos(geoCenter, imageCenter); if (imageCenter.isValid()) { thatView.getBaseImageLayer().getImageToModelTransform().transform(imageCenter, modelCenter); thatViewport.setZoomFactor(thatViewport.getZoomFactor(), modelCenter.getX(), modelCenter.getY());
approximation = GeoApproximation.findMostSuitable(approximations, lat, lon); if (approximation != null) { p.setLocation(lon, lat); approximation.g2p(p); final double x = p.getX(); final double y = p.getY(); if (!EXTRAPOLATE && (x < bounds.getMinX() || x > bounds.getMaxX() || y < bounds.getMinY() || y > bounds.getMaxY())) { p.setInvalid(); p.setInvalid(); p.setInvalid();
if (!pixelPos.isValid()) { getPixelPosUsingQuadTreeSearch(geoPos, pixelPos); return; final float lon0 = geoPos.lon; pixelPos.setLocation(x0, y0); int y1; int x1; x1, y1, pixelPos)); if (Math.sqrt(minDelta) < deltaThreshold) { pixelPos.setLocation(pixelPos.x + 0.5f, pixelPos.y + 0.5f); } else { pixelPos.setInvalid();
/** * Returns the pixel co-ordinates as x/y for a given geographical position given as lat/lon. * This algorithm * * @param geoPos the geographical position as lat/lon. * @param pixelPos the return value */ public void getPixelPosUsingQuadTreeSearch(final GeoPos geoPos, PixelPos pixelPos) { final Result result = new Result(); boolean pixelFound = quadTreeSearch(0, geoPos.lat, geoPos.lon, 0, 0, width, height, result); if (pixelFound) { pixelPos.setLocation(result.x + 0.5f, result.y + 0.5f); } else { pixelPos.setInvalid(); } }
private void updateXYParams(GeoPos geoPos1, GeoPos geoPos2) { final GeoCoding geoCoding = product.getGeoCoding(); final PixelPos pixelPos1 = geoCoding.getPixelPos(geoPos1, null); if (!pixelPos1.isValid()) { pixelPos1.setLocation(0, 0); } final PixelPos pixelPos2 = geoCoding.getPixelPos(geoPos2, null); if (!pixelPos2.isValid()) { pixelPos2.setLocation(product.getSceneRasterWidth(), product.getSceneRasterHeight()); } final Rectangle.Float region = new Rectangle.Float(); region.setFrameFromDiagonal(pixelPos1.x, pixelPos1.y, pixelPos2.x, pixelPos2.y); final Rectangle.Float productBounds = new Rectangle.Float(0, 0, product.getSceneRasterWidth(), product.getSceneRasterHeight()); Rectangle2D finalRegion = productBounds.createIntersection(region); paramX1.setValue((int) finalRegion.getMinX(), null); paramY1.setValue((int) finalRegion.getMinY(), null); paramX2.setValue((int) finalRegion.getMaxX() - 1, null); paramY2.setValue((int) finalRegion.getMaxY() - 1, null); }
if (delta < minDelta) { minDelta = delta; bestPixel.setLocation(x, y); } else if (delta == minDelta && Math.abs(x - x0) + Math.abs(y - y0) > Math.abs( bestPixel.x - x0) + Math.abs(bestPixel.y - y0)) { bestPixel.setLocation(x, y); if (delta < minDelta) { minDelta = delta; bestPixel.setLocation(x, y);
private int computeIndex(PixelPos pixelPos) { final int y = (int) pixelPos.getY(); final int index = y / gcStripeSceneHeight; if (index < smallestValidIndex) { return smallestValidIndex; } else if (index > biggestValidIndex) { return biggestValidIndex; } else { return index; } }