我有一张图片(基本上,我获得了1024x1024像素的原始图像数据)和该图像中心像素的经纬度位置。
每个像素代表相同的固定像素比例尺寸(例如每个像素30米)。
现在,我想将图像绘制到使用坐标参考系统“EPSG:4326”(WGS84)的地图上。
当我仅定义图像的经纬度角落并根据“像素大小*像素比例尺”的计算以及将距离从中心点转换为每个角落的经纬度坐标来绘制它时,我认为,图像未正确绘制到地图上。 通过术语“未正确绘制”,我的意思是,图像似乎被移动了,而且图像的内容不在我期望它们在地图位置上。
我认为这是因为我“混合”了像素比例尺和“EPSG:4326”坐标参考系统。
现在,根据我所给出的信息,我是否可以使用Geotools将整个像素矩阵从固定像素比例基础转换为“EPSG:4326”坐标参考系统中的新像素矩阵? 当然,转换必须依赖于我已经给出的经纬度中心位置和像素比例尺。
我想知道是否使用类似于这样的东西可以指引我正确的方向:
每个像素代表相同的固定像素比例尺寸(例如每个像素30米)。
现在,我想将图像绘制到使用坐标参考系统“EPSG:4326”(WGS84)的地图上。
当我仅定义图像的经纬度角落并根据“像素大小*像素比例尺”的计算以及将距离从中心点转换为每个角落的经纬度坐标来绘制它时,我认为,图像未正确绘制到地图上。 通过术语“未正确绘制”,我的意思是,图像似乎被移动了,而且图像的内容不在我期望它们在地图位置上。
我认为这是因为我“混合”了像素比例尺和“EPSG:4326”坐标参考系统。
现在,根据我所给出的信息,我是否可以使用Geotools将整个像素矩阵从固定像素比例基础转换为“EPSG:4326”坐标参考系统中的新像素矩阵? 当然,转换必须依赖于我已经给出的经纬度中心位置和像素比例尺。
我想知道是否使用类似于这样的东西可以指引我正确的方向:
MathTransform transform = CRS.findMathTransform(DefaultGeocentricCRS.CARTESIAN, DefaultGeographicCRS.WGS84, true);
DirectPosition2D srcDirectPosition2D = new DirectPosition2D(DefaultGeocentricCRS.CARTESIAN, degreeLat.getDegree(), degreeLon.getDegree());
DirectPosition2D destDirectPosition2D = new DirectPosition2D();
transform.transform(srcDirectPosition2D, destDirectPosition2D);
double transX = destDirectPosition2D.x;
double transY = destDirectPosition2D.y;
int kmPerPixel = mapImage.getWidth / 1024; // It is known to me that my map is 1024x1024km ...
double x = zeroPointX + ((transX * 0.001) * kmPerPixel);
double y = zeroPointY + (((transX * -1) * 0.001) * kmPerPixel);
我从另一个SO线程中得到了这段代码,并已经对其进行了一些修改,但仍然想知道这是否是解决我的问题的正确起点。
我只假设我的原始图像坐标参考系统属于DefaultGeocentricCRS.CARTESIAN类型。有人能确认一下吗?
接下来,使用Geotools来解决这种问题是否是正确的起点,还是我走错了路?
此外,我想补充说明这将用于一个相对安静的动态系统。因此,我的图像更新速率约为10Hz,需要相应地执行变换。 再次问一下,我的初步想法是否导致了解决方案,还是您有其他解决方案来解决我的问题?
非常感谢, Kiamur
GridCoverageFactory
创建我的GridCoverade2D
时,我遇到了一个类转换异常:com.vividsolutions.jts.geom.Envelope
无法转换为org.opengis.geometry.Envelope
。我有点迷失了,因为其他所有东西都已经运作正常。不幸的是,到目前为止,我的情况还没有任何改善。唯一的好消息是:你对红/蓝正方形的角落计算结果与我之前定义的角落完全相同... - KiamurAbstractGridFormat format = GridFormatFinder.findFormat(fileName);
这一行代码会出现IllegalArgumentException: input == null!
的错误。我必须承认,我没有使用 Maven,只是通过 Eclipse 中的构建路径编辑器导入我认为所需的 libs。我想我已经非常接近了,但仍然需要您的帮助,再次表示歉意...... - Kiamur