private void Overlay(RasterOp basic, RasterOp city, string cityName)
 {
     for (int i = 0; i < basic.Width; i++)
     {
         for (int j = 0; j < basic.Height; j++)
         {
             if (basic.Read(i, j).HasValue)
             {
                 float timeCost = (float)city.Read(i, j);
                 if (Math.Abs(timeCost) < 10e-5)
                 {
                     if (_popDic.ContainsKey(cityName))
                     {
                         float tt = (float)(3 * Math.Log10(_popDic[cityName] * 10));
                         basic.Write(i, j, (float)basic.Read(i, j) + CityValues[cityName] / tt);
                     }
                 }
                 else
                 {
                     basic.Write(i, j, (float)basic.Read(i, j) + CityValues[cityName] / timeCost);
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
 /// <summary>
 /// 计算一个城市对其中的影响
 /// </summary>
 /// <param name="basic"></param>
 /// <param name="city"></param>
 /// <param name="value"></param>
 private void Overlay(RasterOp basic, RasterOp city, float value)
 {
     for (int i = 0; i < basic.Width; i++)
     {
         for (int j = 0; j < basic.Height; j++)
         {
             if (basic.Read(i, j).HasValue)
             {
                 var timeCost = (float)city.Read(i, j);
                 basic.Write(i, j, (float)basic.Read(i, j) + timeCost * value);
             }
         }
     }
 }
Exemplo n.º 3
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 void Overlay(RasterOp basic, RasterOp city, string cityName)
 {
     for (int i = 0; i < basic.Width; i++)
     {
         for (int j = 0; j < basic.Height; j++)
         {
             if (basic.Read(i, j).HasValue)
             {
                 var   timecost        = (float)city.Read(i, j);
                 float shorestTimeCost = ShortestTimeCost(i, j, _cityPos[cityName]);
                 if (Math.Abs(shorestTimeCost) < 10e-5)
                 {
                     continue;
                 }
                 basic.Write(i, j, (float)basic.Read(i, j) + timecost / shorestTimeCost * CityValues[cityName]);
             }
         }
     }
 }
        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();
            }
        }