GridGeometry2D 的世界到网格函数翻译错误

问题描述 投票:0回答:2

使用 geotools 版本 11.2

import java.awt.Rectangle


import com.vividsolutions.jts.geom.Envelope
import org.geotools.coverage.grid.{GeneralGridEnvelope, GridGeometry2D}
import org.geotools.geometry.jts.ReferencedEnvelope
import org.geotools.referencing.crs.DefaultGeographicCRS.WGS84

val minX = -78.523
val minY = 38.010
val maxX = -78.451
val maxY = 38.069
val width = 400
val height = 300

val bounds = new ReferencedEnvelope(new Envelope(minX, maxX, minY, maxY), WGS84)
val rect = new Rectangle(0, 0, width, height)
val ggEnvelope = new GeneralGridEnvelope(rect, bounds.getDimension)
val gm = new GridGeometry2D(ggEnvelope, bounds)
////////////////// This should be [0, 299] but is [-1, 299]//////////////////////////////
gm.worldToGrid(bounds.getLowerCorner)
scala geotools
2个回答
0
投票

结束使用这个功能。您可以在 GridGeometry2D.java worldToGrid 函数的源代码中看到类似 maxX 和 minY 的内容

  val TOL = 1.0E-6
  val values = Array(0.0)

  def safeWorldAccess(grid: GridCoverage2D, point: DirectPosition2D): Double = {
    val trPoint = point.clone()
    val gridGeom = grid.getGridGeometry
    if (Math.abs(trPoint.getX - gridGeom.getEnvelope2D.getMinX) <= TOL) {
      trPoint.setLocation(trPoint.getX + TOL, trPoint.getY)
    }

    if (Math.abs(trPoint.getY - gridGeom.getEnvelope2D.getMaxY) <= TOL) {
     trPoint.setLocation(trPoint.getX, trPoint.getY - TOL)
    }
    val gc: GridCoordinates2D = gridGeom.worldToGrid(trPoint)
    grid.evaluate(gc, values).head
  }

0
投票

此代码在 geotool v29 中返回 [0,299]

        double minX = -78.523;
        double minY = 38.010;
        double maxX = -78.451;
        double maxY = 38.069;
        int width = 400;
        int height = 300;

        ReferencedEnvelope bounds = new ReferencedEnvelope(new Envelope(minX, maxX, minY, maxY), WGS84);
        Rectangle rect = new Rectangle(0, 0, width, height);
        GeneralGridEnvelope ggEnvelope = new GeneralGridEnvelope(rect, bounds.getDimension());
        GridGeometry2D gm = new GridGeometry2D(ggEnvelope, bounds);
        ////////////////// This should be [0, 299] but is [-1, 299]//////////////////////////////
        System.out.println(gm.worldToGrid(bounds.getLowerCorner()).toString());
© www.soinside.com 2019 - 2024. All rights reserved.