Ejemplo n.º 1
0
        /*
         *  VALUECOUNT = 2         //default:0
         *  VALUES = "{0,1}"       //
         *  VALUENAMES             //
         *  SPATIALREF=Proj4                  //default:wgs-84
         *  MAPINFO={X,Y}:{Col,Row}:{ResolutionX,ResolutionY} //default:null
         *  WITHHDR=[TRUE|FALSE]      //default:true
         */
        public override IRasterDataProvider Create(string fileName, int xSize, int ySize, int bandCount, enumDataType dataType, params object[] options)
        {
            ISpatialReference spatialRef;
            MvgHeader         mvgHeader;
            HdrMapInfo        mapInfo = null;
            bool  isWithHdr           = true;
            Int16 valueCount          = 0;

            Int16[]  values     = null;
            string[] valueNames = null;
            using (FileStream fileStream = new FileStream(fileName, FileMode.Create))
            {
                ParserMvgHeaderParams(options, out spatialRef, out mapInfo, out isWithHdr, out valueCount, out values, out valueNames);
                mvgHeader = CreateMvgHeader(xSize, ySize, spatialRef, mapInfo, valueCount, values, valueNames);
                int headerSize = mvgHeader.HeaderSize;
                int fileLength = mvgHeader.HeaderSize + xSize * ySize * bandCount * DataTypeHelper.SizeOf(enumDataType.Int16);
                fileStream.SetLength(fileLength);
                fileStream.Write(mvgHeader.ToBytes(), 0, headerSize);
            }
            if (isWithHdr)
            {
                mvgHeader.ToHdrFile().SaveTo(HdrFile.GetHdrFileName(fileName));
            }
            IGeoDataProvider provider = BuildDataProviderByArgs(fileName, enumDataProviderAccess.Update, mvgHeader);

            return(provider as IRasterDataProvider);
        }
Ejemplo n.º 2
0
        void item_Click(object sender, EventArgs e)
        {
            RadMenuItem item = sender as RadMenuItem;

            if (item == null)
            {
                return;
            }
            IGeoDataDriver driver = item.Tag as IGeoDataDriver;

            if (driver == null)
            {
                return;
            }
            using (OpenFileDialog diag = new OpenFileDialog())
            {
                diag.Title = "文件打开为" + driver.FullName;
                if (diag.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        IGeoDataProvider provider = driver.Open(diag.FileName, enumDataProviderAccess.ReadOnly);
                        if (provider == null)
                        {
                            return;
                        }
                        OpenDataProvider(provider);
                    }
                    catch (Exception ex)
                    {
                        MsgBox.ShowInfo("无法识别为该驱动的文件" + driver.FullName);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public unsafe IExtractResult Do(string productIdentify, string subProductIdentify, IRasterDataProvider dataProvider, string filename, out string error)
        {
            error = string.Empty;
            if (!CanDo(productIdentify, subProductIdentify, filename, out error))
            {
                return(null);
            }
            if (_transDef == null)
            {
                _transDef = (new MVGXMLParser()).GetTransDef();
            }
            ProductDef       product    = _transDef.GetProductBySmartProductIdentify(productIdentify);
            SubProductDef    subProduct = product.GetSubProductBySmartIdentfy(subProductIdentify);
            IGeoDataProvider provider   = GeoDataDriver.Open(filename, enumDataProviderAccess.ReadOnly, null);

            if (provider != null)
            {
                MvgDataProvider mvgProvider = provider as MvgDataProvider;
                if (mvgProvider == null)
                {
                    error = "MVG转换尚不支持文件【" + Path.GetFileName(filename) + "】!";
                    return(null);
                }
                float  xResolution = dataProvider.ResolutionX, mvgXResolution = (float)mvgProvider.CoordEnvelope.Width / mvgProvider.Width;
                float  yResolution = dataProvider.ResolutionY, mvgYResolution = (float)mvgProvider.CoordEnvelope.Height / mvgProvider.Height;
                int    width = dataProvider.Width, mvgWidth = mvgProvider.Width;
                double minX = dataProvider.CoordEnvelope.MinX, mvgMinX = mvgProvider.CoordEnvelope.MinX;
                double maxY = dataProvider.CoordEnvelope.MaxY, mvgMaxY = mvgProvider.CoordEnvelope.MaxY;
                int    xIndex = 0;
                int    yIndex = 0;
                if (dataProvider.DataType == enumDataType.UInt16)
                {
                    Int16[] dataBlock = new Int16[mvgProvider.Width * mvgProvider.Height];
                    fixed(Int16 *buffer = dataBlock)
                    {
                        IntPtr ptr = new IntPtr(buffer);

                        mvgProvider.Read(0, 0, mvgProvider.Width, mvgProvider.Height, ptr, enumDataType.Int16, mvgProvider.Width, mvgProvider.Height, 1, new int[] { 1 }, enumInterleave.BSQ);
                    }

                    Dictionary <Int16, Int16>    dic     = subProduct.GetTableDic <Int16, Int16>();
                    IPixelIndexMapper            map     = PixelIndexMapperFactory.CreatePixelIndexMapper(productIdentify + "_" + subProductIdentify, width, dataProvider.Height, dataProvider.CoordEnvelope, dataProvider.SpatialRef);
                    RasterPixelsVisitor <UInt16> visitor = new RasterPixelsVisitor <UInt16>(new ArgumentProvider(dataProvider, null));
                    visitor.VisitPixel(new int[] { 1 }, (index, values) =>
                    {
                        xIndex = (int)Math.Round((minX + (index % width * xResolution) - mvgMinX) / mvgXResolution);
                        yIndex = (int)Math.Round((mvgMaxY - (maxY - (index / width * yResolution))) / mvgYResolution);
                        if (xIndex >= 0 && yIndex >= 0 && yIndex * mvgWidth + xIndex < dataBlock.Length)
                        {
                            if (dic.ContainsKey(dataBlock[yIndex * mvgWidth + xIndex]))
                            {
                                map.Put(index);
                            }
                        }
                    });
                    return(map);
                }
            }
            return(null);
        }
Ejemplo n.º 4
0
        private void OpenDataProvider(IGeoDataProvider provider)
        {
            if (provider is IRasterDataProvider)
            {
                string fname = (provider as IRasterDataProvider).fileName;

                CanvasViewer cv = new CanvasViewer(OpenFileFactory.GetTextByFileName(fname), _session);
                cv.Tag = fname;
                _session.SmartWindowManager.DisplayWindow(cv);
                RasterLayerBuilder.CreateAndLoadRasterLayer(_session, cv.Canvas, fname);
            }
        }
Ejemplo n.º 5
0
        public override IRasterDataProvider Create(string fileName, int xSize, int ySize, int bandCount, enumDataType dataType, params object[] options)
        {
            ISpatialReference spatialRef;
            CoordEnvelope     coordEnvelope;
            bool       isWithHdr;
            int        extHeaderSize = 0;
            HdrMapInfo mapInfo;

            ParseOptions(xSize, ySize, options, out spatialRef, out coordEnvelope, out mapInfo, out isWithHdr, out extHeaderSize);
            MemoryRasterHeader h = GetHeader(spatialRef, coordEnvelope);

            h.BandCount          = bandCount;
            h.DataType           = (int)dataType;
            h.Width              = xSize;
            h.Height             = ySize;
            h.ExtendHeaderLength = extHeaderSize;
            byte[] headerBytes = new byte[1024];
            using (FileStream fs = new FileStream(fileName, FileMode.Create))
            {
                int      headerSize = Marshal.SizeOf(typeof(MemoryRasterHeader));
                byte[]   buffer     = new byte[headerSize];
                GCHandle handle     = GCHandle.Alloc(buffer, GCHandleType.Pinned);
                Marshal.StructureToPtr((object)h, handle.AddrOfPinnedObject(), true);
                handle.Free();
                fs.SetLength(headerSize + extHeaderSize + (long)xSize * (long)ySize * (long)bandCount * (long)DataTypeHelper.SizeOf(dataType));
                fs.Write(buffer, 0, buffer.Length);
                fs.Seek(0, SeekOrigin.Begin);
                fs.Read(headerBytes, 0, (int)Math.Min(headerBytes.Length, fs.Length));
            }

            HdrFile hdrFile = h.ToHdrFile();

            if (spatialRef != null)
            {
                hdrFile.HdrProjectionInfo = GetHdrProjectionInfo(spatialRef);
            }
            if (mapInfo != null)
            {
                hdrFile.MapInfo = mapInfo;
            }

            hdrFile.SaveTo(HdrFile.GetHdrFileName(fileName));
            IGeoDataProvider provider = BuildDataProvider(fileName, headerBytes, enumDataProviderAccess.Update, options);

            return(provider as IRasterDataProvider);
        }
Ejemplo n.º 6
0
 public static IGeoDataProvider Open(string fileName, enumDataProviderAccess access, params string[] args)
 {
     IGeoDataDriver[] drivers = DriverFinder.RegisteredDrivers;
     if (drivers == null || drivers.Length == 0)
     {
         throw new DriverListIsEmptyException();
     }
     byte[] head1024 = GetHeader1024Bytes(fileName);
     foreach (IGeoDataDriver driver in drivers)
     {
         IGeoDataProvider prd = driver.Open(fileName, head1024, access, args);
         if (prd != null)
         {
             return(prd);
         }
     }
     throw new NoMatchedDirverException();
 }
Ejemplo n.º 7
0
        protected ControllerBase(IGeoDataProvider dataProvider, IAppLogger appLogger, IResultsMapper resultsMapper)
        {
            if (dataProvider == null)
            {
                throw new ArgumentNullException(nameof(dataProvider));
            }

            DataProvider = dataProvider;

            if (appLogger == null)
            {
                throw new ArgumentNullException(nameof(appLogger));
            }

            AppLogger = appLogger;

            if (resultsMapper == null)
            {
                throw new ArgumentNullException(nameof(resultsMapper));
            }

            ResultsMapper = resultsMapper;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Instantiates a ServiceCache
        /// </summary>
        /// <param name="cacheDuration">The cache expiration timespan (i.e., how long data should be cached for) (required)</param>
        /// <param name="geoDataProvider">The IGeoDataProvder instance whose data is being cached (required)</param>
        /// <param name="logger">(required)</param>
        /// <param name="stringComparer">(required)</param>
        /// <param name="minDataProviderResults">The minimum maxResults value that will be passed to this cache's IGeoDatProvider</param>
        public ServiceCache(TimeSpan cacheDuration, IGeoDataProvider geoDataProvider, IAppLogger logger, IEqualityComparer <string> stringComparer, int minDataProviderResults = 50)
        {
            if (geoDataProvider == null)
            {
                throw new ArgumentNullException(nameof(geoDataProvider));
            }

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            if (stringComparer == null)
            {
                throw new ArgumentNullException(nameof(stringComparer));
            }

            DataProvider           = geoDataProvider;
            CacheDuration          = cacheDuration;
            StringComparer         = stringComparer;
            Entries                = new Dictionary <ServiceCacheKey, IQueryable <GeoDataEntry> >();
            Logger                 = logger;
            DataProviderMinResults = minDataProviderResults;
        }
Ejemplo n.º 9
0
 public HospitalsController(IGeoDataProvider geoDataProvider, IAppLogger appLogger,
                            IResultsMapper resultsMapper) : base(geoDataProvider, appLogger, resultsMapper)
 {
 }