Beispiel #1
0
        public static IOgcService GetOgcService(OgcServiceType serviceType, string serviceVersion)
        {
            IOgcService ogcService = null;

            if (string.IsNullOrWhiteSpace(serviceVersion))
            {
                return(ogcService);
            }
            switch (serviceType)
            {
            case OgcServiceType.Wfs:
                switch (serviceVersion)
                {
                case "2.0.0":
                    //serviceFasctory = new DsWfs2ServiceFactory();
                    break;
                }
                break;

            case OgcServiceType.Wcs:
                switch (serviceVersion)
                {
                case "2.0.0":
                    //serviceFasctory = new DsWfs2ServiceFactory();
                    break;
                }
                break;

            case OgcServiceType.Wmts:
                switch (serviceVersion)
                {
                case "1.0.0":
                    //DsWmts1ServiceFactory dsWmts1ServiceFactory = new DsWmts1ServiceFactory();
                    ogcService = new GdalWmtsService();
                    break;
                }
                break;

            case OgcServiceType.Wms:
                switch (serviceVersion)
                {
                case "2.0.0":
                    //serviceFasctory = new DsWfs2ServiceFactory();
                    break;
                }
                break;
            }
            return(ogcService);
        }
        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);
        }