public static SpatialHashSearcher <SegmentIndex> CreateSpatialSearcher( MultiLinestring multiLinestring, double?knownAverageSegmentLength = null) { if (multiLinestring.SegmentCount < _segmentCountThreshold) { return(null); } double gridSize; if (knownAverageSegmentLength != null) { gridSize = EstimateOptimalGridSize(knownAverageSegmentLength.Value); } else { gridSize = multiLinestring.SegmentCount > 0 ? EstimateOptimalGridSize(multiLinestring.GetLinestrings()) : 100; } var result = new SpatialHashSearcher <SegmentIndex>( multiLinestring.XMin, multiLinestring.YMin, gridSize, multiLinestring.SegmentCount, 5); Populate(result, multiLinestring); return(result); }
public static SpatialHashSearcher <SegmentIndex> CreateSpatialSearcher( MultiLinestring multiLinestring, double gridSize) { if (multiLinestring.SegmentCount < _segmentCountThreshold) { return(null); } var result = new SpatialHashSearcher <SegmentIndex>( multiLinestring.XMin, multiLinestring.YMin, gridSize, multiLinestring.SegmentCount, 5); Populate(result, multiLinestring); return(result); }
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); } } }
public byte[] WriteMultiLinestring([NotNull] MultiLinestring multiLinestring, Ordinates ordinates = Ordinates.Xyz) { // TODO: Initialize with the proper size or allow providing the actual byte[] MemoryStream memoryStream = InitializeWriter(); if (multiLinestring.Count == 1) { WriteLinestring(multiLinestring.GetLinestring(0), ordinates); } else { WriteWkbType(WkbGeometryType.MultiLineString, ordinates); Writer.Write(multiLinestring.Count); foreach (Linestring linestring in multiLinestring.GetLinestrings()) { WriteLinestring(linestring, ordinates); } } return(memoryStream.ToArray()); }