| | |
| | | * 读取Shp第一条记录的WKT |
| | | */ |
| | | public static ShpRecordEntity readShpFirstRecord(String filePath) { |
| | | Driver driver = null; |
| | | DataSource dataSource = null; |
| | | Layer layer = null; |
| | | try { |
| | | org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (driver == null) { |
| | | driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (null == driver) { |
| | | return null; |
| | | } |
| | | |
| | | DataSource dataSource = driver.Open(filePath); |
| | | Layer layer = dataSource.GetLayer(0); |
| | | dataSource = driver.Open(filePath); |
| | | if (null == dataSource) { |
| | | return null; |
| | | } |
| | | |
| | | layer = dataSource.GetLayer(0); |
| | | if (layer.GetFeatureCount() < 1) { |
| | | return null; |
| | | } |
| | |
| | | Feature feature = layer.GetFeature(0); |
| | | String wkt = feature.GetGeometryRef().ExportToWkt(); |
| | | |
| | | layer.delete(); |
| | | dataSource.delete(); |
| | | driver.delete(); |
| | | |
| | | return new ShpRecordEntity(wkt, csid); |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | return null; |
| | | } finally { |
| | | GdbHelper.delete(layer, dataSource, driver); |
| | | } |
| | | } |
| | | |
| | |
| | | * 读取ShapeFile文件获取Mark实体类 |
| | | */ |
| | | public static List<MarkJsonEntity> readShpForMarks(String filePath) { |
| | | Driver driver = null; |
| | | DataSource dataSource = null; |
| | | Layer layer = null; |
| | | try { |
| | | org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (driver == null) { |
| | | driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (null == driver) { |
| | | return null; |
| | | } |
| | | |
| | | DataSource dataSource = driver.Open(filePath); |
| | | Layer layer = dataSource.GetLayer(0); |
| | | dataSource = driver.Open(filePath); |
| | | if (null == dataSource) { |
| | | return null; |
| | | } |
| | | |
| | | layer = dataSource.GetLayer(0); |
| | | FeatureDefn featureDefn = layer.GetLayerDefn(); |
| | | Map<Integer, Field> fieldMap = new HashMap(5); |
| | | for (int i = 0, count = featureDefn.GetFieldCount(); i < count; i++) { |
| | |
| | | return null; |
| | | } |
| | | |
| | | List<MarkJsonEntity> list = new ArrayList<MarkJsonEntity>(); |
| | | for (int i = 0; i < count; i++) { |
| | | Feature f = layer.GetFeature(i); |
| | | MarkJsonEntity me = new MarkJsonEntity(i + 1); |
| | | for (Integer key : fieldMap.keySet()) { |
| | | Field field = fieldMap.get(key); |
| | | switch (field.getType().toString()) { |
| | | case "double": |
| | | field.set(me, f.GetFieldAsDouble(i)); |
| | | break; |
| | | case "long": |
| | | field.set(me, f.GetFieldAsInteger64(i)); |
| | | break; |
| | | case "int": |
| | | field.set(me, f.GetFieldAsInteger(i)); |
| | | break; |
| | | default: |
| | | field.set(me, f.GetFieldAsString(i)); |
| | | break; |
| | | } |
| | | } |
| | | me.setWkt(f.GetGeometryRef().ExportToWkt()); |
| | | |
| | | list.add(me); |
| | | } |
| | | |
| | | layer.delete(); |
| | | driver.delete(); |
| | | |
| | | return list; |
| | | return setMarkJsonEntity(layer, fieldMap); |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | return null; |
| | | } finally { |
| | | GdbHelper.delete(layer, dataSource, driver); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置标绘实体类 |
| | | */ |
| | | private static List<MarkJsonEntity> setMarkJsonEntity(Layer layer, Map<Integer, Field> fieldMap) throws Exception { |
| | | List<MarkJsonEntity> list = new ArrayList<MarkJsonEntity>(); |
| | | for (int i = 0; i < layer.GetFeatureCount(); i++) { |
| | | Feature f = layer.GetFeature(i); |
| | | |
| | | MarkJsonEntity me = new MarkJsonEntity(i + 1); |
| | | for (Integer key : fieldMap.keySet()) { |
| | | Field field = fieldMap.get(key); |
| | | switch (field.getType().toString()) { |
| | | case "double": |
| | | field.set(me, f.GetFieldAsDouble(i)); |
| | | break; |
| | | case "long": |
| | | field.set(me, f.GetFieldAsInteger64(i)); |
| | | break; |
| | | case "int": |
| | | field.set(me, f.GetFieldAsInteger(i)); |
| | | break; |
| | | default: |
| | | field.set(me, f.GetFieldAsString(i)); |
| | | break; |
| | | } |
| | | } |
| | | me.setWkt(f.GetGeometryRef().ExportToWkt()); |
| | | |
| | | list.add(me); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return ShapeFile文件名 |
| | | */ |
| | | public static String createShp(List<MarkJsonEntity> list, String path, String type) { |
| | | Driver driver = null; |
| | | DataSource dataSource = null; |
| | | Layer layer = null; |
| | | try { |
| | | org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (driver == null) { |
| | | driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (null == driver) { |
| | | return null; |
| | | } |
| | | |
| | | String filePath = path + File.separator + type.toLowerCase() + ".shp"; |
| | | // DataSource ds = driver.Open(filePath, 0) |
| | | DataSource ds = driver.CreateDataSource(filePath, null); |
| | | dataSource = driver.CreateDataSource(filePath, null); |
| | | if (null == dataSource) { |
| | | return null; |
| | | } |
| | | |
| | | SpatialReference sr = new SpatialReference(); |
| | | sr.ImportFromEPSG(4326); |
| | | |
| | | int geoType = getGeometryType(type); |
| | | Layer layer = ds.CreateLayer(type.toLowerCase(), sr, geoType); |
| | | layer = dataSource.CreateLayer(type.toLowerCase(), sr, geoType); |
| | | if (null == layer) { |
| | | return null; |
| | | } |
| | | |
| | | FieldDefn fdName = new FieldDefn("name", ogr.OFTString); |
| | | fdName.SetWidth(50); |
| | |
| | | layer.CreateFeature(f); |
| | | } |
| | | |
| | | layer.delete(); |
| | | ds.delete(); |
| | | driver.delete(); |
| | | |
| | | return filePath; |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | return null; |
| | | } finally { |
| | | GdbHelper.delete(layer, dataSource, driver); |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | public static <T> List<T> readData(Class clazz, String filePath) { |
| | | List<T> list = new ArrayList<>(); |
| | | try { |
| | | |
| | | Driver driver = null; |
| | | DataSource dataSource = null; |
| | | try { |
| | | driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (null == driver) { |
| | | return list; |
| | | } |
| | | |
| | | dataSource = driver.Open(filePath); |
| | | if (null == dataSource) { |
| | | return list; |
| | | } |
| | | |
| | | Layer layer = dataSource.GetLayer(0); |
| | | GdbHelper.readLayer(clazz, layer, list); |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | } finally { |
| | | GdbHelper.delete(dataSource, driver); |
| | | } |
| | | |
| | | return list; |