GeoTools -- shp 전 geojson

7629 단어 GIS
목차
머리말
코드 조작
1. 서버
2. 데 이 터 를 되 돌려 줍 니 다.
3. 총화
 
머리말
 
데이터베이스 에 자주 저장 되 는 형식 은 OGC 표준 에 부합 되 는 WKT 나 WKB 이 고 네트워크 에서 자주 전송 되 는 형식 은 json 이기 때문에 저 희 는 각종 데 이 터 를 geojson 형식 으로 서비스 형식 으로 보 내 클 라 이언 트 가 사용 할 수 있 도록 합 니 다.물론 당신 은 굳이 wkt 형식 을 사용 해도 됩 니 다. 아무 도 당신 을 상관 하지 않 습 니 다. 자신 이 알 고 있 으 면 ok 입 니 다. 속성 데이터 와 관련 되 기 때문에 geojson 이 비교적 편리 하 다 고 건의 할 뿐 입 니 다. 왜냐하면 WFS 도 geojson 으로 되 돌 아 왔 기 때 문 입 니 다 = =
 
 
코드 조작
 
1. 서버
shp 데 이 터 를 읽 고 simplefeature 를 분석 하 며 feature json 을 json 으로 전환 한 다음 출력 을 맞 춥 니 다.
 /**
     *    shp    geojson,  
     * @return
     */
    @RequestMapping("/geojson")
    @ResponseBody
    public Object shp2geojson()
    {

        String shpPath=this.getClass().getResource("/").getFile()+"/file/pointgbk.shp";
        String  jsonPath=this.getClass().getResource("/").getFile()+"file/point.geojson";
        Map map = new HashMap();
        //  json  
        FeatureJSON fjson = new FeatureJSON();
        JSONObject geojsonObject=new JSONObject();
        geojsonObject.put("type","FeatureCollection");
        try{
            //  featurecollection
            File file = new File(shpPath);
            ShapefileDataStore shpDataStore = null;
            shpDataStore = new ShapefileDataStore(file.toURL());
            //    
/*            Charset charset = Charset.forName("GBK");
            shpDataStore.setCharset(charset);*/
            String typeName = shpDataStore.getTypeNames()[0];
            SimpleFeatureSource featureSource = null;
            featureSource =  shpDataStore.getFeatureSource (typeName);
            SimpleFeatureCollection result = featureSource.getFeatures();
            SimpleFeatureIterator itertor = result.features();
            JSONArray array = new JSONArray();
            //  feature  json  
            while (itertor.hasNext())
            {
                SimpleFeature feature = itertor.next();
                StringWriter writer = new StringWriter();
                fjson.writeFeature(feature, writer);
                String temp=writer.toString();
                byte[] b=temp.getBytes("iso8859-1");
                temp=new String(b,"gbk");
                System.out.println(temp);
                JSONObject json =  JSON.parseObject(temp);
                array.add(json);
            }
            geojsonObject.put("features",array);
            itertor.close();

            long startTime=System.currentTimeMillis();

            // json            
/*            File outputfile=new File(jsonPath);
            BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(outputfile));
            bufferedWriter.write(JSON.toJSONString(geojsonObject));
            bufferedWriter.flush();
            bufferedWriter.close();*/
            File outputfile=new File(jsonPath);
            FileOutputStream fileOutputStream=new FileOutputStream(outputfile);
            OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream,"utf-8");
            outputStreamWriter.write(JSON.toJSONString(geojsonObject));
            outputStreamWriter.flush();
            outputStreamWriter.close();

            // json            
/*            File outputfile=new File(jsonPath);
            BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(outputfile));
            byte[] bytes= JSON.toJSONString(geojsonObject).getBytes("utf-8");
            bufferedOutputStream.write(bytes);
            //fileOutputStream.write(JSON.toJSONString(geojsonObject));
            bufferedOutputStream.flush();
            bufferedOutputStream.close();*/

            long endTime=System.currentTimeMillis();
            System.out.println("      :"+(endTime-startTime)+"ms");
        }
        catch(Exception e){
            map.put("status", "failure");
            map.put("message", e.getMessage());
            e.printStackTrace();

        }

        return geojsonObject;
    }

 
2. 데 이 터 를 되 돌려 줍 니 다.
"features": [{"geometry": {"coordinates": [5089098.8554, 2999887.23], "type": "Point"}, "id": "pointgbk. 2", "type": "Feature", "properties": {"ExtendeEn": "{83103} {L31 - 20201081 - 24 L31 - 20201081 - 24 L31 - 20201081 - 24}", "SubClasses", "SubClasses": "AcDbEntity: AcDbText: AcDbText: AcDbText: AcDbText: AcDbText", "EntityHand": "" EntityHand":" "" 1522 "," Text "," Text "," Text ":" 37.24 "," Linetype ":", "Layer": "문자 층 그룹 - 레이 블"}, {"geometry": {"coordinates":[508884.9711, 299895.68874], "type": "Point"}, "id": "pointgbk. 3", "type": "Feature", "properties": {"ExtendeEn": "{83103} {L31 - 2020 01081 - 25 L31 - 2020 01081 - 25}", "SubClasses", "SubClasses": "AcDbEntity: AcDbText: AcDbText: AcDbText: AcDbText: AcDbText: AcDbTeText: AcDbTebText: AcDbTebTeTeText: AcDbTeText: AcDbText: AcDbTedbText: AcDbText: AcDbTeText: AcDbTeTe레이 어 그룹 - 레이 블"},...], "type": "FeatureCollection"}
 
 
3. 총화
 
  • wkt 와 geojson 사용 하기;
  •  
  • 코드 작업 은 shp 의 feature 를 geojson 으로 전환 합 니 다.
  •  
    보충:
    geojson 회전 shp
    		Map map = new HashMap();
    		GeometryJSON gjson = new GeometryJSON();
    		try{
    			String strJson = cm.getFileContent(jsonPath);
    			JSONObject json = new JSONObject(strJson);
    			JSONArray features = (JSONArray) json.get("features");
    			JSONObject feature0 = new JSONObject(features.get(0).toString());
    			System.out.println(feature0.toString());
    			String strType = ((JSONObject)feature0.get("geometry")).getString("type").toString();
    			
    			Class> geoType = null;
    			switch(strType){
    				case "Point":
    					geoType = Point.class;
    				case "MultiPoint":
    					geoType = MultiPoint.class;
    				case "LineString":
    					geoType = LineString.class;
    				case "MultiLineString":
    					geoType = MultiLineString.class;
    				case "Polygon":
    					geoType = Polygon.class;
    				case "MultiPolygon":
    					geoType = MultiPolygon.class;
    			}
    			//  shape    
    			File file = new File(shpPath);
    			Map params = new HashMap();
    			params.put( ShapefileDataStoreFactory.URLP.key, file.toURI().toURL() );
    			ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
    			//           
    			SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();
    			tb.setCRS(DefaultGeographicCRS.WGS84);
    			tb.setName("shapefile");
    			tb.add("the_geom", geoType);
    			tb.add("POIID", Long.class);
    			ds.createSchema(tb.buildFeatureType());
    			//    
                Charset charset = Charset.forName("GBK");
                ds.setCharset(charset);
    			//  Writer
    			FeatureWriter writer = ds.getFeatureWriter(ds.getTypeNames()[0], Transaction.AUTO_COMMIT);
    			
    			for(int i=0,len=features.length();i

    좋은 웹페이지 즐겨찾기