Beispiel #1
0
 /// <summary>
 /// 将内容写入
 /// </summary>
 /// <param name="writer"></param>
 /// <param name="format"></param>
 public void WriteRaster(RasterWriter writer, string format)
 {
     writer.Write(_raster, format);
 }
        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();
            }
           
        }
 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");
 }
 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();
     }
 }
Beispiel #5
0
 /// <summary>
 /// 将内容写入
 /// </summary>
 /// <param name="writer"></param>
 /// <param name="format"></param>
 public void WriteRaster(RasterWriter writer,string format)
 {
     writer.Write(_raster,format);
 }
 protected void Wirte(RasterOp op, string foldePath, string name)
 {
     RasterWriter writer = new RasterWriter(foldePath, name, Info);
     op.WriteRaster(writer, "TIFF");
 }
 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;
 }