JAVA调用GDAL处理shapefile文件中文属性值乱码解决方法
来源:互联网 发布:淘宝新卖家如何推广 编辑:程序博客网 时间:2024/05/17 22:42
最近在JAVA上调用GDAL来对矢量数据进行操作,中文字段和中文属性值的乱码问题困扰已经,又要被老杜说没进展啦。。。苦不堪言啊!!!!好在经过这个早上的倒腾,终于给他怼出来了。在JAVA环境下怎么配置GDAL随手百度一发吧,我就不废话了。直接贴代码:
package shapefileProcess;import java.io.UnsupportedEncodingException;import org.gdal.gdal.gdal;import org.gdal.ogr.DataSource;import org.gdal.ogr.Feature;import org.gdal.ogr.FeatureDefn;import org.gdal.ogr.FieldDefn;import org.gdal.ogr.Layer;import org.gdal.ogr.ogr;import org.gdal.osr.SpatialReference;import org.gdal.osr.osr;public class ShapeReader {/** * @param args * @throws UnsupportedEncodingException */public static void main(String[] args) throws UnsupportedEncodingException{// TODO Auto-generated method stubString hunanxsPath="E:\\硕士阶段\\项目\\实验数据\\临时测试\\hunanSX_WGS84.shp";String hunanxPath="E:\\硕士阶段\\项目\\实验数据\\洪涝相关\\湖南省.shp";ogr.RegisterAll(); //支持中文路径gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES"); //String nameString=gdal.GetConfigOption("SHAPE_ENCODING");//支持中文字段gdal.SetConfigOption("SHAPE_ENCODING","CP936"); DataSource hunanStream=readShapeFile(hunanxsPath);Layer hunanSreamLayer=hunanStream.GetLayerByIndex(0);DataSource hunanProvince=readShapeFile(hunanxPath);Layer hunanProvinceLayer=hunanProvince.GetLayer(0);DataSource tempDataSource=ogr.GetDriverByName("ESRI Shapefile").CreateDataSource("E:\\gjy\\Test",null);MyClipFeature(hunanSreamLayer, hunanProvinceLayer,tempDataSource);}private static DataSource readShapeFile(String path){ogr.RegisterAll();//支持中文路径gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES"); //String nameString=gdal.GetConfigOption("SHAPE_ENCODING");//支持中文字段gdal.SetConfigOption("SHAPE_ENCODING","CP936"); DataSource inputSource=ogr.Open(path);return inputSource;}private static void MyClipFeature(Layer inputLayer,Layer extentLayer,DataSource tempDataSource) throws UnsupportedEncodingException{ogr.RegisterAll();gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES"); gdal.SetConfigOption("SHAPE_ENCODING","CP936");for(int i=0;i<extentLayer.GetFeatureCount();i++){Feature iFeature=extentLayer.GetFeature(0);FieldDefn mFieldDefn=new FieldDefn("名称", ogr.OFTString);mFieldDefn.SetWidth(60);//extentLayer.CreateField(mFieldDefn, 1);Layer tempLayer=tempDataSource.CreateLayer("temp3",new SpatialReference(osr.SRS_WKT_WGS84));tempLayer.CreateField(mFieldDefn,1);FeatureDefn iFeatureDefn=extentLayer.GetLayerDefn();Feature mFeature=new Feature(iFeatureDefn);mFeature.SetField(0,iFeature.GetFieldAsString(0));System.out.print(iFeature.GetFieldAsString(0).getBytes().getClass().toString());//mFeature.SetField(1, iFeature.GetFieldAsString(1));mFeature.SetGeometry(iFeature.GetGeometryRef()); tempLayer.CreateFeature(mFeature); tempLayer.SyncToDisk();//}}}
上面这段程度的功能主要是实现矢量的裁剪功能,具体是用左图对右图实现按县级行政区划的裁切,其中行政区划字段值为中文:
注意:gdal.SetConfigOption("SHAPE_ENCODING","CP936");
很多其他博客都没有显式指定SHAPE_ENCODING的值,直接为gdal.SetConfigOption("SHAPE_ENCODING",""); 理由是:操作系统的默认编码方式就是CP936()
然而我经过调试发现/String nameString=gdal.GetConfigOption("SHAPE_ENCODING");返回值为null,并不是传说中的CP936,因此将它设为CP936解决中文乱码问题;
1 0
- JAVA调用GDAL处理shapefile文件中文属性值乱码解决方法
- GeoTools读取ESRI ShapeFile中文乱码解决方法
- GDAL C#读取shp中文属性值乱码问题
- C++、GDAL创建shapefile文件
- GDAL写入FileGDB中文属性乱码问题
- GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
- GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
- geotools读写shapefile文件汉字乱码问题的解决方法
- GDAL C#中文路径,中文属性名称乱码问题
- Java读取中文文件出现乱码解决方法
- java下载文件中文乱码情况解决方法
- GDAL读取S-57海图数据中文属性值乱码问题解决
- GDAL读取S-57海图数据中文属性值乱码问题解决(续)
- java读取properties文件,中文乱码处理
- JAVA中文乱码解决方法
- Java中文乱码解决方法
- java中文乱码解决方法
- JAVA中文乱码解决方法
- Eclipse Java环境配置 Python配置
- 新手上路,scrollview 嵌套listview scrollview嵌套scrollview滑动冲突等问题的学习
- springmvc常用注解之@Controller和@RequestMapping
- 逊克身份证号码户籍地址信息查询
- 揭秘Sponge:统一Hadoop、Spark、SDS、Swift的大数据操作系统
- JAVA调用GDAL处理shapefile文件中文属性值乱码解决方法
- hdu3966 树链剖分(区间更新和单点求值)
- 怎么把图片文字转换成文字
- 感恩身边的风景
- Linux 进程调度管理
- UImage
- 查找排序实战---荷兰国旗问题(leetcode 75)
- Win程序处理繁忙而控件没刷新假死解决办法
- 【转】[译] 深入理解 Promise 五部曲:1. 异步问题