Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }