| | |
| | | |
| | | import cn.hutool.core.io.FileUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.dji.sample.patches.model.dto.ShpDTO; |
| | | import org.geotools.data.DataStore; |
| | | import org.geotools.data.DataStoreFinder; |
| | | import org.geotools.data.FeatureSource; |
| | |
| | | import org.opengis.feature.simple.SimpleFeature; |
| | | import org.opengis.feature.simple.SimpleFeatureType; |
| | | import org.opengis.filter.Filter; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.StringWriter; |
| | | import java.util.*; |
| | | |
| | | public class ShapeFileUtil { |
| | | /* |
| | | * @param zipFile: 压缩包文件地址 |
| | | * @return FeatureCollection |
| | | * @author pangshicheng |
| | | * @description 解析shp压缩包,并返回解析出的 FeatureCollection |
| | | * @date 2023/7/18 16:02 |
| | | */ |
| | | |
| | | //将文件解压 |
| | | public static FeatureCollection getFeatureCollectionByShpFile(File zipFile) throws IOException { |
| | | try { |
| | | String tempDir = FileUtil.getTmpDirPath(); |
| | |
| | | Filter filter = Filter.INCLUDE; |
| | | FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures(filter); |
| | | return collection; |
| | | }catch (Exception e){ |
| | | } catch (Exception e) { |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param zipFile: |
| | | * @return JSONObject |
| | | * @author pangshicheng |
| | | * @description 通过shp压缩文件,将其转换为GeoJson格式 |
| | | * @date 2023/7/18 16:04 |
| | | */ |
| | | public static JSONObject shpToGeoJson(File zipFile) throws IOException { |
| | | //将解压后的文件转换成GeoJson格式 |
| | | public static List<ShpDTO> shpToGeoJson(File zipFile) throws IOException { |
| | | ShpDTO shpDTO=new ShpDTO(); |
| | | List<ShpDTO> dtoList= new ArrayList<>(); |
| | | FeatureJSON fjson = new FeatureJSON(); |
| | | JSONObject geoJsonObject=new JSONObject(); |
| | | geoJsonObject.put("type","FeatureCollection"); |
| | | JSONObject geoJsonObject = new JSONObject(); |
| | | geoJsonObject.put("type", "FeatureCollection"); |
| | | List<String> strings = new ArrayList<>(); |
| | | try { |
| | | // 获取FeatureCollection |
| | | FeatureCollection collection = getFeatureCollectionByShpFile(zipFile); |
| | | |
| | | FeatureIterator iterator = collection.features(); |
| | | List<JSONObject> array = new ArrayList<JSONObject>(); |
| | | List<JSONObject> array = new ArrayList<JSONObject>(); |
| | | //遍历feature转为json对象 |
| | | while (iterator.hasNext()) { |
| | | SimpleFeature feature = (SimpleFeature) iterator.next(); |
| | |
| | | byte[] b = temp.getBytes("iso8859-1"); |
| | | temp = new String(b, "gbk"); |
| | | JSONObject json = JSONObject.parseObject(temp); |
| | | shpDTO.setDKFW(json.getJSONObject("geometry").get("coordinates").toString()); |
| | | shpDTO.setGEO(json.getJSONObject("geometry").get("type").toString()); |
| | | shpDTO.setXZQDM(json.getJSONObject("properties").get("XZQDM").toString()); |
| | | shpDTO.setXZB( json.getJSONObject("properties").getDouble("XZB")); |
| | | shpDTO.setYZB( json.getJSONObject("properties").getDouble("YZB")); |
| | | shpDTO.setDKBH(json.getJSONObject("properties").get("JCBH").toString()); |
| | | shpDTO.setJCMJ(json.getJSONObject("properties").getDouble("JCMC")); |
| | | shpDTO.setTBLX(json.getJSONObject("properties").getString("TBLX")); |
| | | shpDTO.setDDTC(json.getJSONObject("properties").getString("DDTC")); |
| | | shpDTO.setHSX(json.getJSONObject("properties").getString("HSX")); |
| | | shpDTO.setJCLX(json.getJSONObject("properties").getString("JCLX")); |
| | | dtoList.add(shpDTO); |
| | | String str2 = json.getJSONObject("geometry").get("coordinates").toString(); |
| | | strings.add(str2); |
| | | array.add(json); |
| | | } |
| | | iterator.close(); |
| | | //添加到geojsonObject |
| | | geoJsonObject.put("features",array); |
| | | geoJsonObject.put("features", array); |
| | | iterator.close(); |
| | | |
| | | }catch (Exception e){ |
| | | } catch (Exception e) { |
| | | throw e; |
| | | } |
| | | return geoJsonObject; |
| | | return dtoList; |
| | | } |
| | | |
| | | } |