为什么我要编写错误代码,;geotools创建shapefile中文setAttribute错误 package com.kero99.utils; /** * 创建形状文件 *@作者ygc * */ 导入java.io.BufferedRea

为什么我要编写错误代码,;geotools创建shapefile中文setAttribute错误 package com.kero99.utils; /** * 创建形状文件 *@作者ygc * */ 导入java.io.BufferedRea,java,gis,geotools,Java,Gis,Geotools,为什么我要编写错误代码,;geotools创建shapefile中文setAttribute错误 package com.kero99.utils; /** * 创建形状文件 *@作者ygc * */ 导入java.io.BufferedReader; 导入java.io.File; 导入java.io.FileInputStream; 导入java.io.FileReader; 导入java.io.IOException; 导入java.io.InputStream; 导入java

为什么我要编写错误代码,;geotools创建shapefile中文setAttribute错误
package com.kero99.utils;
/**
* 创建形状文件
*@作者ygc
*
*/
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.Serializable;
导入java.io.StringReader;
导入java.io.StringWriter;
导入java.net.MalformedURLException;
导入java.net.urlcoder;
导入java.nio.charset.charset;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.TreeMap;
导入org.geotools.data.FeatureWriter;
导入org.geotools.data.FileDataStore;
导入org.geotools.data.FileDataStoreFinder;
导入org.geotools.data.Transaction;
导入org.geotools.data.shapefile.ShapefileDataStore;
导入org.geotools.data.shapefile.ShapefileDataStoreFactory;
导入org.geotools.data.shapefile.dbf.DbaseFileHeader;
导入org.geotools.data.shapefile.dbf.DbaseFileReader;
导入org.geotools.data.shapefile.files.ShpFiles;
导入org.geotools.data.simple.SimpleFeatureCollection;
导入org.geotools.data.simple.SimpleFeatureIterator;
导入org.geotools.data.simple.SimpleFeatureSource;
导入org.geotools.feature.illegallattributeexception;
导入org.geotools.feature.simple.SimpleFeatureBuilder;
导入org.geotools.feature.simple.SimpleFeatureTypeBuilder;
导入org.geotools.feature.type.Types;
导入org.geotools.geojson.feature.FeatureJSON;
导入org.geotools.geojson.geom.GeometryJSON;
导入org.geotools.reference.crs.defaultGeography CCRS;
导入org.geotools.util.Converters;
导入org.locationtech.jts.geom.Coordinate;
导入org.locationtech.jts.geom.GeometryFactory;
导入org.locationtech.jts.geom.Point;
导入org.opengis.feature.simple.SimpleFeature;
导入org.opengis.feature.simple.SimpleFeatureType;
导入org.opengis.feature.type.AttributeDescriptor;
导入com.kero99.patterns.IShape;
导入com.kero99.pojo.Zdesignpolygon;
导入com.lividsolutions.jts.geom.Geometry;
导入com.lividsolutions.jts.geom.MultiPolygon;
导入net.sf.json.JSONArray;
导入net.sf.json.JSONObject;
/**
*地质工具文档:http://docs.geotools.org/latest/javadocs/
* 创建形状文件
*@作者ygc
*
*/
公共类createShapeFile{
公共静态void main(字符串[]args)引发IOException{
//创建文件路径
String path=“C:\\新建文件夹\\y、 小水电”;
文件=新文件(路径);
//创建坐标
String str=“{\'type\”:“MultiPolygon\”,“coordinates\”:[[[[125.0008803726706,43.40147359017337],[124.996793488742,43.401096616676305],[124.99694837503591,43.40186442431018],[124.99750584741349,43.401955866321565],[124.99803777088493,43.40992248794],[124.9980639301,43.4045941744],[247],[949494943],[124.999703712491,43.4048699875539],[124.99866141203354,43.40606649155232],[125.00126143620331,43.40562431171862],[125.00257777597052,43.403552077651824],[125.00295876012552,43.40274710316431],[125.00307123554897,43.40186767450569],[125.00088033726706,43.40147359017337]]]]}";
JSONObject=JSONObject.fromObject(str);
JSONArray JSONArray=jsonObject.getJSONArray(“坐标”);
System.out.println(jsonArray);
//创建对象添加属性信息 
Zdesignpolygon=新的Zdesignpolygon();
多边形。设置码(“106”);
多边形坐标(str);
多边形设置标记(“tktt3”);
polygon.setName(“土坎梯田");
多边形设置状态(“坡耕地");
多边形集号(12.64);
多边形设置坡度(9.0);
//添加创建的路径 
Map params=新的HashMap();
params.put(ShapefileDataStoreFactory.URLP.key,file.toURI().toURL());
ShapefileDataStoreFactory sf=新的ShapefileDataStoreFactory();
//创建形状文件数据仓库根据工厂
ShapefileDataStore ds=(ShapefileDataStore)sf.createDataStore(file.toURI().toURL());
ds.setCharset(Charset.forName(“GBK”));
//ShapefileDataStore ds=(ShapefileDataStore)新建ShapefileDataStoreFactory().createDataStore(参数);
//创建要素模板
SimpleFeatureTypeBuilder tb=新的SimpleFeatureTypeBuilder();
//设置wgs84格式
tb.setCRS(CCRS.WGS84);
//设置全局状态
tb.setName(“shapefile”);
//添加属性类型
tb.添加(”图斑编码“,String.class);
tb.添加(”措施代码“,String.class);
tb.添加(”措施名称“,String.class);
tb.添加(”利用现状“,String.class);
tb.添加(”措施数量",双级),;
tb.添加(”坡度",双级),;
tb.add(“the_geom”,MultiPolygon.class);
//设置特征类型数据存储。该方法将删除任何现有的本地资源或抛出IOException如果远程数据存储。
//这个元素附加源和附加Javadoc,因此没有能找到Javadoc
ds.createSchema(tb.buildFeatureType());
//设置编码格式
//         类似的API特性读取器后,调查组成员功能使用下一个()你可以叫删除()或修改后写()。
//               如果你不调用这两个方法调用之前hasNext(),或下(),这个功能将被修改的。
//            这个美国石油学会允许修改,编写和基于过滤器的修改。请参阅内容数据存储使用这个美国石油学会实现共同异议的例子。
//FeatureWriter FeatureWriter=ds.getFeatureWriter(ds.getTypeNames()[0],Transaction.AUTO_COMMIT);
FeatureWriter FeatureWriter=ds.getFeatureWriter(ds.getTypeNames()[0],null);
//FeatureWriter FeatureWriter=ds.getFeatureWriter(Transaction.AUTO_COMMIT);
SimpleFeature feature=featureWriter.next();
// 取出特征里面的属性集合
//添加属性值和坐标
setAttribute(0,polygon.getCode());
setAttribute(1,polygon.getMark());
feature.setAttr
tb.add("图斑编码", String.class);

feature.setAttribute("图斑编码", polygon.getCode());
Exception in thread "main" org.geotools.feature.IllegalAttributeException:Unknown attribute 图斑编码:null value:null
    at org.geotools.feature.simple.SimpleFeatureImpl.setAttribute(SimpleFeatureImpl.java:252)
    at com.kero99.utils.createShapeFile.main(createShapeFile.java:126)
package com.kero99.utils;
/**
 * 创建shape文件
 * @author ygc
 *
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.geotools.data.FeatureWriter;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.Transaction;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
import org.geotools.data.shapefile.dbf.DbaseFileHeader;
import org.geotools.data.shapefile.dbf.DbaseFileReader;
import org.geotools.data.shapefile.files.ShpFiles;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.feature.type.Types;
import org.geotools.geojson.feature.FeatureJSON;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.geotools.util.Converters;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;

import com.kero99.patterns.IShape;
import com.kero99.pojo.Zdesignpolygon;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.MultiPolygon;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * Geotools文档:http://docs.geotools.org/latest/javadocs/
 * 创建shape文件
 * @author ygc
 *
 */
public class createShapeFile {
    public static void main(String[] args) throws IOException {
        //创建文件路径
        String path="C:\\新建文件夹\\y.shp";
        File file=new File(path);
        //创建坐标
        String str="{\"type\":\"MultiPolygon\",\"coordinates\":[[[[125.00088033726706,43.40147359017337],[124.99679348328742,43.401096616676305],[124.99694837503591,43.40186442431018],[124.99750584741349,43.401955866321565],[124.99803787708493,43.40230992248794],[124.9980525639301,43.40490599341744],[124.99939124766493,43.4039525077194],[124.999703712491,43.4048699875539],[124.99866141203354,43.40606649155232],[125.00126143620331,43.40562431171862],[125.00257777597052,43.403552077651824],[125.00295876012552,43.40274710316431],[125.00307123554897,43.40186767450569],[125.00088033726706,43.40147359017337]]]]}";
        JSONObject jsonObject = JSONObject.fromObject(str); 
        JSONArray jsonArray = jsonObject.getJSONArray("coordinates"); 
        System.out.println(jsonArray); 
        //创建对象添加属性信息 
        Zdesignpolygon polygon=new Zdesignpolygon();
        polygon.setCode("106");
        polygon.setCoordinate(str);
        polygon.setMark("tktt3");
        polygon.setName("土坎梯田");
        polygon.setState("坡耕地");
        polygon.setNumber(12.64);
        polygon.setSlope(9.0);  
        //添加创建的路径 
        Map<String, Serializable> params = new HashMap<String, Serializable>();

        params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());
        ShapefileDataStoreFactory sf = new ShapefileDataStoreFactory();
        //创建shape文件数据仓库根据工厂
        ShapefileDataStore ds = (ShapefileDataStore) sf.createDataStore(file.toURI().toURL());
        ds.setCharset(Charset.forName("GBK"));

        //ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createDataStore(params);
        //创建要素模板
        SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();

        //设置wgs84格式
        tb.setCRS(DefaultGeographicCRS.WGS84);
        //设置全局状态
        tb.setName("shapefile");    

        //添加属性类型
        tb.add("图斑编码", String.class);
        tb.add("措施代码", String.class);
        tb.add("措施名称", String.class);
        tb.add("利用现状", String.class);
        tb.add("措施数量", Double.class);
        tb.add("坡度", Double.class);
        tb.add("the_geom", MultiPolygon.class);
        //设置FeatureType数据存储。该方法将删除任何现有的本地资源或抛出IOException如果远程数据存储。
        //这个元素附加源和附加Javadoc,因此没有能找到Javadoc。
        ds.createSchema(tb.buildFeatureType());
        //设置编码格式

//         类似的API FeatureReader后,调查组成员功能使用next()你可以叫删除()或修改后写()。
//               如果你不调用这两个方法调用之前hasNext(),或下(),这个功能将被修改的。
//            这个API允许修改,编写和基于过滤器的修改。请参阅ContentDataStore使用这个API实现共同opperations的例子。
    //    FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = ds.getFeatureWriter(ds.getTypeNames()[0], Transaction.AUTO_COMMIT);
        FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = ds.getFeatureWriter(ds.getTypeNames()[0], null);
//      FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = ds.getFeatureWriter(Transaction.AUTO_COMMIT);
        SimpleFeature feature = featureWriter.next();
        // 取出特征里面的属性集合
        //添加属性值和坐标
        feature.setAttribute(0, polygon.getCode());
        feature.setAttribute(1, polygon.getMark());
        feature.setAttribute(2, polygon.getName());
        feature.setAttribute(3, polygon.getState());
        feature.setAttribute(4, polygon.getNumber());
        feature.setAttribute(5, polygon.getSlope());
        //转换geojson 
        GeometryJSON geometryJSON2 = new GeometryJSON(15);
        Geometry geometry = geometryJSON2.read(new StringReader(polygon.getCoordinate()));
        feature.setAttribute("the_geom", geometry);

        featureWriter.write();
        featureWriter.close();      
        ds.dispose();

    }


//  
//  protected boolean validating;
//  protected Map<String, String> index;
//  protected SimpleFeatureType featureType;
//  protected Object[] values;
//  public SimpleFeatureType getFeatureType() {
//      return this.featureType;
//  }
//  

//  public void setAttribute(String name, Object value) {
//      String idx =  this.index.get(name);
//      if (idx == null) {
//          throw new IllegalAttributeException("Unknown attribute " + name);
//      } else {
//          this.setAttribute(idx, value);
//      }
//  }


}