private void Run(RasterReader reader, CalculatorCity city, string folderPath)
        {
            RasterOp     rasterOp = new RasterOp(reader);
            Postion      pos      = reader.Coordinate(city.XCoord, city.YCoord);
            var          result   = rasterOp.Calculator(pos);
            RasterWriter writer   = new RasterWriter(folderPath, city.Name + "_高铁未通车", reader.RasterInfo);

            result.WriteRaster(writer, "TIFF");
        }
Esempio n. 2
0
        private void Run(object p)
        {
            Hashtable      para       = p as Hashtable;
            ContinuousWait wait       = para["wait"] as ContinuousWait;
            var            folderPath = para["folderPath"].ToString();

            try
            {
                string       preWorkSpace = Path.GetDirectoryName(_preRasterFilePath);
                string       preFileName  = Path.GetFileNameWithoutExtension(_preRasterFilePath);
                string       aftWorkSpace = Path.GetDirectoryName(_aftRasterFilePath);
                string       aftFileName  = Path.GetFileNameWithoutExtension(_aftRasterFilePath);
                RasterReader preReader    = new RasterReader(preWorkSpace, preFileName + ".tif");
                RasterReader aftReader    = new RasterReader(aftWorkSpace, aftFileName + ".tif");
                RasterOp     preOp        = new RasterOp(preReader);
                RasterOp     aftOp        = new RasterOp(aftReader);
                RasterOp     res          = preOp.Clone();
                res.Reset();
                for (int i = 0; i < preOp.Width; i++)
                {
                    for (int j = 0; j < preOp.Height; j++)
                    {
                        if (preOp.Read(i, j).HasValue)
                        {
                            float orgin = (float)preOp.Read(i, j);
                            float now   = (float)aftOp.Read(i, j);
                            if (Math.Abs(orgin) > 10e-5)
                            {
                                float rate = (now - orgin) / orgin;
                                res.Write(i, j, rate);
                            }
                        }
                    }
                }
                RasterWriter writer = new RasterWriter(folderPath, RasterName, preReader.RasterInfo);
                res.WriteRaster(writer, "TIFF");
                para["ret"] = true;
            }
            catch (Exception e)
            {
                _log.Error(e.GetType() + e.Message + e.StackTrace);
                para["ret"] = false;
            }
            finally
            {
                wait.CloseWait();
            }
        }
 private bool WriteTimeCostRaster(string folderPath)
 {
     try
     {
         //读取两个文件
         var      landReader = new RasterReader(folderPath, LandUse + ".tif");
         var      roadReader = new RasterReader(folderPath, TrafficRoad + ".tif");
         RasterOp landOp     = new RasterOp(landReader);
         RasterOp roadOp     = new RasterOp(roadReader);
         //取最小值
         landOp.Overlay(roadOp, RasterAlgorithm.MinPixel);
         ////写入文件
         RasterWriter writer = new RasterWriter(folderPath, TimeCostName, landReader.RasterInfo);
         landOp.WriteRaster(writer, "TIFF");
         return(true);
     }
     catch (Exception e)
     {
         _log.Error(e.Message + e.StackTrace);
     }
     return(false);
 }
        protected void Wirte(RasterOp op, string foldePath, string name)
        {
            RasterWriter writer = new RasterWriter(foldePath, name, Info);

            op.WriteRaster(writer, "TIFF");
        }
        private void Run(object p)
        {
            Hashtable para       = p as Hashtable;
            var       wait       = para["wait"] as ProgressWait;
            string    folderPath = para["folderPath"].ToString();
            int       totalCount = Cities.Count(item => item.IsSelected);
            int       count      = 0;

            try
            {
                wait.SetWaitCaption("计算高铁城市空间可达性");
                foreach (string city in _dijkstra.GetCityEnumerator())
                {
                    wait.SetProgress((double)count++ / _dijkstra.Count);
                    _highTrainStation.Add(city, CalculationCity(city));
                }
                Dictionary <string, RasterOp> backup = new Dictionary <string, RasterOp>(_highTrainStation.Count);
                //backup
                foreach (var keyValue in _highTrainStation)
                {
                    backup.Add(keyValue.Key, new RasterOp(keyValue.Value));
                }
                //***********************************
                wait.SetProgress(0);
                wait.SetWaitCaption("计算高铁城市叠加效应");
                count = 0;
                foreach (string city in _dijkstra.GetCityEnumerator())
                {
                    wait.SetProgress((double)count++ / _dijkstra.Count);
                    float[] times = _dijkstra.Dijkstra(city);
                    foreach (var otherCity in _dijkstra.GetCityEnumerator())
                    {
                        if (city != otherCity)
                        {
                            int cityIndex = _dijkstra.GetCityIndex(otherCity);
                            backup[otherCity].Overlay(item => item + times[cityIndex]);
                            _highTrainStation[city].Overlay(backup[otherCity], Math.Min);
                            backup[otherCity].Overlay(item => item - times[cityIndex]);
                        }
                    }
                }
                //****************************************
                backup.Clear();
                //foreach (var keyValue in _highTrainStation)
                //{
                //    backup.Add(keyValue.Key, new RasterOp(keyValue.Value));
                //}
                wait.SetWaitCaption("计算所有城市空间可达性");
                wait.SetProgress(0);
                count = 0;
                foreach (var calculatorCity in Cities)
                {
                    if (calculatorCity.IsSelected)
                    {
                        wait.SetProgress((double)count++ / totalCount);
                        RasterOp res;
                        if (_highTrainStation.ContainsKey(calculatorCity.Name))
                        {
                            res = _highTrainStation[calculatorCity.Name];
                        }
                        else
                        {
                            res = CalculationCity(calculatorCity.Name);
                            RasterOp back = res.Clone();

                            foreach (var station in _highTrainStation)
                            {
                                //RasterOp op = back.Clone();
                                City    city     = _allCities.First(item => item.Name == station.Key);
                                Postion pos      = _rasterReader.Coordinate(city.XCoord, city.YCoord);
                                float   timecost = (float)back.Read(pos.XIndex, pos.YIndex);
                                _highTrainStation[station.Key].Overlay(item => item + timecost);
                                res.Overlay(_highTrainStation[station.Key], Math.Min);
                                _highTrainStation[station.Key].Overlay(item => item - timecost);
                            }
                        }
                        RasterWriter writer
                            = new RasterWriter(folderPath, calculatorCity.Name + "_高铁通车后", _rasterReader.RasterInfo);
                        res.WriteRaster(writer, "TIFF");
                    }
                }
                para["ret"] = true;
            }
            catch (Exception e)
            {
                _log.Error(e.Message + e.StackTrace);
                para["ret"] = false;
            }
            finally
            {
                wait.CloseWait();
            }
        }