Exemple #1
0
        // 将给定shp转换为Web Mercator投影
        public void TransformShp(DataSource ds, string FilePath)
        {
            Layer            layer    = ds.GetLayerByIndex(0);
            SpatialReference sr       = layer.GetSpatialRef();
            SpatialReference Mercator = new SpatialReference("");

            Mercator.ImportFromEPSG(3857); // Web Mercator
            Mercator.SetMercator(0d, 0d, 1d, 0d, 0d);

            string strDriver = "ESRI Shapefile";

            OSGeo.OGR.Driver oDriver = Ogr.GetDriverByName(strDriver);
            oDriver.Register();
            //创造新矢量图层
            DataSource ds1    = oDriver.CreateDataSource(FilePath, null);
            Layer      layer1 = ds1.CreateLayer(layer.GetName(), Mercator, layer.GetGeomType(), null);
            //读取属性字段名
            Feature feature = layer.GetFeature(0);

            for (int i = 0; i < feature.GetFieldCount(); i++)
            {
                FieldDefn fieldDefn = feature.GetFieldDefnRef(i);
                layer1.CreateField(fieldDefn, 1);
            }
            //遍历图层中每个要素
            feature = layer.GetNextFeature();
            while (feature != null)
            {
                Geometry geom = feature.GetGeometryRef();
                geom.TransformTo(Mercator);
                feature.SetGeometry(geom);
                layer1.CreateFeature(feature);
                feature = layer.GetNextFeature();
            }
            ds1.FlushCache();
            ds1.Dispose();
        }