private Style createRGBStyle() {
GridCoverage2D cov = null;
try {
cov = reader.read(null);
} catch (IOException giveUp) {
throw new RuntimeException(giveUp);
int numBands = cov.getNumSampleDimensions();
if (numBands < 3) {
return null;
String[] sampleDimensionNames = new String[numBands];
for (int i = 0; i < numBands; i++) {
GridSampleDimension dim = cov.getSampleDimension(i);
sampleDimensionNames[i] = dim.getDescription().toString();
final int RED = 0, GREEN = 1, BLUE = 2;
int[] channelNum = {-1, -1, -1};
for (int i = 0; i < numBands; i++) {
String name = sampleDimensionNames[i].toLowerCase();
if (name != null) {
if (name.matches("red.*")) {
channelNum[RED] = i + 1;
} else if (name.matches("green.*")) {
channelNum[GREEN] = i + 1;
} else if (name.matches("blue.*")) {
channelNum[BLUE] = i + 1;
if (channelNum[RED] < 0 || channelNum[GREEN] < 0 || channelNum[BLUE] < 0) {
channelNum[RED] = 1;
channelNum[GREEN] = 2;
channelNum[BLUE] = 3;
SelectedChannelType[] sct = new SelectedChannelType[cov.getNumSampleDimensions()];
ContrastEnhancement ce = sf.contrastEnhancement(ff.literal(1.0), ContrastMethod.NORMALIZE);
for (int i = 0; i < 3; i++) {
sct[i] = sf.createSelectedChannelType(String.valueOf(channelNum[i]), ce);
RasterSymbolizer sym = sf.getDefaultRasterSymbolizer();
ChannelSelection sel = sf.channelSelection(sct[RED], sct[GREEN], sct[BLUE]);
sym.setChannelSelection(sel);
return SLD.wrapSymbolizers(sym);
1. 概述在前面的章节,我们主要讲述了GeoTools对于矢量(主要是Shape)数据的操作。在地理信息系统的世界里,还有一类很重要的数据类型,那便是栅格数据。虽然GeoTools对于栅格数据的支持并没有gdal强大,但既然他作为GeoTools的一部分,我们还是又必要了解一下它。2. GridCoverageGeoTools对于栅格数据的支持主要又由GridCoverage实现的。作为一名程序员,我们习惯于处理诸如JPEG、GIF或者PNG等格式的栅格数据。在地理空间方面,有一个Coverage个概
概述:GeoTools 是一个开源 (LGPL) Java 代码库,它为操作地理空间数据提供符合标准的方法,例如实现地理信息系统。GeoTools 库数据结构基于开放地理空间联盟 (OGC) 规范。
官网地址:
https://www.geotools.org/
常用maven库地址:
https://repo.osgeo.org/repository/release/
https://maven.geo-solutions.it/
arcgrid
geotiff
grassra
功能需求:给定同一区域不同时间的无人机影像数据,求出区域内影像变化部分,并矢量化成GeoJSON返回给前端。
1.将两幅图像进行相减与二值化操作
2.调用geoTools的PolygonExtractionProcess将图像相减操作结果进行矢量化
3.对矢量化后的多边形对象进行过滤,删除面积过小的细碎多边形
4.将最终结果以GeoJSON格式返回
功能需求:给定同一区域不同时间的无人机影像数据,求出区域内影像变化部分,并矢量化成GeoJSON返回给前端。
1.将两幅图像进行相减与二值化操
public class Hints extends RenderingHints {
private static volatile Map<java.awt.RenderingHints.Key, Object> GLOBAL = new ConcurrentHashMap();
private stat...
矢量转栅格一直是GIS领域的一个重要的问题,对于分布式计算来说,栅格数据较矢量数据更加优化,查询、分析起来也更快。于是我们考虑可以将全国的地表覆盖数据全部栅格化之后来进行分析。
那就先试一下最简单的栅格化好惹 生成一张单波段的栅格图像,同时栅格的值表示地表覆盖数据中的分类码。
我先在geotrellis的系列文章中翻了一下,发现还真有一篇矢量栅格化的文章:
https://www.cnblo...
Geo Tools Vector grids 矢量栅格
矢量栅格化
GeoTools 矢量网格类使创建由多边形或线元素组成的矢量网格(也称为晶格)变得容易,每个网格都表示为SimpleFeature。
使用“网格”或“线”实用程序类可以轻松生成简单的网格,而当需要对网格布局和属性进行更多控制时,可以使用较低级别的类。
<repositories>
<repository>
<id>osgeo</id>
最近办公室的师兄在处理横断山区水土耦合的时候,遇到一个问题,需要对栅格数据进行擦除,也就是反向提取。如果是矢量数据,ArcGIS中提供直接的工具可以进行,但是栅格数据并没有直接的工具。如果将栅格数据转换为矢量数据,则会遇到坐标系、转换方法和像元大小确定的问题,还会造成精度损失。网上搜索的方法不甚明确,且较为复杂,现在提供一种直接简便的方法。
首先...
很抱歉,我不能直接给出完整的代码,但是我可以提供一些指导:
Google Earth Engine(GEE)是一个用于遥感影像处理和分析的云平台。您可以在GEE中查询并下载山东省1978-2020年的降水数据。
步骤如下:
1. 注册Google Earth Engine账号并登录。
2. 打开GEE Code Editor,创建一个新的javascript脚本。
3. 加载必要的数据,例如山东省的行政区划边界数据。
4. 使用GEE API选择降水数据图层,比如“CHIRPS”降水数据。
5. 通过设置时间范围,筛选1978年至2020年的降水数据。
6. 使用GEE API将降水数据转换为栅格数据。
7. 将栅格数据导出为您需要的文件格式,如GeoTIFF。
以上是大致的步骤,如果您对javascript语言或GEE API有疑问,可以查阅GEE官方文档或询问相关专家。