public bool Excute(string outputFilename, Extent extent, double cellSize)
        {
            int numColumns = (int)(extent.Width / cellSize);
            int numRows    = (int)(extent.Height / cellSize);

            for (int i = 0; i < DIRECTION_COUNT; i++)
            {
                IRaster output = Raster.CreateRaster(
                    outputFilename, string.Empty, numColumns, numRows, 1, typeof(double), new[] { string.Empty });
                output.Extent     = extent;
                output.Projection = DotSpatial.Projections.ProjectionInfo.FromEpsgCode(4326);
                for (int x = 0; x < numColumns; x++)
                {
                    for (int y = 0; y < numRows; y++)
                    {
                        Coordinate cellCenter = output.CellToProj(y, x);
                        var        nearestSeg = segmentationRTree.Query(new Envelope(cellCenter));
                        for (int j = 0; j < nearestSeg.Count; j++)
                        {
                            GPSSegmentation gs = nearestSeg[j] as GPSSegmentation;
                            if (GetIndexOfDirection(gs.Angle) == i)
                            {
                                //do something
                            }
                        }
                    }
                }
            }
            return(false);
        }
예제 #2
0
        /// <summary>
        /// DP算法的核心算法,是一个分治迭代函数,当I==j-1迭代结束
        /// </summary>
        /// <param name="i">开始点</param>
        /// <param name="j">结束点</param>
        private void SimplifySection(int i, int j)
        {
            if ((i + 1) == j)
            {
                return;
            }
            GPSSegmentation _seg        = new GPSSegmentation(GPSPts[i], GPSPts[j]);
            double          maxDistance = -1.0;
            int             maxIndex    = i;

            for (int k = i + 1; k < j; k++)
            {
                double distance = _seg.Distance(GPSPts[k]);
                if (distance > maxDistance)
                {
                    maxDistance = distance;
                    maxIndex    = k;
                }
            }
            if (maxDistance <= _distanceTolerance)
            {
                for (int k = i + 1; k < j; k++)
                {
                    _usePt[k] = false;
                }
            }
            else
            {
                SimplifySection(i, maxIndex);
                SimplifySection(maxIndex, j);
            }
        }
 private void BulidRTree()
 {
     try
     {
         segmentationRTree = new StRtree();
         foreach (var item in trajData)
         {
             for (int i = 0; i < item.GPSCount - 1; i++)
             {
                 GPSSegmentation gg = item.GetSeqmentationAtIndex(i);
                 segmentationRTree.Insert(gg.GetOptimizeEnvelop(), gg);
             }
         }
         segmentationRTree.Build();
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }