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