//시설물편집창 private void Button_Click(object sender, RoutedEventArgs e) { EditWinView view = new EditWinView(); if (view.ShowDialog() is bool) { //재조회 mapControl.Refresh(); //심볼초기화 CmmObj.InitUniqueValueRendererObj(); } }
public MapMainViewModel() { //string licenseKey = "runtimelite,1000,rud1244207246,none,9TJC7XLS1MJPF5KHT033"; //그린텍 //string licenseKey = "runtimelite,1000,rud9177830334,none,A3E60RFLTFM5NERL1040"; //kyun0828 free //ArcGISRuntimeEnvironment.SetLicense(licenseKey); loadedCmd = new RelayCommand <object>(delegate(object obj) { //뷰객체를 파라미터로 전달받기 System.Windows.Controls.Grid divGrid = obj as System.Windows.Controls.Grid; this.mapView = divGrid.FindName("mapView") as MapView; this.divLayer = divGrid.FindName("divLayer") as Popup; this.ClearButton = divGrid.FindName("ClearButton") as Button; //지도초기화 InitMap(); //시설물레이어DIV 초기화작업 InitDivLayer(); CmmRun.InitUniqueValueRenderer();//렌더러초기생성작업 //비트맵초기화(시설물상세DIV 아이콘) BitImg = new BitmapImage(); //ShowShapeLayer(mapView, "BML_GADM_AS", true); }); //레이어 ON/OFF chkCmd = new RelayCommand <object>(delegate(object obj) { Button doc = obj as Button; //IEnumerable<CheckBox> collection = doc.Children.OfType<CheckBox>(); //CheckBox chkbox = collection.First(); CheckBox chkbox = doc.Template.FindName("chkLayer", doc) as CheckBox; bool chk = (bool)chkbox.IsChecked; ShowLocalServerLayer(mapView, doc.Tag.ToString(), chk); //ShowShapeLayer(mapView, doc.Tag.ToString(), chk); //선택된 레이어저장 try { if (chk) { _selectedLayerNms.Add(doc.Tag.ToString()); _selectedLayerNm = doc.Tag.ToString(); } else { _selectedLayerNms.Remove(doc.Tag.ToString()); _selectedLayerNm = _selectedLayerNms.LastOrDefault(); } } catch (Exception) { } }); //팝업레이어 토글처리 toggleCmd = new RelayCommand <object>(delegate(object obj) { StackPanel spLayer = divLayer.FindName("spLayer") as StackPanel; System.Windows.Controls.Grid gridTitle = divLayer.FindName("gridTitle") as System.Windows.Controls.Grid; spLayer.Visibility = spLayer.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; if (spLayer.Visibility == Visibility.Collapsed) { divLayer.Height = gridTitle.Height; } else { divLayer.Height = gridTitle.Height + spLayer.Height; } }); // 레이어스타일 Renderer 초기화 - shape방식에서만 사용함 //InitUniqueValueRenderer(); levelCmd = new RelayCommand <object>(delegate(object obj) { MessageBox.Show("MapScale - " + mapView.MapScale); }); //GIS초기화 resetCmd = new RelayCommand <object>(delegate(object obj) { //0.맵초기화 InitMap(); //1.로컬서버 재기동 //Initialize_LocalServer(); //2.레이어 클리어 mapView.Map.OperationalLayers.Clear(); //3.열여있는 시설물정보창 닫기 popFct.IsOpen = false; TreeView treeLayer = obj as TreeView; //레이어div 체크해제 foreach (CheckBox cb in FmsUtil.FindVisualChildren <CheckBox>(treeLayer)) { cb.IsChecked = false; } //선택된레이어 해제 _selectedFeature = null; try { CmmRun.layers[_selectedLayerNm].ClearSelection(); } catch (Exception) { } _selectedLayerNms.Clear(); _selectedLayerNm = ""; // 행정구역 표시 ShowLocalServerLayer(mapView, "BML_GADM_AS", true); //ShowShapeLayer(mapView, "BML_GADM_AS", true); }); //시설물팝업에서 시설물메뉴화면 호출작업 CallPageCmd = new RelayCommand <object>(delegate(object obj) { FctDtl fctDtl = obj as FctDtl; IRegionManager regionManager = FmsUtil.__regionManager; ViewsCollection views = regionManager.Regions["ContentRegion"].ActiveViews as ViewsCollection; foreach (var v in views) { MapArcObjView mapMainView = v as MapArcObjView; //MainWinViewModel vm = ((System.Windows.Controls.Grid)((ContentControl)mapMainView.Parent).Parent).DataContext as MainWinViewModel; break; } }); //시설물편집창 EditCmd = new RelayCommand <object>(delegate(object obj) { EditWinView view = new EditWinView(); if (view.ShowDialog() is bool) { //재조회 } }); //도형클리어처리 clearCmd = new RelayCommand <object>(delegate(object obj) { // Remove all graphics from the graphics overlay _sketchOverlay.Graphics.Clear(); // Disable buttons that require graphics ClearButton.IsEnabled = false; }); completeCmd = new RelayCommand <object>(async delegate(object obj) { mapView.SketchEditor.Stop(); //추가된 도형 저장처리 //_selectedFeature.Geometry = _geometry; // Apply the edit to the feature table. await _selectedFeature.FeatureTable.UpdateFeatureAsync(_selectedFeature); _selectedFeature.Refresh(); MessageBox.Show("Added feature ", "Success!"); }); }
public EditWinViewModel() { //string licenseKey = "runtimelite,1000,rud1244207246,none,9TJC7XLS1MJPF5KHT033"; //그린텍 //string licenseKey = "runtimelite,1000,rud9177830334,none,A3E60RFLTFM5NERL1040"; //kyun0828 free //ArcGISRuntimeEnvironment.SetLicense(licenseKey); LoadedCommand = new RelayCommand <object>(delegate(object obj) { // 0.뷰객체를 파라미터로 전달받기 editWinView = obj as EditWinView; this.mapView = editWinView.FindName("mapView") as MapView; // 1.지도초기화 InitMap(); //레이어초기화 initLayers(); //렌더러초기생성작업 CmmRun.InitUniqueValueRenderer(); // 2.화면 및 콤보초기화 cbFTR_CDE = editWinView.cbFTR_CDE; BizUtil.SetCombo(cbFTR_CDE, "Select_FTR_LIST", "FTR_CDE", "FTR_NAM", "선택"); cbFTR_CDE.EditValueChanged += cbFTR_CDEHandler; //콤보변경핸들러 //비트맵초기화(시설물상세DIV 아이콘) BitImg = new BitmapImage(); mapView.SketchEditor.GeometryChanged += OnGeometryChanged; mapView.SketchEditor.SelectedVertexChanged += OnSelectedVertexChanged; }); //시설물조회 후 해당레이어 표시 SearchCommand = new RelayCommand <object>(delegate(object obj) { if (FmsUtil.IsNull(FTR_CDE)) { Messages.ShowInfoMsgBox("시설물을 선택하세요."); return; } //기존항목 초기화 ResetLayer(); //기존페이지 초기화 InitPage(cbFTR_CDE.EditValue.ToString(), null, null); SearchLayer(obj); }); //아이콘변경 (파일찾기) ChgImgCmd = new RelayCommand <object>(delegate(object obj) { // 전달된 파라미터 if (obj == null) { Messages.ShowErrMsgBox("시설물코드가 존재하지 않습니다."); return; } string _FTR_CDE = obj as string; // UniqueValueRenderer 자원해제 //uniqueValueRenderer = new UniqueValueRenderer(); //layers[_selectedLayerNm].ResetRenderer(); // 파일탐색기 열기 OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Multiselect = false; openFileDialog.Filter = "All files (*.*)|*.*"; openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); if (openFileDialog.ShowDialog() == true) { //아이콘 파일경로 string icon_foler = Path.Combine(BizUtil.GetDataFolder(), "style_img"); FileInfo[] files = openFileDialog.FileNames.Select(f => new FileInfo(f)).ToArray(); //파일인포 foreach (FileInfo fi in files) { try { //해당이미지파일을 FTR_CDE ex)SA117 이름의파일로 복사 fi.CopyTo(Path.Combine(icon_foler, _FTR_CDE), true); } catch (Exception ex) { Messages.ShowErrMsgBox(ex.Message); } finally { //1.렌더러 재구성 CmmRun.InitUniqueValueRenderer(); //2.레이어의 렌더러 재세팅 foreach (string sel in _selectedLayerNms) { layers[sel].Renderer = CmmRun.uniqueValueRenderer.Clone(); layers[sel].RetryLoadAsync(); } //3.팝업이미지소스 업데이트 BitImg = new BitmapImage(new Uri(Path.Combine(Path.Combine(BizUtil.GetDataFolder(), "style_img"), _FTR_CDE))).Clone(); } } } }); AddCmd = new RelayCommand <object>(async delegate(object obj) { if (_selectedLayerNms.Count < 1) { MessageBox.Show("시설물을 선택하세요."); return; } else if (_selectedLayerNms.Count > 1) { MessageBox.Show("시설물을 하나만 선택하세요."); return; } //Polygon 피처인 경우 - SketchEditor 를 GraphicOverlay에 생성한다 //라인피처인 경우 - SketchEditor 를 GraphicOverlay에 생성한다 if (_selectedLayerNm.Equals("WTL_PIPE_LM") || _selectedLayerNm.Equals("WTL_SPLY_LS") || _selectedLayerNm.Equals("WTL_PURI_AS") || _selectedLayerNm.Equals("WTL_LBLK_AS") || _selectedLayerNm.Equals("WTL_MBLK_AS") || _selectedLayerNm.Equals("WTL_SBLK_AS")) { try { SketchCreationMode creationMode = SketchCreationMode.Polyline; Symbol symbol; if (_selectedLayerNm.Equals("WTL_PURI_AS") || _selectedLayerNm.Equals("WTL_LBLK_AS") || _selectedLayerNm.Equals("WTL_MBLK_AS") || _selectedLayerNm.Equals("WTL_SBLK_AS")) { creationMode = SketchCreationMode.Polygon; symbol = new SimpleFillSymbol() { Color = System.Drawing.Color.SkyBlue, Style = SimpleFillSymbolStyle.Solid }; } else if (_selectedLayerNm.Equals("WTL_PIPE_LM")) { creationMode = SketchCreationMode.Polyline; symbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.SkyBlue, 2); } else { creationMode = SketchCreationMode.Polyline; symbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.SkyBlue, 2); } MessageBox.Show("시설물을 추가할 지점을 마우스로 클릭하세요.(편집완료는 더블클릭)"); // Let the user draw on the map view using the chosen sketch mode Esri.ArcGISRuntime.Geometry.Geometry geometry = await mapView.SketchEditor.StartAsync(creationMode, false); //맵에 신규geometry 얻어오기 //화면에 그래픽표시(참고용) Graphic graphic = new Graphic(geometry, symbol); _sketchOverlay.Graphics.Add(graphic); // 0.화면초기화 editWinView.txtFTR_IDN.EditValue = ""; //FTR_IDN = "" NEW_FTR_IDN = ""; //선택된레이어 해제 _selectedFeature = null; try { layers[_selectedLayerNm].ClearSelection(); } catch (Exception) { } //신규시설물 페이지전환 InitPage(cbFTR_CDE.EditValue.ToString(), FTR_CDE, null); // 1.레이어에 위치추가 AddFeatureToLayer(geometry); // 2.시설물DB 저장 Messages.ShowInfoMsgBox("위치정보가 추가되었습니다. 해당시설물의 상세정보를 저장하세요"); } catch (TaskCanceledException) { // Ignore ... let the user cancel drawing } catch (Exception ex) { // Report exceptions MessageBox.Show("Error drawing graphic shape: " + ex.Message); } } //포인트피처의 경우는 클릭핸들러만 추가함 else { ////화면초기화 editWinView.txtFTR_IDN.EditValue = ""; //FTR_IDN = "" NEW_FTR_IDN = ""; //선택된레이어 해제 _selectedFeature = null; try { layers[_selectedLayerNm].ClearSelection(); } catch (Exception) { } ////신규시설물 페이지전환 InitPage(cbFTR_CDE.EditValue.ToString(), FTR_CDE, null); //추가처리 탭핸들러 추가 mapView.GeoViewTapped -= handlerGeoViewTappedMoveFeature; mapView.GeoViewTapped -= handlerGeoViewTapped; mapView.GeoViewTapped += handlerGeoViewTappedAddFeature; MessageBox.Show("시설물을 추가할 지점을 마우스로 클릭하세요."); } }); EditCmd = new RelayCommand <object>(delegate(object obj) { if (_selectedFeature == null) { MessageBox.Show("시설물을 선택하세요."); return; } MessageBox.Show("이동할 지점을 마우스로 클릭하세요."); //이동처리 탭핸들러 추가 mapView.GeoViewTapped -= handlerGeoViewTappedAddFeature; mapView.GeoViewTapped -= handlerGeoViewTapped; mapView.GeoViewTapped += handlerGeoViewTappedMoveFeature; }); DelCmd = new RelayCommand <object>(OnDelCmd); //레이어 ON/OFF chkCmd = new RelayCommand <object>(delegate(object obj) { Button doc = obj as Button; CheckBox chkbox = doc.Template.FindName("chkLayer", doc) as CheckBox; bool chk = (bool)chkbox.IsChecked; //레이어표시 - FTR_IDN 조건 필터링없음 ShowShapeLayerFilter(mapView, doc.Tag.ToString(), chk, null); //조회된 피처 자동선택 string ftr_cde = doc.Tag.ToString() == "WTL_PIPE_LM" ? "SA001" : "SA002"; SelectFct(ftr_cde, "", layers[doc.Tag.ToString()]); }); }