feat:
- 시설 검색, 다중 시설 검색 시 이전 검색 시설 레이어 삭제 기능 추가 - 시설 위치 정보 없을 때 alert 추가 - 시설 검색 시 해당 시설 아이콘 이미지 표출
This commit is contained in:
@@ -591,40 +591,63 @@ GisOlLayer.prototype = {
|
||||
const tileSize = 256; // 기본 타일 크기
|
||||
return Math.ceil(Math.log2(maxResolution / (cameraHeight / tileSize)));
|
||||
},
|
||||
ensureSearchLayer: function () {
|
||||
ensureSearchLayer: function (option) {
|
||||
let layer = this.searchLayer;
|
||||
|
||||
if (!layer) {
|
||||
layer = new VectorLayer({
|
||||
source: new VectorSource(),
|
||||
let source;
|
||||
|
||||
try {
|
||||
if (option.cmncNm == 'bbox') {
|
||||
source = this.getVectorSourceBbox(option);
|
||||
} else {
|
||||
source = this.getVectorSourceAll(option);
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(option);
|
||||
}
|
||||
|
||||
layer = new VectorImageLayer({
|
||||
...option,
|
||||
id: 'search-layer',
|
||||
source: source,
|
||||
zIndex: 9999
|
||||
});
|
||||
layer.setStyle(this.gisStyle.getLayerStyleFunction(layer, option));
|
||||
|
||||
let map = GisApp.Module.core.map;
|
||||
map.addLayer(layer);
|
||||
|
||||
this.searchLayer = layer;
|
||||
}
|
||||
return layer;
|
||||
},
|
||||
clearSearchLayer: function () {
|
||||
const layer = this.ensureSearchLayer();
|
||||
clearSearchLayer: function (option) {
|
||||
const layer = this.ensureSearchLayer(option);
|
||||
layer.getSource().clear(true);
|
||||
|
||||
if (this.searchLayer) {
|
||||
GisApp.Module.core.map.removeLayer(this.searchLayer);
|
||||
this.searchLayer = null;
|
||||
}
|
||||
},
|
||||
showSearchResultsFromGeoJSON: function (lyrTyNm, featureId) {
|
||||
const layer = this.ensureSearchLayer();
|
||||
|
||||
// 이전 검색결과는 깨끗이
|
||||
const prev = layer.getSource();
|
||||
if (prev) prev.clear(true);
|
||||
|
||||
//레이어 타입 설정(point, line 등. 이걸 style에서 사용)
|
||||
const layerCode = GisApp.layerCode;
|
||||
const matched = Object.values(layerCode).find(obj => obj.lyrTyNm === lyrTyNm);
|
||||
// 이전 검색 레이어 완전히 제거
|
||||
this.clearSearchLayer(matched);
|
||||
// 새로운 검색 레이어 생성
|
||||
const layer = this.ensureSearchLayer(matched);
|
||||
layer.set("gobjTy", matched.gobjTy);
|
||||
|
||||
// 새 소스 만들기
|
||||
const source = this.getFeatureSourceFromGeoserver(lyrTyNm, featureId);
|
||||
const source = this.getFeatureSourceFromGeoserver(lyrTyNm, featureId, matched);
|
||||
|
||||
// 1) 로드 완료시 extent 맞추기
|
||||
const onLoadEnd = () => {
|
||||
if (Object.keys(source.nullGeometryFeatures_).length > 0) alert('해당 시설의 위치 정보가 없습니다.');
|
||||
|
||||
const feats = source.getFeatures();
|
||||
if (feats && feats.length > 0) {
|
||||
const select = GisApp.Module.select;
|
||||
@@ -659,12 +682,13 @@ GisOlLayer.prototype = {
|
||||
* @param {*} featureId
|
||||
* @returns
|
||||
*/
|
||||
getFeatureSourceFromGeoserver: function (lyrTyNm, featureId) {
|
||||
getFeatureSourceFromGeoserver: function (lyrTyNm, featureId, option) {
|
||||
|
||||
const typeName = this.storageNm + lyrTyNm;
|
||||
const srsName = GisApp.TO_PROJ;
|
||||
const baseUrl = GisApp.GEOSERVER_URL;
|
||||
const source = new VectorSource({
|
||||
...option,
|
||||
format: new GeoJSON(),
|
||||
url: () => {
|
||||
const params = new URLSearchParams({
|
||||
@@ -689,13 +713,14 @@ GisOlLayer.prototype = {
|
||||
* @param {Array|string} featureIds 피처 ID 배열 또는 단일 ID
|
||||
*/
|
||||
showMultipleSearchResultsFromGeoJSON: function (lyrTyNm, featureIds) {
|
||||
const layer = this.ensureSearchLayer();
|
||||
|
||||
const prev = layer.getSource();
|
||||
if (prev) prev.clear(true);
|
||||
|
||||
const layerCode = GisApp.layerCode;
|
||||
const matched = Object.values(layerCode).find(obj => obj.lyrTyNm === lyrTyNm);
|
||||
|
||||
// 이전 검색 레이어 완전히 제거
|
||||
this.clearSearchLayer(matched);
|
||||
// 새로운 검색 레이어 생성
|
||||
const layer = this.ensureSearchLayer(matched);
|
||||
layer.set("gobjTy", matched.gobjTy);
|
||||
|
||||
const source = this.getMultiFeatureSourceFromGeoserver(lyrTyNm, featureIds);
|
||||
|
||||
@@ -284,6 +284,7 @@ GisOlSelect.prototype = {
|
||||
selectedFeatures.forEach(feature => {
|
||||
selectedFeatures.remove(feature);
|
||||
});
|
||||
selectedFeatures.clear();
|
||||
},
|
||||
/**
|
||||
* SELECT 이벤트 활성화
|
||||
|
||||
Reference in New Issue
Block a user