Esempio n. 1
0
 private static void Populate(SpatialHashSearcher <int> spatialSearcher,
                              Linestring linestring)
 {
     for (var i = 0; i < linestring.SegmentCount; i++)
     {
         Line3D line = linestring[i];
         spatialSearcher.Add(i, line.XMin, line.YMin, line.XMax, line.YMax);
     }
 }
Esempio n. 2
0
 private static void Populate(SpatialHashSearcher <int> spatialSearcher,
                              IPointList pointList)
 {
     for (var i = 0; i < pointList.PointCount; i++)
     {
         IPnt pnt = pointList.GetPoint(i);
         spatialSearcher.Add(i, pnt.X, pnt.Y, pnt.X, pnt.Y);
     }
 }
Esempio n. 3
0
        public static SpatialHashSearcher <T> CreateSpatialSearcher(
            [NotNull] IList <T> values,
            Func <T, EnvelopeXY> getBoundsFunc,
            double gridSize = double.NaN)
        {
            Assert.ArgumentCondition(values.Count > 0, "Empty value list");

            List <EnvelopeXY> valueEnvelopes =
                values.Select(getBoundsFunc).ToList();

            EnvelopeXY fullExtent;
            double     averageEnvLateralLength;

            GetEnvelopeStatistics(valueEnvelopes, out fullExtent,
                                  out averageEnvLateralLength);

            if (double.IsNaN(averageEnvLateralLength))
            {
                if (double.IsNaN(gridSize))
                {
                    throw new ArgumentException(
                              "Cannot derive grid size from values, please provide a grid size > 0.");
                }

                averageEnvLateralLength = gridSize;
            }

            Assert.NotNull(fullExtent);

            double maxTileCount = (fullExtent.Width * fullExtent.Height) /
                                  (averageEnvLateralLength * averageEnvLateralLength);

            if (double.IsNaN(gridSize))
            {
                gridSize = averageEnvLateralLength * 2;
            }

            double estimatedItemsPerTile = maxTileCount / values.Count;

            var result =
                new SpatialHashSearcher <T>(
                    fullExtent.XMin, fullExtent.YMin, gridSize, (int)maxTileCount,
                    estimatedItemsPerTile);

            // populate
            for (int i = 0; i < values.Count; i++)
            {
                result.Add(values[i], valueEnvelopes[i]);
            }

            return(result);
        }
Esempio n. 4
0
        private static void Populate(
            SpatialHashSearcher <SegmentIndex> spatialSearcher,
            MultiLinestring multiLinestring)
        {
            for (int i = 0; i < multiLinestring.Count; i++)
            {
                var linestring = multiLinestring.GetLinestring(i);

                for (var j = 0; j < linestring.SegmentCount; j++)
                {
                    Line3D line = linestring[j];
                    spatialSearcher.Add(new SegmentIndex(i, j),
                                        line.XMin, line.YMin, line.XMax, line.YMax);
                }
            }
        }