Java geotools如何创建覆盖网格
当每个单元为5M时,如何创建网格覆盖? 我发现:Java geotools如何创建覆盖网格,java,geotools,Java,Geotools,当每个单元为5M时,如何创建网格覆盖? 我发现: GridCoverage2D coverage = reader.read(null); // direct access DirectPosition position = new DirectPosition2D(crs, x, y); double[] sample = (double[]) coverage.evaluate(position); // assume double // res
GridCoverage2D coverage = reader.read(null);
// direct access
DirectPosition position = new DirectPosition2D(crs, x, y);
double[] sample = (double[]) coverage.evaluate(position); // assume double
// resample with the same array
sample = coverage.evaluate(position, sample);
资料来源:
我没有找到很多关于如何在geotools上创建网格覆盖率的教程…要创建空覆盖率,需要使用
GridCoverageFactory
和create
方法之一。由于不是从现有图像构建,因此需要为光栅提供一些存储空间(这也可以保存您想要的任何初始值)。为此,您可以选择一个float[][]
或一个。最后,您需要一个信封
来说明覆盖范围和分辨率(否则它只是一个数字数组),我倾向于使用参考信封
,以便知道单位等,因此,在下面的示例中,我使用了EPSG:27700
,这是OSGB国家电网,因此我知道它以米为单位,我可以定义南部丘陵地区的某个地方的原点。通过将左下角X和Y坐标以及右上角X和Y坐标指定为分辨率
乘以宽度和高度(加上左下角),所有数学运算都可以确保我的像素的大小为分辨率
因此,现在保持简单,您可以执行以下操作:
float[][] data;
int width = 100;
int height = 200;
data = new float[width][height];
int resolution = 5;
for(int i=0;i<width;i++){
for(int j=0;j<height;j++ ){
data[i][j] = 0.0f;
}
}
GridCoverageFactory gcf = new GridCoverageFactory();
CoordinateReferenceSystem crs = CRS.decode("EPSG:27700");
int llx = 500000;
int lly = 105000;
ReferencedEnvelope referencedEnvelope = new ReferencedEnvelope(llx, llx + (width * resolution), lly, lly + (height * resolution),
crs);
GridCoverage2D gc = gcf.create("name", data, referencedEnvelope);
您正在读取文件还是创建一个空文件?@IanTurton
WritableRaster raster2 = RasterFactory.createBandedRaster(java.awt.image.DataBuffer.TYPE_INT, width,
height, 3, null);
for (int i = 0; i < width; i++) {//width...
for (int j = 0; j < height; j++) {
raster2.setSample(i, j, 0, rn.nextInt(200));
raster2.setSample(i, j, 1, rn.nextInt(200));
raster2.setSample(i, j, 2, rn.nextInt(200));
}
}