/// <summary> /// Executes the ClipPolygonWithPolygon tool with programatic input /// </summary> /// <param name="input">The input feature set to clip</param> /// <param name="input2">The input polygon feature set to clip with</param> /// <param name="output">The output feature set</param> /// <param name="cancelProgressHandler">The progress handler for progress message updates</param> /// <returns></returns> /// Ping delete "static" for external testing public bool Execute( IFeatureSet input, IFeatureSet input2, IFeatureSet output, ICancelProgressHandler cancelProgressHandler) { // Validates the input and output data if (input == null || input2 == null || output == null) { cancelProgressHandler.Progress(string.Empty, 100, TextStrings.Oneparameterinnull); return(false); } if (input2.FeatureType != FeatureType.Polygon) { cancelProgressHandler.Progress(string.Empty, 100, TextStrings.secondinputlayer); return(false); } output.FeatureType = input.FeatureType; // we add all the old features to output IFeatureSet tempoutput = input.Intersection(input2, FieldJoinType.LocalOnly, cancelProgressHandler); // We add all the fields foreach (DataColumn inputColumn in tempoutput.DataTable.Columns) { output.DataTable.Columns.Add(new DataColumn(inputColumn.ColumnName, inputColumn.DataType)); } foreach (var fe in tempoutput.Features) { output.Features.Add(fe); } output.SaveAs(output.Filename, true); return(true); }
public void NoDirEdges() { IFeatureSet fs1 = FeatureSet.Open(Path.Combine(_shapefiles, @"noDirEdgeFiles\catchment.shp")); IFeatureSet fs2 = FeatureSet.Open(Path.Combine(_shapefiles, @"noDirEdgeFiles\siteDesignArea.shp")); Assert.DoesNotThrow(() => fs1.Intersection(fs2, FieldJoinType.All, null)); }
public static IFeatureSet Intersect(IFeatureSet l1, IFeatureSet l2, string workdir) { var p1 = l1.Projection; var p2 = l2.Projection; var output = l1.Intersection(l2, FieldJoinType.LocalOnly, null); //output.Projection = ProjectionInfo.FromEpsgCode(3857); for (int i = 0; ; i++) { if (!File.Exists(WORKSPACE_DIR + workdir + "/inter" + i + ".shp")) { output.SaveAs(WORKSPACE_DIR + workdir + "/inter" + i + ".shp", true); break; } } //return l1.Intersection(l2, FieldJoinType.LocalOnly, null); return(output); }
/// <summary> /// Executes the ClipPolygonWithPolygon tool with programatic input /// </summary> /// <param name="input">The input feature set to clip</param> /// <param name="input2">The input polygon feature set to clip with</param> /// <param name="output">The output feature set</param> /// <param name="cancelProgressHandler">The progress handler for progress message updates</param> /// <returns>True if executed successfully.</returns> public bool Execute(IFeatureSet input, IFeatureSet input2, IFeatureSet output, ICancelProgressHandler cancelProgressHandler) { // Validates the input and output data if (input == null || input2 == null || output == null) { cancelProgressHandler.Progress(100, TextStrings.Oneparameterinnull); return(false); } if (input2.FeatureType != FeatureType.Polygon) { cancelProgressHandler.Progress(100, TextStrings.secondinputlayer); return(false); } output.FeatureType = input.FeatureType; // we add all the old features to output IFeatureSet tempoutput = input.Intersection(input2, FieldJoinType.LocalOnly, cancelProgressHandler); // We add all the fields foreach (DataColumn inputColumn in tempoutput.DataTable.Columns) { output.DataTable.Columns.Add(new DataColumn(inputColumn.ColumnName, inputColumn.DataType)); } foreach (var fe in tempoutput.Features) { output.Features.Add(fe); } // Setting the AttributesPopulated to true here means the output shapefile will get attribute columns copied from // the source file. This problem occurs when using the ClipPolygonWithPolygon tool due to how the input/output files // are loaded. https://github.com/DotSpatial/DotSpatial/issues/892 output.AttributesPopulated = true; output.SaveAs(output.Filename, true); return(true); }
/// <summary> /// Executes the ClipPolygonWithPolygon tool with programatic input /// </summary> /// <param name="input">The input feature set to clip</param> /// <param name="input2">The input polygon feature set to clip with</param> /// <param name="output">The output feature set</param> /// <param name="cancelProgressHandler">The progress handler for progress message updates</param> /// <returns></returns> /// Ping delete "static" for external testing public bool Execute( IFeatureSet input, IFeatureSet input2, IFeatureSet output, ICancelProgressHandler cancelProgressHandler) { // Validates the input and output data if (input == null || input2 == null || output == null) { cancelProgressHandler.Progress(string.Empty, 100, TextStrings.Oneparameterinnull); return false; } if (input2.FeatureType != FeatureType.Polygon) { cancelProgressHandler.Progress(string.Empty, 100, TextStrings.secondinputlayer); return false; } output.FeatureType = input.FeatureType; // we add all the old features to output IFeatureSet tempoutput = input.Intersection(input2, FieldJoinType.LocalOnly, cancelProgressHandler); // We add all the fields foreach (DataColumn inputColumn in tempoutput.DataTable.Columns) { output.DataTable.Columns.Add(new DataColumn(inputColumn.ColumnName, inputColumn.DataType)); } foreach (var fe in tempoutput.Features) { output.Features.Add(fe); } output.SaveAs(output.Filename, true); return true; }
/// <summary> /// Executes the Union Opaeration tool programaticaly /// </summary> /// <param name="self">The input are feature set</param> /// <param name="other">The second input feature set</param> /// <param name="output">The output feature set</param> /// <param name="cancelProgressHandler">The progress handler</param> /// <returns></returns> public bool Execute( IFeatureSet self, IFeatureSet other, IFeatureSet output, ICancelProgressHandler cancelProgressHandler) { // Validates the input and output data if (self == null || other == null || output == null) { return false; } IFeatureSet tempOutput = self.Intersection(other, FieldJoinType.All, null); IFeatureSet tempFeatureSet = self.CombinedFields(other); int previous = 0; int max = self.Features.Count; // Take (Self-Intersect Featureset) List<IFeature> intersectList; for (int i = 0; i < self.Features.Count; i++) { intersectList = other.Select(self.Features[i].Envelope.ToExtent()); foreach (IFeature feat in intersectList) { if (cancelProgressHandler.Cancel) { return false; } self.Features[i].Difference(feat, tempFeatureSet, FieldJoinType.LocalOnly); } if (Math.Round(i * 40D / max) <= previous) { continue; } previous = Convert.ToInt32(Math.Round(i * 40D / max)); cancelProgressHandler.Progress(string.Empty, previous, previous + TextStrings.progresscompleted); } max = other.Features.Count; // Take (Other-Intersect Featureset) for (int i = 0; i < other.Features.Count; i++) { intersectList = self.Select(other.Features[i].Envelope.ToExtent()); foreach (IFeature feat in intersectList) { if (cancelProgressHandler.Cancel) { return false; } other.Features[i].Difference(feat, tempFeatureSet, FieldJoinType.LocalOnly); } if (Math.Round((i * 40D / max) + 40D) <= previous) { continue; } previous = Convert.ToInt32(Math.Round((i * 40D / max) + 40D)); cancelProgressHandler.Progress(string.Empty, previous, previous + TextStrings.progresscompleted); } max = tempFeatureSet.Features.Count; output.CopyTableSchema(tempFeatureSet); // Add the individual feature to output for (int i = 0; i < tempFeatureSet.Features.Count; i++) { output.Features.Add(tempFeatureSet.Features[i]); if (Math.Round((i * 10D / max) + 80D) <= previous) { continue; } previous = Convert.ToInt32(Math.Round((i * 10D / max) + 80D)); if (cancelProgressHandler.Cancel) { return false; } cancelProgressHandler.Progress(string.Empty, previous, previous + TextStrings.progresscompleted); } max = tempOutput.Features.Count; // Add the Intersect feature to output for (int i = 0; i < tempOutput.Features.Count; i++) { output.Features.Add(tempOutput.Features[i]); if (cancelProgressHandler.Cancel) { return false; } if (Math.Round((i * 10D / max) + 90D) <= previous) { continue; } previous = Convert.ToInt32(Math.Round((i * 10D / max) + 90D)); cancelProgressHandler.Progress(string.Empty, previous, previous + TextStrings.progresscompleted); } output.SaveAs(output.Filename, true); return true; }
/// <summary> /// Executes the Union Opaeration tool programmatically. /// </summary> /// <param name="self">The input are feature set.</param> /// <param name="other">The second input feature set.</param> /// <param name="output">The output feature set.</param> /// <param name="cancelProgressHandler">The progress handler.</param> /// <returns>True, if executed successfully.</returns> public bool Execute(IFeatureSet self, IFeatureSet other, IFeatureSet output, ICancelProgressHandler cancelProgressHandler) { // Validates the input and output data if (self == null || other == null || output == null) { return(false); } IFeatureSet tempOutput = self.Intersection(other, FieldJoinType.All, null); IFeatureSet tempFeatureSet = self.CombinedFields(other); int previous = 0; int max = self.Features.Count; // Take (Self-Intersect Featureset) List <IFeature> intersectList; for (int i = 0; i < self.Features.Count; i++) { intersectList = other.Select(self.Features[i].Geometry.EnvelopeInternal.ToExtent()); foreach (IFeature feat in intersectList) { if (cancelProgressHandler.Cancel) { return(false); } self.Features[i].Difference(feat, tempFeatureSet, FieldJoinType.LocalOnly); } if (Math.Round(i * 40D / max) <= previous) { continue; } previous = Convert.ToInt32(Math.Round(i * 40D / max)); cancelProgressHandler.Progress(previous, previous + TextStrings.progresscompleted); } max = other.Features.Count; // Take (Other-Intersect Featureset) for (int i = 0; i < other.Features.Count; i++) { intersectList = self.Select(other.Features[i].Geometry.EnvelopeInternal.ToExtent()); foreach (IFeature feat in intersectList) { if (cancelProgressHandler.Cancel) { return(false); } other.Features[i].Difference(feat, tempFeatureSet, FieldJoinType.LocalOnly); } if (Math.Round((i * 40D / max) + 40D) <= previous) { continue; } previous = Convert.ToInt32(Math.Round((i * 40D / max) + 40D)); cancelProgressHandler.Progress(previous, previous + TextStrings.progresscompleted); } max = tempFeatureSet.Features.Count; output.CopyTableSchema(tempFeatureSet); // Add the individual feature to output for (int i = 0; i < tempFeatureSet.Features.Count; i++) { output.Features.Add(tempFeatureSet.Features[i]); if (Math.Round((i * 10D / max) + 80D) <= previous) { continue; } previous = Convert.ToInt32(Math.Round((i * 10D / max) + 80D)); if (cancelProgressHandler.Cancel) { return(false); } cancelProgressHandler.Progress(previous, previous + TextStrings.progresscompleted); } max = tempOutput.Features.Count; // Add the Intersect feature to output for (int i = 0; i < tempOutput.Features.Count; i++) { output.Features.Add(tempOutput.Features[i]); if (cancelProgressHandler.Cancel) { return(false); } if (Math.Round((i * 10D / max) + 90D) <= previous) { continue; } previous = Convert.ToInt32(Math.Round((i * 10D / max) + 90D)); cancelProgressHandler.Progress(previous, previous + TextStrings.progresscompleted); } output.SaveAs(output.Filename, true); return(true); }