static void WriteFeatures(GISLayer layer, BinaryWriter bw) { for (int featureindex = 0; featureindex < layer.Features.Count; featureindex++) { GISFeature feature = layer.Features[featureindex]; if (layer.ShapeType == SHAPETYPE.POINT) { WriteVertex(((GISPoint)feature.spatialpart).Location, bw); } else if (layer.ShapeType == SHAPETYPE.LINE) { GISLine line = (GISLine)(feature.spatialpart); bw.Write(line.Vertexes.Count); for (int vc = 0; vc < line.Vertexes.Count; vc++) { WriteVertex(line.Vertexes[vc], bw); } } else if (layer.ShapeType == SHAPETYPE.POLYGON) { GISPolygon polygon = (GISPolygon)(feature.spatialpart); bw.Write(polygon.Vertexes.Count); for (int vc = 0; vc < polygon.Vertexes.Count; vc++) { WriteVertex(polygon.Vertexes[vc], bw); } } for (int fieldindex = 0; fieldindex < layer.Fields.Count; fieldindex++) { GISField field = layer.Fields[fieldindex]; int tint = TypeToInt(field.datatype); if (tint == 1) { bw.Write((int)(feature.getAttributeValue(fieldindex))); } else if (tint == 2) { bw.Write(Convert.ToDouble(feature.getAttributeValue(fieldindex))); } else if (tint == 3) { WriteString(feature.getAttributeValue(fieldindex).ToString(), bw); } } } }
public GISFeature SelectLineByVertex(GISVertex vertex, double mindist) { Double distance = Double.MaxValue; int id = -1; for (int i = 0; i < Features.Count; i++) { if (Features[i].spatialpart.extent.WithInDistance(vertex, mindist) == false) { continue; } GISLine line = (GISLine)(Features[i].spatialpart); double dist = line.Distance(vertex); if (dist < distance) { distance = dist; id = i; } } return((distance < mindist) ? Features[id] : null); }