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. 총화
보충:
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GPS 데이터를 사용하여 모양 파일 만들기지금까지 1/2500의 종이의 도시 계획도나 GoogleMap를 스캔해 현장 셰이프 파일(폴리곤)을 작성하고 있었습니다. 올해부터 RTK-GPS로 cm정도의 위치 데이터를 잡을 수 있었으므로 이것을 바탕으로(올 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.