ogr geojson

package geotool;

import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
import org.gdal.osr.SpatialReference;

import java.util.HashMap;
import java.util.Map;

/**
 * 类描述 <p>
 * @since 2019/10/8 15:58
 */
public class OgrGeoJson {
    public static void main(String[] args) {
        //指定文件的名字和路径
        String strVectorFile ="E:\\fibercable.geojson";

        // 注册所有的驱动
        ogr.RegisterAll();

        //配置GDAL_DATA路径(gdal根目录下的bin\gdal-data)
        gdal.SetConfigOption("GDAL_DATA","E:\\software\\release-1900-x64-gdal-2-4-2-mapserver-7-4-0\\bin\\gdal-data");

        // 为了支持中文路径,请添加下面这句代码
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");

        // 为了使属性表字段支持中文,请添加下面这句
        gdal.SetConfigOption("SHAPE_ENCODING","CP936");

        //读取数据,这里以ESRI的shp文件为例
        String strDriverName = "GeoJSON";

        //创建一个文件,根据strDriverName扩展名自动判断驱动类型
        Driver oDriver =ogr.GetDriverByName(strDriverName);
        if (oDriver == null) {
            System.out.println(strDriverName+ " 驱动不可用!\n");
            return;
        }
        DataSource dataSource = oDriver.Open(strVectorFile);
        Layer layer = dataSource.GetLayer(0);

        String layerName = layer.GetName();
        System.out.println("图层名称:"+layerName);

        SpatialReference spatialReference = layer.GetSpatialRef();
        System.out.println(spatialReference);
        System.out.println("空间参考坐标系:"+spatialReference.GetAttrValue("AUTHORITY",0)+spatialReference.GetAttrValue("AUTHORITY",1));

        double[] layerExtent = layer.GetExtent();
//        System.out.println("图层范围:minx:"+layerExtent[0]+",maxx:"+layerExtent[1]+",miny:"+layerExtent[2]+",maxy:"+layerExtent[3]);

        FeatureDefn featureDefn = layer.GetLayerDefn();
        int fieldCount = featureDefn.GetFieldCount();
        Map<String,Object> fieldMap = new HashMap<>();
        for(int i=0; i<fieldCount; i++){
            FieldDefn fieldDefn = featureDefn.GetFieldDefn(i);
            //得到属性字段类型
            int fieldType = fieldDefn.GetFieldType();
            String fieldTypeName = fieldDefn.GetFieldTypeName(fieldType);
            //得到属性字段名称
            String fieldName = fieldDefn.GetName();
            fieldMap.put(fieldTypeName,fieldName);
        }
        long featureCount = layer.GetFeatureCount();
        System.out.println("图层要素个数:"+featureCount);
        for(int i=0; i<featureCount; i++){
            Feature feature = layer.GetFeature(i);
            Object[] arr = fieldMap.values().toArray();
            for(int k=0; k<arr.length; k++){
                String fvalue = feature.GetFieldAsString(arr[k].toString());
                System.out.print(" 属性名称:"+arr[k].toString()+",属性值:"+fvalue);
            }
            System.out.println();
        }
    }
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容