package com.se.nsl.config;
|
|
import com.se.nsl.helper.CaffeineHelper;
|
import com.se.nsl.helper.GdalHelper;
|
import com.se.nsl.helper.WebHelper;
|
import lombok.extern.slf4j.Slf4j;
|
import org.gdal.gdal.Band;
|
import org.gdal.gdal.Dataset;
|
import org.gdal.gdal.Driver;
|
import org.gdal.gdal.gdal;
|
import org.gdal.gdalconst.gdalconstConstants;
|
import org.gdal.ogr.*;
|
import org.gdal.osr.SpatialReference;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.boot.ApplicationArguments;
|
import org.springframework.boot.ApplicationRunner;
|
import org.springframework.core.env.Environment;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
@Slf4j
|
@Component
|
@SuppressWarnings("ALL")
|
public class InitConfig implements ApplicationRunner {
|
@Resource
|
Environment env;
|
|
@Value("${server.port}")
|
String serverPort;
|
|
@Value("${config.cacheTime}")
|
Integer cacheTime;
|
|
@Value("${server.servlet.context-path}")
|
String contextPath;
|
|
@Override
|
public void run(ApplicationArguments args) {
|
// noinspection AlibabaRemoveCommentedCode
|
try {
|
log.info("***************** 初始化 GDAL *****************" + "\n");
|
GdalHelper.init(env.getProperty("config.gdalPath"));
|
CaffeineHelper.init(cacheTime);
|
|
String path = null != contextPath && contextPath.length() > 1 ? contextPath : "";
|
log.info("API文档:http://localhost:" + serverPort + path + "/doc.html");
|
log.info("API文档:http://{}:{}{}/doc.html", WebHelper.getHostIp(), serverPort, path);
|
|
log.info("***************** 系统启动完毕 *****************" + "\n");
|
|
//log.info("***************** 读取tif文件 *****************" + "\n");
|
// 读取tif文件
|
//readTif("D:\\soft\\env\\tif\\srtm_12_03.tif");
|
//log.info("***************** 读取tif文件完毕 *****************" + "\n");
|
|
//log.info("***************** 读取shp文件 *****************" + "\n");
|
// 读取shp文件
|
//readShp("D:\\soft\\env\\雨量站点数据\\雨量站点_84\\雨量站点_84.shp");
|
//log.info("***************** 读取shp文件完毕 *****************" + "\n");
|
|
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
}
|
}
|
|
|
|
/**
|
* 读取tif文件
|
*
|
* @param fileName
|
*/
|
public static void readTif(String fileName) {
|
// 读取影像数据
|
Dataset dataset = gdal.Open(fileName, gdalconstConstants.GA_ReadOnly);
|
if (dataset == null) {
|
System.out.println("read fail!");
|
return;
|
}
|
|
// providing various methods for a format specific driver.
|
Driver driver = dataset.GetDriver();
|
System.out.println("driver name: " + driver.getLongName());
|
|
// 读取影像信息
|
int xSize = dataset.getRasterXSize();
|
int ySzie = dataset.getRasterYSize();
|
int rasterCount = dataset.getRasterCount();
|
System.out.println("dataset xSize: " + xSize + ", ySzie = " + ySzie + ", rasterCount = " + rasterCount);
|
|
Band band = dataset.GetRasterBand(1);
|
// the data type of the band.
|
int type = band.GetRasterDataType();
|
System.out.println("data type = " + type + ", " + (type == gdalconstConstants.GDT_Byte));
|
|
// Frees the native resource associated to a Dataset object and close the file.
|
dataset.delete();
|
|
gdal.GDALDestroyDriverManager();
|
}
|
|
/**
|
* 读取 Shapefile 文件并打印属性和几何数据
|
*
|
* @param shapefilePath SHP 文件路径
|
*/
|
|
public void readShp(String strVectorFile) {
|
|
// 注册所有的驱动
|
ogr.RegisterAll();
|
// 为了支持中文路径,请添加下面这句代码
|
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
// 为了使属性表字段支持中文,请添加下面这句
|
gdal.SetConfigOption("SHAPE_ENCODING", "CP936");
|
// 读取数据,这里以ESRI的shp文件为例
|
String strDriverName = "ESRI Shapefile";
|
// 创建一个文件,根据strDriverName扩展名自动判断驱动类型
|
|
org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName);
|
|
if (oDriver == null) {
|
System.out.println(strDriverName + " 驱动不可用!\n");
|
return;
|
}
|
DataSource dataSource = oDriver.Open(strVectorFile);
|
//Layer layer = dataSource.GetLayer("test");
|
Layer layer = dataSource.GetLayer(0);
|
|
for (int i = 0; i < dataSource.GetLayerCount(); i++) {
|
Layer layerIdx = dataSource.GetLayer(i);
|
System.out.println("图层名称:<==>" + layerIdx.GetName());
|
}
|
|
String layerName = layer.GetName();
|
System.out.println("图层名称:" + layerName);
|
SpatialReference spatialReference = layer.GetSpatialRef();
|
//System.out.println(spatialReference);
|
System.out.println("空间参考坐标系:" + spatialReference.GetAttrValue("AUTHORITY", 0)
|
+ spatialReference.GetAttrValue("AUTHORITY", 1));
|
|
double[] layerExtent = layer.GetExtent();
|
|
System.out.println("图层范围:minx:" + layerExtent[0] + ",maxx:" + layerExtent[1] + ",miny:" + layerExtent[2] + ",maxy:" + layerExtent[3]);
|
|
|
FeatureDefn featureDefn = layer.GetLayerDefn();
|
|
int fieldCount = featureDefn.GetFieldCount();
|
|
Map<String, String> fieldMap = new HashMap<String, String>();
|
for (int i = 0; i < fieldCount; i++) {
|
FieldDefn fieldDefn = featureDefn.GetFieldDefn(i);
|
// 得到属性字段类型
|
int fieldType = fieldDefn.GetFieldType();
|
String fieldTypeName = fieldDefn.GetFieldTypeName(fieldType);
|
// 得到属性字段名称
|
String fieldName = fieldDefn.GetName();
|
fieldMap.put(fieldTypeName, fieldName);
|
}
|
System.out.println();
|
System.out.println("fileMap:");
|
System.out.println(fieldMap);
|
|
System.out.println(layer.GetFeature(1).GetGeometryRef().ExportToJson());
|
System.out.println(layer.GetFeature(2).GetGeometryRef().ExportToJson());
|
System.out.println(layer.GetFeature(3).GetGeometryRef().ExportToJson());
|
|
for (int i = 0; i < 12; i++) {
|
Feature feature = layer.GetFeature(i);
|
Object[] arr = fieldMap.values().toArray();
|
for (int k = 0; k < arr.length; k++) {
|
String fvalue = feature.GetFieldAsString(arr[k].toString());
|
System.out.println(" 属性名称:" + arr[k].toString() + ",属性值:" + fvalue);
|
}
|
}
|
}
|
|
|
}
|