Browse Source

고도 변환

pull/12/head
지대한 11 months ago
parent
commit
05e984d91d
  1. 4
      docker-compose.yml
  2. 10
      pav-server/src/main/java/com/palnet/biz/config/InitRunner.java
  3. 70
      pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java
  4. 26
      pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java
  5. 0
      pav-server/src/main/resources/air/elev2d/gimpo-airport-2d-elev.json.bak

4
docker-compose.yml

@ -4,4 +4,6 @@ services:
server:
build: pav-server
environment:
- SPRING_PROFILES_ACTIVE=local
- SPRING_PROFILES_ACTIVE=local
ports:
- "9000:8080"

10
pav-server/src/main/java/com/palnet/biz/config/InitRunner.java

@ -1,5 +1,6 @@
package com.palnet.biz.config;
import com.palnet.comn.utils.AirspaceUtils;
import com.palnet.comn.utils.DigitalElevationModelUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
@ -16,8 +17,15 @@ public class InitRunner implements ApplicationRunner {
try {
DigitalElevationModelUtils.getInstance();
} catch (Exception e) {
log.warn("===== InitRunner run error : {}", e.getMessage());
log.warn("===== InitRunner run error[DigitalElevationModelUtils] : {}", e.getMessage());
}
// airspace load
try {
AirspaceUtils.getInstance();
} catch (Exception e) {
log.warn("===== InitRunner run error[AirspaceUtils] : {}", e.getMessage());
}
}
}

70
pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java

@ -9,15 +9,20 @@ import org.geotools.geojson.geom.GeometryJSON;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.opengis.feature.simple.SimpleFeature;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -150,56 +155,35 @@ public class AirspaceUtils {
// 파일에서 공역 데이터 가져와서 geometry로 변환 - 초기화.
private void loadResourceAirspace() {
// airgeo-elev.json
// gimpo-airport-2d-elev.json
ClassPathResource airgeo = new ClassPathResource("air/elev2d/airgeo-elev.json");
ClassPathResource gimpo = new ClassPathResource("air/elev2d/gimpo-airport-2d-elev.json");
List<FeatureInfo> featureInfos = new ArrayList<>();
InputStream jsonInputStream = null;
InputStreamReader inputStreamReader = null;
// 2. json parsing
JSONParser jsonParser = new JSONParser();
List<FeatureInfo> featureInfos = new ArrayList<>();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = null;
try {
jsonInputStream = airgeo.getInputStream();
inputStreamReader = new InputStreamReader(jsonInputStream, "UTF-8");
BufferedReader reader = new BufferedReader(inputStreamReader);
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
List<FeatureInfo> fis = this.convertGeoJsonToGeometry(jsonObject);
featureInfos.addAll(fis);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
if (jsonInputStream != null) jsonInputStream.close();
if (inputStreamReader != null) inputStreamReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
resources = resolver.getResources("classpath:" + CLASS_PATH + "/*-elev.json");
} catch (IOException e) {
log.warn("airspaces load error : {}", e.getMessage());
}
InputStream jsonInputStream2 = null;
InputStreamReader inputStreamReader2 = null;
if (resources == null) {
log.info("airspace resources is null");
return;
}
try {
jsonInputStream2 = gimpo.getInputStream();
inputStreamReader2 = new InputStreamReader(jsonInputStream2, "UTF-8");
BufferedReader reader = new BufferedReader(inputStreamReader2);
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
List<FeatureInfo> fis = this.convertGeoJsonToGeometry(jsonObject);
featureInfos.addAll(fis);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
if (jsonInputStream2 != null) jsonInputStream2.close();
if (inputStreamReader2 != null) inputStreamReader2.close();
} catch (IOException e) {
throw new RuntimeException(e);
for (Resource resource : resources) {
try (InputStream is = resource.getInputStream()) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
List<FeatureInfo> fis = this.convertGeoJsonToGeometry(jsonObject);
featureInfos.addAll(fis);
} catch (Exception e) {
log.warn("airspace resource read error : {}", e.getMessage());
}
}
log.info(">>> featureInfos size : {}", featureInfos.size());
this.airspaces = featureInfos;
}

26
pav-server/src/main/java/com/palnet/comn/utils/DigitalElevationModelUtils.java

@ -21,7 +21,6 @@ import org.opengis.referencing.operation.TransformException;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.util.StopWatch;
import java.awt.image.Raster;
import java.io.File;
@ -57,28 +56,17 @@ public class DigitalElevationModelUtils {
try {
Resource[] resources = resolver.getResources("classpath:" + CLASS_PATH + "/dem_*.tif");
for (Resource resource : resources) {
log.info("resource : {}", resource);
log.info("resource : {}", resource.getFilename());
log.info("resource : {}", resource.getURI());
log.info("resource : {}", resource.getURI().getPath());
log.info("resource : {}", resource.getURL());
log.info("resource : {}", resource.getURL().getPath());
log.info("resource : {}", resource.getDescription());
log.info("================================");
// log.info("resource : {}", resource.getFile());
// log.info("resource : {}", resource.getFile().getName());
// log.info("resource : {}", resource.getFile().getPath());
// log.info("resource : {}", resource.getFile().getAbsolutePath());
// log.info("resource : {}", resource.getFile().getCanonicalPath());
// log.info("resource : {}", resource.getFile().toPath());
if (!resource.isFile()) {
if (!resource.exists()) {
log.info("this is not file : {}", resource.getFilename());
continue;
}
File file = File.createTempFile("dem", ".tif");
FileUtils.copyInputStreamToFile(resource.getInputStream(), file);
log.info(">>> file : {}", file);
AbstractGridFormat format = GridFormatFinder.findFormat(file);
GridCoverage2DReader reader = format.getReader(file);
@ -92,9 +80,9 @@ public class DigitalElevationModelUtils {
}
} catch (IOException e) {
throw new RuntimeException(e);
log.warn("dem load error : {}", e.getMessage());
}
log.info(">>> demList : {}", demList);
log.info(">>> demList size : {}", demList.size());
this.dems = demList;
}

0
pav-server/src/main/resources/air/elev2d/gimpo-airport-2d-ele.json.bak → pav-server/src/main/resources/air/elev2d/gimpo-airport-2d-elev.json.bak

Loading…
Cancel
Save