我的状况很奇怪。 我使用geotools投影栅格,例如
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:3857");
GridCoverage2D projectedImage = (GridCoverage2D) Operations.DEFAULT.resample(gridCoverageImage,
targetCRS);
现在,我使用完全相同的代码将过程移至Web服务器控制器中:
public ResponseEntity<InputStreamResource> getProjectedImage(@RequestParam
String filename, @RequestParam String targetCrs){
File file = new File(filename);
CoordinateReferenceSystem targetCRS = CRS.decode(targetCrs);
/** Some process to return file /**
}
我有:
org.opengis.referencing.NoSuchAuthorityCodeException: No code "EPSG:3857"
from authority "EPSG" found for object of type "EngineeringCRS"
我的pom.xml
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>18.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>18.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-coverage</artifactId>
<version>18.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geotiff</artifactId>
<version>18.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-image</artifactId>
<version>18.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-wms</artifactId>
<version>18.2</version>
</dependency>
当我查看WEB-INF / lib时,所有jar都在这里,包括依赖项(gt-referencing,gt-metadata .....)
Tomcat:8.0 Java 8 GeoTools:18.2
当我不在servlet容器中时,它工作正常。 此外,geotools的其他实用程序也可以正常工作。例如,裁剪或GridCoverage2D转换在此servlet容器中进行。
能否请您帮助我了解发生了什么事?
预先感谢
答案 0 :(得分:1)
您的问题很可能是Tomcat(或运行它的用户)没有对java.io.tmpdir
的写权限,这是GeoTools在首次查询EPSG代码时将H2 EPSG数据库解压缩到的位置。
您可以更改temp目录的权限以允许tomcat写入该目录,也可以通过更改CATALINA_TMPDIR
或catalina.sh
中的catalina.bat
变量来更改其使用的位置,或者只需将Djava.io.tmpdir=c:\{yourDir}
添加到您的启动脚本中即可。
此question还提供了一些可能有用的答案。
答案 1 :(得分:0)
即使它不能解决最初的问题(与geotools的依赖关系以及到Tomcat的部署有关),我也找到了解决方法
请勿使用gt-epsg-hsql,它会导致您的应用搜索EPSG代码以解码到HSQL数据库中。
而不是使用CRS.decode(targetCrs);
CRS.parseWKT("PROJCS[\"WGS 84 / Plate Carree (deprecated)\",\r\n" +
" GEOGCS[\"WGS 84\",\r\n" +
" DATUM[\"WGS_1984\",\r\n" +
" SPHEROID[\"WGS 84\",6378137,298.257223563,\r\n" +
" AUTHORITY[\"EPSG\",\"7030\"]],\r\n" +
" AUTHORITY[\"EPSG\",\"6326\"]],\r\n" +
" PRIMEM[\"Greenwich\",0,\r\n" +
" AUTHORITY[\"EPSG\",\"8901\"]],\r\n" +
" UNIT[\"degree\",0.0174532925199433,\r\n" +
" AUTHORITY[\"EPSG\",\"9122\"]],\r\n" +
" AUTHORITY[\"EPSG\",\"4326\"]],\r\n" +
" PROJECTION[\"Equirectangular\"],\r\n" +
" UNIT[\"metre\",1,\r\n" +
" AUTHORITY[\"EPSG\",\"9001\"]],\r\n" +
" AXIS[\"X\",EAST],\r\n" +
" AXIS[\"Y\",NORTH],\r\n" +
" AUTHORITY[\"EPSG\",\"32662\"]]");
您可以找到与每个EPSG代码here相关的所有WKT
如果有人对原始问题有答案或解释,我很想读:)