/// <summary> /// 刷新地图 /// </summary> /// <param name="mapId">地图编号</param> /// <returns></returns> public bool RefreshMap(string mapId, string user) { var query = from a in _IMapReleationRepository.GetAll() join b in _ILayerContentRepository.GetAll() on a.DataConfigID equals b.Id join c in _IMapRepository.GetAll() on a.MapID equals c.Id where a.MapID == mapId orderby a.DataSort select new { a.Id, b.LayerAttrTable, c.MapEnName }; var query2 = from a in _IMapReleationRepository.GetAll() join b in _IDataStyleRepository.GetAll() on a.DataStyleID equals b.Id select new { a.Id, b.StyleName }; var list = query2.ToList(); List <string> targetLayers = new List <string>(); List <string> styleLayers = new List <string>(); string mapName = string.Empty; foreach (var item in query) { targetLayers.Add(item.LayerAttrTable); var style = list.Find(t => t.Id == item.Id); if (style != null) { styleLayers.Add(style.StyleName); } else { styleLayers.Add(string.Empty); } mapName = item.MapEnName; } var map = _IMapRepository.Get(mapId); GeoServerHelper geoHelp = new GeoServerHelper(); geoHelp.AddLayerGroup(mapName, targetLayers, styleLayers); geoHelp.TerminatingTask(mapName); geoHelp.TileMap(map.MapEnName); #region [生成缩略图] string strBBox = map.MinX.ToString() + "," + map.MinY.ToString() + "," + map.MaxX.ToString() + "," + map.MaxY.ToString(); GetThumbnial(map.MapEnName, strBBox); #endregion _IOperateLogAppService.WriteOperateLog(mapId, user, 1002, 1106, 1201, 1451, null); return(true); }
/// <summary> /// 删除地图 /// </summary> /// <param name="mapName">地图名称</param> /// <param name="workSpace">工作区名称</param> public bool DeleteMap(string mapid) { MapEntity map = _IMapRepository.Get(mapid); if (map != null) { GeoServerHelper geoHelp = new GeoServerHelper(); geoHelp.EmptyTiles(map.MapEnName); return(geoHelp.DeleteLayerGroup(map.MapEnName)); } return(true); }
/// <summary> /// 改变图层组样式 /// </summary> /// <returns></returns> public bool ChangeStyleObject(StyleInputDto inputDto) { string mapid = inputDto.MapId; string layerStr = inputDto.LayerStr; string styleStr = inputDto.StyleStr; List <string> layersId = layerStr.Split(',').ToList(); List <string> stylesId = styleStr.Split(',').ToList(); GeoServerHelper geoHelp = new GeoServerHelper(); MapEntity map = _IMapRepository.Get(mapid); if (map != null && layersId != null && stylesId != null && layersId.Count == stylesId.Count) { var list1 = _ILayerContentRepository.GetAll().Where(t => layersId.Contains(t.Id)).Select(t => new { id = t.Id, name = t.LayerAttrTable }).ToList(); var list2 = _IDataStyleRepository.GetAll().Where(t => stylesId.Contains(t.Id)).Select(t => new { id = t.Id, name = t.StyleName }).ToList(); Dictionary <string, string> dic = new Dictionary <string, string>(); for (int i = 0; i < layersId.Count; i++) { string lid = layersId[i]; string sid = stylesId[i]; var l1 = list1.Find(t => t.id == lid); var s1 = list2.Find(t => t.id == sid); if (l1 != null) { string sName = string.Empty; if (s1 != null) { sName = s1.name; } if (!dic.ContainsKey(l1.name)) { dic.Add(l1.name, sName); } } } geoHelp.ModifyLayerGroup(map.MapEnName, dic.Keys, dic.Values); #region [生成缩略图] string strBBox = map.MinX.ToString() + "," + map.MinY.ToString() + "," + map.MaxX.ToString() + "," + map.MaxY.ToString(); GetThumbnial(map.MapEnName, strBBox); #endregion } return(true); }
/// <summary> /// 查询地图是否有切片任务 /// </summary> /// <param name="mapId"></param> /// <returns></returns> public bool IsExistTilesTask(string mapId) { var query = _IMapRepository.FirstOrDefault(m => m.Id == mapId); if (query != null) { GeoServerHelper geoHelp = new GeoServerHelper(); if (geoHelp.IsExistTilesTask(query.MapEnName)) { return(true); } } return(false); }
/// <summary> /// 发布地图 /// </summary> /// <param name="mapId">地图编号</param> /// <returns></returns> public bool PublicMap(string mapId) { var db = (InfoEarthFrameDbContext)_IMapReleationRepository.GetDbContext(); var main = db.DataMain.FirstOrDefault(p => p.Id == mapId); var mapLayer = db.LayerManagers.FirstOrDefault(p => p.DataMainID == mapId); var query = (from a in db.MapReleation join b in db.LayerContent on a.DataConfigID equals b.Id join c in db.Map on a.MapID equals c.Id where a.MapID == mapId orderby a.DataSort select new { a.Id, a.DataStyleID, b.LayerAttrTable, c.MapEnName }).ToList(); var sql = "select distinct s.id,s.stylename from sdms_map_releation r join sdms_datastyle s on s.id=r.datastyleid"; //var query2 = from a in _IMapReleationRepository.GetAll() // join b in _IDataStyleRepository.GetAll() on a.DataStyleID equals b.Id // select new // { // a.Id, // b.StyleName // }; var list = db.Database.SqlQuery <TempStyle>(sql).ToList(); List <string> targetLayers = new List <string>(); List <string> styleLayers = new List <string>(); string mapName = string.Empty; foreach (var item in query) { targetLayers.Add(item.LayerAttrTable); var style = list.Find(t => t.Id == item.DataStyleID); if (style != null) { styleLayers.Add(style.StyleName); } else { styleLayers.Add(string.Empty); } mapName = item.MapEnName; } var map = db.Map.FirstOrDefault(p => p.Id == mapId); GeoServerHelper geoHelp = new GeoServerHelper(); var flag = geoHelp.AddLayerGroup(mapName, targetLayers, styleLayers); if (flag) { //往TBL_LAYERMANAGER插入数据 if (mapLayer == null) { db.LayerManagers.Add(new Core.Tbl_LayerManager { CreateTime = DateTime.Now, DataMainID = mapId, DATASERVERKEY = mapName, Id = Guid.NewGuid().ToString(), PICTYPE = "png", SERVICETYPE = "GeoServer", URL = ConfigContext.Current.DefaultConfig["geoserver:WMS"], TEXT = main == null ? mapName : main.Name, }); } else { mapLayer.CreateTime = DateTime.Now; mapLayer.DATASERVERKEY = mapName; mapLayer.PICTYPE = "png"; mapLayer.SERVICETYPE = "GeoServer"; mapLayer.URL = ConfigContext.Current.DefaultConfig["geoserver:WMS"]; mapLayer.TEXT = main == null ? mapName : main.Name; db.Entry(mapLayer).State = EntityState.Modified; } /*操作频繁,效率太低*/ //string isAutoCache = ConfigurationManager.AppSettings.Get("IsAutoCache"); //if (!string.IsNullOrEmpty(isAutoCache) && isAutoCache == "1") //{ // geoHelp.TerminatingTask(mapName); // geoHelp.TileMap(map.MapEnName); //} #region [生成缩略图] string strBBox = ""; strBBox = map.MinX.ToString() + "," + map.MinY.ToString() + "," + map.MaxX.ToString() + "," + map.MaxY.ToString(); var thumbFilePath = GetThumbnial(map.MapEnName, strBBox); //上传缩略图到FTP var ftp = ConfigContext.Current.FtpConfig["Package"]; if (ftp == null) { //FTP配置不存在 throw new Exception("未找到[Name=Package]的FTP配置"); } using (var client = new FtpHelper(ftp)) { client.UploadFiles(new[] { thumbFilePath }, "Package\\" + mapId + "\\缩略图"); } var images = db.DataManageFile.Where(p => p.MainID == mapId && p.FolderName == "缩略图").ToList(); images.ForEach(p => { db.DataManageFile.Remove(p); }); var fileName = Path.GetFileName(thumbFilePath); var file = new DataManageFile { MainID = mapId, Id = Guid.NewGuid().ToString(), FolderName = "缩略图", FileName = fileName, Ext = Path.GetExtension(thumbFilePath), FileSize = (int)new FileInfo(thumbFilePath).Length, FileData = "Package\\" + mapId + "\\缩略图\\" + fileName, StorageTime = DateTime.Now }; db.DataManageFile.Add(file); main.ImagePath = file.FileData; db.Entry(main).State = EntityState.Modified; db.SaveChanges(); } #endregion return(true); }
public async Task <bool> UpdateMapBBox(string mapID) { try { var list = _IMapReleationRepository.GetAll().Where(q => q.MapID == mapID).ToList(); var map = _IMapRepository.Get(mapID); if (map != null && list != null && list.Count > 0) { Dictionary <string, decimal?> bbox = new Dictionary <string, decimal?>(); for (int i = 0; i < list.Count; i++) { var layer = _ILayerContentRepository.Get(list[i].DataConfigID); if (i == 0) { bbox.Add("MaxX", layer.MaxX); bbox.Add("MinX", layer.MinX); bbox.Add("MaxY", layer.MaxY); bbox.Add("MinY", layer.MinY); } else { if (layer.MaxX > bbox["MaxX"]) { bbox["MaxX"] = layer.MaxX; } if (layer.MaxY > bbox["MaxY"]) { bbox["MaxY"] = layer.MaxY; } if (layer.MinX < bbox["MinX"]) { bbox["MinX"] = layer.MinX; } if (layer.MinY < bbox["MinY"]) { bbox["MinY"] = layer.MinY; } } } map.MaxX = bbox["MaxX"]; map.MinX = bbox["MinX"]; map.MaxY = bbox["MaxY"]; map.MinY = bbox["MinY"]; await _IMapRepository.UpdateAsync(map); GeoServerHelper geoHelp = new GeoServerHelper(); string isAutoCache = ConfigurationManager.AppSettings.Get("IsAutoCache"); if (!string.IsNullOrEmpty(isAutoCache) && isAutoCache == "1") { geoHelp.TerminatingTask(map.MapEnName); geoHelp.TileMap(map.MapEnName); } string strBBox = map.MinX.ToString() + "," + map.MinY.ToString() + "," + map.MaxX.ToString() + "," + map.MaxY.ToString(); #region [生成缩略图] ThumbnailHelper tbh = new ThumbnailHelper(); string imagePath = tbh.CreateThumbnail(map.MapEnName, "map", strBBox); if (string.IsNullOrEmpty(imagePath)) { return(false); } else { return(true); } #endregion } return(true); } catch (Exception ex) { return(false); } }