public async Task <bool> CreateService(string serviceName, string serviceType, string version, IEnumerable <string> files) { bool ret = false; string url = null; if (string.IsNullOrEmpty(serviceName) || string.IsNullOrEmpty(serviceType) || string.IsNullOrEmpty(version) || files == null || files.Count() == 0) { return(ret); } bool isExisted = await ExistedService(serviceName, serviceType, version); if (isExisted) { return(ret); } string href = JsonSettings.DefaultSettings.GetValue <string>("href"); string capabilitiesPath = null; IOgcService ogcService = OgcServiceHelper.GetOgcService(serviceType, version); Dictionary <string, string> layerNameAndPathes = new Dictionary <string, string>(); if (ogcService is IWmtsService wmts1Service) { href = $"{href}/SharpMapServer/Services/{serviceName}/MapServer/Wmts"; Capabilities capabilities = wmts1Service.CreateCapabilities(href); string directory = null; foreach (var file in files) { if (directory == null) { directory = Path.GetDirectoryName(file); } LayerType layerType = wmts1Service.AddContent(capabilities, file); string name = Path.GetFileNameWithoutExtension(file); layerNameAndPathes[name] = file; } capabilitiesPath = Path.Combine(directory, "WMTSCapabilities.xml"); using (StreamWriter sw = new StreamWriter(capabilitiesPath)) { wmts1Service.XmlSerialize(sw, capabilities); } url = $"{href}/1.0.0/WMTSCapabilities.xml"; } else { return(ret); } ret = await AddServiceRecord(serviceName, serviceType, version, capabilitiesPath); ServiceRecord serviceRecord = await GetServiceRecord(serviceName, serviceType, version); foreach (var item in layerNameAndPathes) { bool result = await AddLayerRecord(serviceRecord, item.Key, item.Value); } if (!ret) { File.Delete(capabilitiesPath); } return(ret); }
protected IWmtsService GetWmts1Service(string version = "1.0.0") { string serviceType = "WMTS"; IWmtsService wmts1Service = OgcServiceHelper.GetOgcService(serviceType, version) as IWmtsService; return(wmts1Service); }
public async Task <IActionResult> Create([Bind("Type,Version,Path,Name,Id")] ServiceRecord serviceRecord) { if (ModelState.IsValid) { bool ret = await OgcServiceHelper.CreateCapabilities(serviceRecord.Type, serviceRecord.Version, serviceRecord.Name); if (ret) { return(RedirectToAction(nameof(Index))); } } return(View(serviceRecord)); }
public async Task <IActionResult> DeleteConfirmed(int id) { LayerRecord layerRecord = await ConfigContext.Layers.FindAsync(id); if (layerRecord == null) { return(NotFound("未找到图层")); } ServiceRecord serviceRecord = await ConfigContext.Services.FindAsync(layerRecord.ServiceId); if (serviceRecord == null) { return(StatusCode(500)); } string capabilitiesPath = ServicePathManager.GetCapabilitiesPath(serviceRecord.Type, serviceRecord.Version, serviceRecord.Name); await OgcServiceHelper.RemoveLayerFromCapabilities(serviceRecord, capabilitiesPath, layerRecord); return(RedirectToAction(nameof(Index))); }
// GET: Services/Details/5 public async Task <IActionResult> Details(int?id) { if (id == null) { return(NotFound()); } ServiceRecord serviceRecord = await ConfigContext.Services.FindAsync(id); if (serviceRecord == null) { return(NotFound()); } else { string href = GetHref(); string routTemplate = OgcServiceHelper.GetRoutTemplate <WmtsController>("GetCapabilities"); routTemplate = routTemplate.Replace("{serviceName}", serviceRecord.Name); routTemplate = routTemplate.Replace("{version}", serviceRecord.Version); routTemplate = string.Join("/", routTemplate.Split("/").Select(s => System.Net.WebUtility.UrlEncode(s))); string url = $"{href}/{routTemplate}"; return(Redirect(url)); } }
public async Task <IActionResult> Upload([FromForm] IFormCollection formData) { string error = null; var files = formData.Files; long size = files.Sum(f => f.Length); if (!Request.Form.ContainsKey("ServiceId")) { error = "参数未包含ServiceId"; return(BadRequest(error)); } StringValues values = Request.Form["ServiceId"]; if (values.Count == 0) { error = "参数未包含ServiceId"; return(BadRequest(error)); } bool ret = int.TryParse(values[0], out int serviceId); if (!ret) { error = "ServiceId错误"; return(BadRequest(error)); } ServiceRecord serviceRecord = await ConfigContext.Services.FindAsync(serviceId); if (serviceRecord == null) { error = "未找到指定的服务"; return(BadRequest(error)); } string capabilitiesPath = ServicePathManager.GetCapabilitiesPath(serviceRecord.Type, serviceRecord.Version, serviceRecord.Name); if (!System.IO.File.Exists(capabilitiesPath)) { error = "服务器内部错误:未找到元数据"; return(BadRequest(error)); } string tempDirectory = Path.GetTempPath(); if (!Directory.Exists(tempDirectory)) { Directory.CreateDirectory(tempDirectory); } foreach (var formFile in files) { if (formFile.Length > 0) { string zipNameWithExtension = Path.GetFileName(formFile.FileName); string zipName = Path.GetFileNameWithoutExtension(formFile.FileName); string tempZipPath = Path.Combine(tempDirectory, zipNameWithExtension);//zip临时路径 using (var stream = System.IO.File.Create(tempZipPath)) { await formFile.CopyToAsync(stream); } string tempZipDirectory = Path.Combine(tempDirectory, zipName);//zip临时解压目录 ZipUtil.UnZip(tempZipPath, tempZipDirectory); List <string> srcFileNames = GetSupportFileNames(tempZipDirectory); string destDirectory = ServicePathManager.GetServiceDirectory(serviceRecord.Type, serviceRecord.Version, serviceRecord.Name); if (!Directory.Exists(destDirectory)) { Directory.CreateDirectory(destDirectory); } foreach (var srcFileName in srcFileNames) { string destNameWithExtension = Path.GetFileName(srcFileName); string destFileName = Path.Combine(destDirectory, destNameWithExtension); OgcServiceHelper.MoveDataSet(srcFileName, destFileName); ret = OgcServiceHelper.AddLayerToCapabilities(serviceRecord, capabilitiesPath, destFileName); if (!ret) { OgcServiceHelper.DeleteDataSet(destFileName); } } Directory.Delete(tempZipDirectory, true); System.IO.File.Delete(tempZipPath); } } int result = await ConfigContext.SaveChangesAsync(); return(Ok()); }
static void TestWmts() { XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides(); XmlAttributes ddsAttrs = new XmlAttributes(); XmlElementAttribute layerAttr = new XmlElementAttribute { ElementName = "Layer", Type = typeof(LayerType) }; ddsAttrs.XmlElements.Add(layerAttr); attrOverrides.Add(typeof(ContentsBaseType), "DatasetDescriptionSummary", ddsAttrs); #region ServiceIdentification LanguageStringType[] titles = new LanguageStringType[] { new LanguageStringType() { Value = "Web Map Tile Service" } }; LanguageStringType[] abstracts = new LanguageStringType[] { new LanguageStringType() { Value = "Service that contrains the map access interface to some TileMatrixSets" } }; LanguageStringType[] keyword1 = new LanguageStringType[] { new LanguageStringType() { Value = "tile" } }; KeywordsType keywordsType1 = new KeywordsType() { Keyword = keyword1 }; LanguageStringType[] keyword2 = new LanguageStringType[] { new LanguageStringType() { Value = "map" } }; KeywordsType keywordsType2 = new KeywordsType() { Keyword = keyword2 }; KeywordsType[] keywords = new KeywordsType[] { keywordsType1, keywordsType2 }; CodeType serviceType = new CodeType() { Value = "OGC WMTS" }; string[] serviceTypeVersion = new string[] { "1.0.0" }; string fees = "none"; string[] accessConstraints = new string[] { "none" }; ServiceIdentification serviceIdentification = new ServiceIdentification() { Title = titles, Abstract = abstracts, Keywords = keywords, ServiceType = serviceType, ServiceTypeVersion = serviceTypeVersion, Fees = fees, AccessConstraints = accessConstraints }; #endregion string href = "http://123"; #region ServiceProvider string poroviderName = "SharpMapServer"; OnlineResourceType providerSiteType = new OnlineResourceType() { href = href }; string[] voices = new string[] { "0000-00000000" }; string[] facsimiles = new string[] { "0001-00000001" }; TelephoneType phone = new TelephoneType() { Voice = voices, Facsimile = facsimiles }; string[] deliveryPoints = new string[] { "jinjiang" }; string city = "chengdu"; string administrativeArea = "sichuan"; string country = "china"; string[] electronicMailAddress = new string[] { "*****@*****.**" }; string postalCode = "123456"; AddressType address = new AddressType() { DeliveryPoint = deliveryPoints, City = city, AdministrativeArea = administrativeArea, Country = country, ElectronicMailAddress = electronicMailAddress, PostalCode = postalCode }; ContactType contactInfo = new ContactType() { Phone = phone, Address = address }; string individualName = "lc"; string positionName = "Senior Software Engineer"; ResponsiblePartySubsetType serviceContact = new ResponsiblePartySubsetType() { IndividualName = individualName, PositionName = positionName, ContactInfo = contactInfo }; ServiceProvider serviceProvider = new ServiceProvider() { ProviderName = poroviderName, ProviderSite = providerSiteType, ServiceContact = serviceContact }; #endregion #region OperationsMetadata Operation getCapabilitiesOperation = CapabilitiesHelper.GetOperation(href, "GetCapabilities"); Operation getTileOperation = CapabilitiesHelper.GetOperation(href, "GetTile"); Operation getFeatureinfoOperation = CapabilitiesHelper.GetOperation(href, "GetFeatureinfo"); Operation[] operations = new Operation[] { getCapabilitiesOperation, getTileOperation, getFeatureinfoOperation }; OperationsMetadata operationsMetadata = new OperationsMetadata() { Operation = operations }; #endregion Capabilities capabilities = new Capabilities() { ServiceIdentification = serviceIdentification, ServiceProvider = serviceProvider, OperationsMetadata = operationsMetadata }; IWmtsService wmts1Service = OgcServiceHelper.GetOgcService("WMTS", "1.0.0") as IWmtsService; wmts1Service.AddContent(capabilities, @"E:\LC\数据\双流\2014年遥感影像.img"); List <object> objs = new List <object>(); capabilities.Themes = new Themes[] { new Themes() { Theme = new Theme[] { new Theme() { Identifier = new CodeType() { Value = "123" } } } } }; objs.Add(capabilities); StringBuilder sb = new StringBuilder(); using (TextWriter tw = new StringWriter(sb)) { foreach (var item in objs) { if (item == null) { continue; } var serializer = new XmlSerializer(item.GetType(), attrOverrides); serializer.Serialize(tw, item); var val = sb.ToString(); File.WriteAllText("123.xml", val); sb.Clear(); } } }