| | |
| | | |
| | | import com.lf.server.entity.ctrl.MarkJsonEntity; |
| | | import com.lf.server.entity.ctrl.ShpRecordEntity; |
| | | import com.lf.server.entity.data.MetaFileEntity; |
| | | import org.apache.commons.logging.Log; |
| | | import org.apache.commons.logging.LogFactory; |
| | | import org.gdal.gdal.Band; |
| | |
| | | import org.gdal.osr.SpatialReference; |
| | | |
| | | import java.io.File; |
| | | import java.lang.reflect.Field; |
| | | import java.sql.Time; |
| | | import java.sql.Timestamp; |
| | | import java.time.LocalDate; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 读取ShapeFile文件获取Mark实体类 |
| | | */ |
| | | public static List<MarkJsonEntity> readShpForMarks(String filePath) { |
| | | try { |
| | | org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile"); |
| | | if (driver == null) { |
| | | return null; |
| | | } |
| | | |
| | | DataSource dataSource = driver.Open(filePath); |
| | | Layer 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++) { |
| | | try { |
| | | FieldDefn fieldDefn = featureDefn.GetFieldDefn(i); |
| | | Field field = MarkJsonEntity.class.getDeclaredField(fieldDefn.GetName().toLowerCase()); |
| | | field.setAccessible(true); |
| | | fieldMap.put(i, field); |
| | | } catch (Exception e) { |
| | | // |
| | | } |
| | | } |
| | | |
| | | long count = layer.GetFeatureCount(); |
| | | if (count == 0 || fieldMap.size() == 0) { |
| | | 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; |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 创建ShapeFile文件 |
| | | * |
| | | * @param list 标绘JSON实体类集合 |