/// <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);
        }
示例#2
0
        /// <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);
        }
示例#6
0
        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);
            }
        }