public static LayerType AddToCapabilities(this DataSource dataSource, string name, Capabilities capabilities) { string projectionStr; double xMin, yMin, xMax, yMax; string tileMatrixSet = null; using (var layer = dataSource.GetLayerByIndex(0)) { string layerName = layer.GetName();//todo 调试是否乱码 using (var spatialReference = layer.GetSpatialRef()) { tileMatrixSet = spatialReference.GetAttrValue("GEOGCS", 0); var ret = spatialReference.ExportToWkt(out projectionStr); } layer.GetExtent(out xMin, out yMin, out xMax, out yMax); } int minZoom = 0; int maxZoom = 19; dataSource.GetSuitableZoom(ref minZoom, ref maxZoom); LayerType layerType = CapabilitiesHelper.AddToCapabilities(capabilities, name, projectionStr, xMin, yMin, xMax, yMax, minZoom, maxZoom); string href = capabilities.GetHref(WmtsOperationType.GetTile, WmtsRequestType.REST); URLTemplateType tileTemplate = CapabilitiesHelper.CreateTileResourceURL(href, name, tileMatrixSet); URLTemplateType featureInfoTemplate = CapabilitiesHelper.CreateFeatureInfoResourceURL(href, name, tileMatrixSet); layerType.ResourceURL = new URLTemplateType[] { tileTemplate, featureInfoTemplate }; return(layerType); }
public static LayerType AddToCapabilities(this Dataset dataset, string name, Capabilities capabilities) { string projectionStr = dataset.GetProjection(); dataset.GetExtent(out double xMin, out double yMin, out double xMax, out double yMax); int minLevel = 0; int maxLevel = 19; dataset.GetSuitableZoom(ref minLevel, ref maxLevel); LayerType layerType = CapabilitiesHelper.AddToCapabilities(capabilities, name, projectionStr, xMin, yMin, xMax, yMax, minLevel, maxLevel); string href = capabilities.GetHref(WmtsOperationType.GetTile, WmtsRequestType.REST); string tileMatrixSet = null; using (var spatialReference = dataset.GetSpatialReference()) { tileMatrixSet = spatialReference.GetAttrValue("GEOGCS", 0); } URLTemplateType tileTemplate = CapabilitiesHelper.CreateTileResourceURL(href, name, tileMatrixSet); layerType.ResourceURL = new URLTemplateType[] { tileTemplate }; return(layerType); }
public async Task <IActionResult> Preview(int?id, int width, int height) { if (id == null) { return(NotFound()); } var layerRecord = await ConfigContext.Layers .Include(l => l.Service) .FirstOrDefaultAsync(m => m.Id == id); if (layerRecord == null) { return(NotFound()); } ServiceRecord serviceRecord = layerRecord.Service; View view = new View(); OpenLayers.layer.BaseLayer baseLayer = null; switch (serviceRecord.Type) { case OgcServiceType.Wmts: GdalWmtsService gdalWmtsService = new GdalWmtsService(); string capabilitiesPath = ServicePathManager.GetCapabilitiesPath(serviceRecord.Type, serviceRecord.Version, serviceRecord.Name); Capabilities capabilities = null; using (StreamReader sr = new StreamReader(capabilitiesPath)) { capabilities = gdalWmtsService.XmlDeSerialize(sr); } LayerType layerType = capabilities.GetLayerType(layerRecord.Name); string format = layerType.Format.FirstOrDefault(); string destTileMatrixSetName = layerType.TileMatrixSetLink.FirstOrDefault()?.TileMatrixSet; TileMatrixSet tileMatrixSet = capabilities.GetTileMatrixSet(destTileMatrixSetName); double[] origin = tileMatrixSet.TileMatrix.FirstOrDefault()?.TopLeftCorner?.ToDoubleValues(); string[] matrixIds = tileMatrixSet.TileMatrix.Select(x => x.Identifier.Value).ToArray(); double[] resolutions = tileMatrixSet.GetResolutions(matrixIds).ToArray(); var bound = layerType.BoundingBox.FirstOrDefault(); double[] lowerCorner = bound.LowerCorner.ToDoubleValues(); double[] upperCorner = bound.UpperCorner.ToDoubleValues(); double xmin = lowerCorner[0]; double ymin = lowerCorner[1]; double xmax = upperCorner[0]; double ymax = upperCorner[1]; double[] extent = new double[] { xmin, ymin, xmax, ymax }; double centerX = (xmin + xmax) / 2; double centerY = (ymin + ymax) / 2; view.center = new double[] { centerX, centerY }; view.extent = extent; view.resolution = TileMatrixSet.GetSuitableResolution(resolutions.ToList(), xmin, ymin, xmax, ymax, width, height); view.minResolution = resolutions[resolutions.Length - 1]; view.maxResolution = resolutions[0]; if (!string.IsNullOrEmpty(tileMatrixSet.SupportedCRS)) { string[] array = tileMatrixSet.SupportedCRS.Split("EPSG"); if (array.Length > 0) { string epsg = array[array.Length - 1].Replace(":", ""); view.projection = $"EPSG:{epsg}"; } } WmtsTileGrid tileGrid = new WmtsTileGrid() { origin = origin, matrixIds = matrixIds, resolutions = resolutions, extent = extent }; OpenLayers.source.Wmts source = new OpenLayers.source.Wmts() { url = capabilities.GetHref(), layer = layerRecord.Name, tileGrid = tileGrid, matrixSet = destTileMatrixSetName, format = format }; baseLayer = new OpenLayers.layer.TileLayer() { source = source }; break; default: return(NotFound()); } Map map = new Map() { layers = new OpenLayers.layer.BaseLayer[] { baseLayer }, view = view }; return(new JsonResult(map)); //PreviewModel previewModel = new PreviewModel() //{ // Layers = new OpenLayers.layer.BaseLayer[] { baseLayer }, // View = view //}; //return View(previewModel); }