package com.ard.tianyu.controller.wayline.terrain;
|
|
import com.ard.tianyu.config.GeoserverConfig;
|
import lombok.extern.slf4j.Slf4j;
|
import org.geotools.coverage.grid.GridCoverage2D;
|
import org.geotools.coverage.processing.Operations;
|
import org.geotools.gce.geotiff.GeoTiffReader;
|
import org.geotools.geometry.DirectPosition2D;
|
import org.geotools.referencing.CRS;
|
import org.opengis.geometry.DirectPosition;
|
import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
import org.springframework.stereotype.Component;
|
import javax.annotation.PostConstruct;
|
import javax.annotation.Resource;
|
import java.io.File;
|
import java.io.IOException;
|
|
@Slf4j
|
@Component
|
public class GeoUtils {
|
|
@Resource
|
private GeoserverConfig geoserverConfig;
|
private GridCoverage2D coverage;
|
|
/**
|
* 加载地形文件
|
*
|
* @author lsy
|
* @date 2025/6/18
|
*/
|
@PostConstruct
|
public void initTif() {
|
try {
|
File file = new File(geoserverConfig.getTifPath());
|
GeoTiffReader reader = new GeoTiffReader(file);
|
GridCoverage2D rawCoverage = reader.read(null);
|
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326");
|
coverage = (GridCoverage2D) Operations.DEFAULT.resample(rawCoverage, targetCRS);
|
} catch (Exception e) {
|
log.error("加载tif地形文件异常:{}", e.getMessage());
|
}
|
}
|
|
/**
|
* 获取地形高度
|
*
|
* @param lon 经度
|
* @param lat 纬度
|
* @return 海拔高度
|
* @author lsy
|
* @date 2025/6/18
|
*/
|
|
public double getHeight(double lon, double lat) throws IOException {
|
DirectPosition pos = new DirectPosition2D(null, lat, lon);
|
double[] result = coverage.evaluate(pos, new double[1]);
|
System.out.println("Elevation at (" + lon + ", " + lat + "): " + result[0]);
|
return result[0];
|
}
|
|
}
|