private IGeometry ReadLineString(OgrGeometryType type, OgrGeometry geom) { var count = geom.GetPointCount(); var dimension = geom.GetCoordinateDimension(); var cs = _factory.CoordinateSequenceFactory.Create(count, dimension); if (dimension > 2) { for (var i = 0; i < cs.Count; i++) { cs.SetOrdinate(i, Ordinate.X, geom.GetX(i)); cs.SetOrdinate(i, Ordinate.Y, geom.GetY(i)); cs.SetOrdinate(i, Ordinate.Z, geom.GetZ(i)); } } else { for (var i = 0; i < cs.Count; i++) { cs.SetOrdinate(i, Ordinate.X, geom.GetX(i)); cs.SetOrdinate(i, Ordinate.Y, geom.GetY(i)); } } return(_factory.CreateLineString(cs)); }
private IGeometry ReadWkb(OgrGeometryType type, OgrGeometry geom) { var b = new byte[geom.WkbSize()]; geom.ExportToWkb(b); return(Reader.Read(b)); }
public EditingManager(Layer layer, RS.RSTransform rstransfrom) { this.layername = layer.Layername; this.EditingFeaturesource = layer.featuresource; //featurecollection_finishededit = new FeatureCollection(); this.editingpoints = new List <PointD>(); this.lists = new List <List <PointD> >(); this.geometrytype = this.EditingFeaturesource.schema.geometryType; this.rstransform = rstransfrom; }
private IGeometry ReadPoint(OgrGeometryType type, OgrGeometry geom) { var c = new Coordinate(geom.GetX(0), geom.GetY(0)); if ((int)type > 0x1000000) { c.Z = geom.GetZ(0); } return(_factory.CreatePoint(c)); }
public static string wkbGeometryType2String(OSGeo.OGR.wkbGeometryType type) { switch (type) { case OSGeo.OGR.wkbGeometryType.wkbPoint: return("POINT"); case OSGeo.OGR.wkbGeometryType.wkbLineString: return("LINESTRING"); case OSGeo.OGR.wkbGeometryType.wkbPolygon: return("POLYGON"); case OSGeo.OGR.wkbGeometryType.wkbMultiLineString: return("MULTILINESTRING"); default: return("MULTIPOLYGON"); } }
/// <summary> /// Ogr to DotSpatial at geometry type level /// </summary> /// <param name="ogrType">Ogr wkbGeometryType</param> /// <returns>DotSpatial FeatureType</returns> public static DotSpatial.Data.FeatureType Ogr2DSGeometryType(OSGeo.OGR.wkbGeometryType ogrType) { switch (ogrType) { case OSGeo.OGR.wkbGeometryType.wkbLineString: return(DotSpatial.Data.FeatureType.Line); case OSGeo.OGR.wkbGeometryType.wkbPolygon: return(DotSpatial.Data.FeatureType.Polygon); case OSGeo.OGR.wkbGeometryType.wkbPoint: return(DotSpatial.Data.FeatureType.Point); case OSGeo.OGR.wkbGeometryType.wkbMultiPoint: return(DotSpatial.Data.FeatureType.MultiPoint); default: return(DotSpatial.Data.FeatureType.Unspecified); } }
//指定表名读出成一个FeatureSource public FeatureSource ReadFromTable(string table) { string connStr = "Server=" + server + ";Port=" + port + ";UserId=" + user + ";Password="******";Database=" + database + ";"; try { //获得图层类型和参考坐标系 Dictionary <string, string> dt1 = GetSchemePara(table); OSGeo.OGR.wkbGeometryType geometryType = String2Type.String2wkbGeometryType(dt1["type"]); ReferenceSystem rs = new SRS(new OSGeo.OSR.SpatialReference(Int2SRText(int.Parse(dt1["srid"])))); NpgsqlConnection conn = new NpgsqlConnection(connStr); conn.Open(); IDbCommand dbcmd = conn.CreateCommand(); dbcmd.CommandText = "SELECT *,ST_AsText(geom) AS geom1 FROM \"" + table + "\""; IDataReader dr = dbcmd.ExecuteReader(); Dictionary <string, OSGeo.OGR.FieldDefn> fields = new Dictionary <string, OSGeo.OGR.FieldDefn>(); string[] fieldNames = new string[dr.FieldCount - 2]; for (int i = 0; i < dr.FieldCount - 2; i++) { OSGeo.OGR.FieldDefn d = GetFieldDefn(dr.GetName(i), dr.GetDataTypeName(i)); fields.Add(dr.GetName(i), d); fieldNames[i] = dr.GetName(i); } Schema schema = new Schema(table, geometryType, rs, fields); List <Feature> flst = new List <Feature>(); while (dr.Read()) { int featureID = int.Parse(dr[0].ToString()); Geometry.Geometry geometry = WKT2Feature.WKT2Geometry(dr[dr.FieldCount - 1].ToString()); Dictionary <string, Object> attributes = new Dictionary <string, object>(); for (int i = 0; i < dr.FieldCount - 2; i++) { Object o; switch (fields[fieldNames[i]].GetFieldType()) { case OSGeo.OGR.FieldType.OFTInteger: o = int.Parse(dr[i].ToString()); break; case OSGeo.OGR.FieldType.OFTReal: o = double.Parse(dr[i].ToString()); break; default: o = dr[i].ToString(); break; } attributes.Add(fieldNames[i], o); } Feature feature = new Feature(featureID, schema, geometry, attributes); flst.Add(feature); } FeatureCollection fc = new FeatureCollection(flst); FeatureSource fs = new FeatureSource(schema, fc); return(fs); conn.Close(); } catch (Exception e) { return(null); } }
public static bool ogr_geo_type_to_esri_geo_type(OSGeo.OGR.wkbGeometryType ogrType, out esriGeometryType outGDBType, out bool outHasZ) { switch (ogrType) { case OSGeo.OGR.wkbGeometryType.wkbPoint25D: { outGDBType = esriGeometryType.esriGeometryPoint; outHasZ = true; break; } case OSGeo.OGR.wkbGeometryType.wkbMultiPoint25D: { outGDBType = esriGeometryType.esriGeometryMultipoint; outHasZ = true; break; } case OSGeo.OGR.wkbGeometryType.wkbLineString25D: case OSGeo.OGR.wkbGeometryType.wkbMultiLineString25D: { outGDBType = esriGeometryType.esriGeometryPolyline; outHasZ = true; break; } case OSGeo.OGR.wkbGeometryType.wkbPolygon25D: case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon25D: { outGDBType = esriGeometryType.esriGeometryPolygon; outHasZ = true; break; } /* 2D forms */ case OSGeo.OGR.wkbGeometryType.wkbPoint: { outGDBType = esriGeometryType.esriGeometryPoint; outHasZ = false; break; } case OSGeo.OGR.wkbGeometryType.wkbMultiPoint: { outGDBType = esriGeometryType.esriGeometryMultipoint; outHasZ = false; break; } case OSGeo.OGR.wkbGeometryType.wkbLineString: case OSGeo.OGR.wkbGeometryType.wkbMultiLineString: { outGDBType = esriGeometryType.esriGeometryPolyline; outHasZ = false; break; } case OSGeo.OGR.wkbGeometryType.wkbPolygon: case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon: { outGDBType = esriGeometryType.esriGeometryPolygon; outHasZ = false; break; } default: { //CPLError( CE_Failure, CPLE_AppDefined, "Cannot map OGRwkbGeometryType (%s) to ESRI type", // OGRGeometryTypeToName(ogrType)); outGDBType = esriGeometryType.esriGeometryNull; outHasZ = false; return(false); } } return(true); }
public Rectangle getEnvelop() { if (this.count == 0) { return(new Rectangle(0, 0, 0, 0)); } Rectangle rect = new Rectangle(Utils.double_max, Utils.double_max, Utils.double_min, Utils.double_min); foreach (Feature feature in featureList) { OSGeo.OGR.wkbGeometryType featType = feature.geometry.geometryType; switch (featType) { case OSGeo.OGR.wkbGeometryType.wkbPoint: PointD point = (PointD)feature.geometry; if (point.X < rect.minX) { rect.minX = point.X; } if (point.X > rect.maxX) { rect.maxX = point.X; } if (point.Y < rect.minY) { rect.minY = point.Y; } if (point.Y > rect.maxY) { rect.maxY = point.Y; } break; case OSGeo.OGR.wkbGeometryType.wkbLineString: SimplePolyline line = (SimplePolyline)feature.geometry; if (line.minX < rect.minX) { rect.minX = line.minX; } if (line.maxX > rect.maxX) { rect.maxX = line.maxX; } if (line.minY < rect.minY) { rect.minY = line.minY; } if (line.maxY > rect.maxY) { rect.maxY = line.maxY; } break; case OSGeo.OGR.wkbGeometryType.wkbMultiLineString: Polyline mline = (Polyline)feature.geometry; if (mline.minX < rect.minX) { rect.minX = mline.minX; } if (mline.maxX > rect.maxX) { rect.maxX = mline.maxX; } if (mline.minY < rect.minY) { rect.minY = mline.minY; } if (mline.maxY > rect.maxY) { rect.maxY = mline.maxY; } break; case OSGeo.OGR.wkbGeometryType.wkbPolygon: SimplePolygon polygon = (SimplePolygon)feature.geometry; if (polygon.minX < rect.minX) { rect.minX = polygon.minX; } if (polygon.maxX > rect.maxX) { rect.maxX = polygon.maxX; } if (polygon.minY < rect.minY) { rect.minY = polygon.minY; } if (polygon.maxY > rect.maxY) { rect.maxY = polygon.maxY; } break; case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon: Polygon mpolygon = (Polygon)feature.geometry; if (mpolygon.minX < rect.minX) { rect.minX = mpolygon.minX; } if (mpolygon.maxX > rect.maxX) { rect.maxX = mpolygon.maxX; } if (mpolygon.minY < rect.minY) { rect.minY = mpolygon.minY; } if (mpolygon.maxY > rect.maxY) { rect.maxY = mpolygon.maxY; } break; } } return(rect); }