| | |
| | | package com.lf.server.helper; |
| | | |
| | | import com.lf.server.entity.all.BaseGeoEntity; |
| | | import com.lf.server.entity.all.StaticData; |
| | | import com.lf.server.mapper.all.GeomBaseMapper; |
| | | import com.lf.server.service.all.BaseQueryService; |
| | | import org.apache.commons.logging.Log; |
| | | import org.apache.commons.logging.LogFactory; |
| | | import org.gdal.ogr.*; |
| | | import org.gdal.osr.SpatialReference; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.sql.Timestamp; |
| | |
| | | public class GdbHelper { |
| | | private final static Log log = LogFactory.getLog(GdbHelper.class); |
| | | |
| | | private static List<String> excludeFields = new ArrayList<>(Arrays.asList("gid", "objectid", "dirid", "depid", "verid","createtime", "createuser", "updateuser", "updatetime", "shape_leng", "shape_area")); |
| | | private final static String OBJECT ="java.lang.Object"; |
| | | |
| | | /** |
| | | * 销毁资源 |
| | |
| | | try { |
| | | driver = ogr.GetDriverByName("OpenFileGDB"); |
| | | if (null == driver) { |
| | | log.error("GdbHelper.getTabNames: OpenFileGDB is null"); |
| | | return list; |
| | | } |
| | | |
| | | dataSource = driver.Open(filePath, 0); |
| | | if (null == dataSource) { |
| | | log.error("GdbHelper.getTabNames.dataSource is null. " + filePath); |
| | | return list; |
| | | } |
| | | |
| | |
| | | FieldDefn fieldDefn = fd.GetFieldDefn(i); |
| | | try { |
| | | String name = fieldDefn.GetName().toLowerCase(); |
| | | if (excludeFields.contains(name)) { |
| | | if (StaticData.READ_EXCLUDE_FIELDS.contains(name)) { |
| | | continue; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | if ("java.lang.Object" != clazz.getSuperclass().getName()) { |
| | | if (OBJECT != clazz.getSuperclass().getName()) { |
| | | getFieldMapper(clazz.getSuperclass(), layer, map); |
| | | } |
| | | } catch (Exception ex) { |
| | |
| | | |
| | | return Timestamp.valueOf(localDateTime); |
| | | } |
| | | |
| | | /** |
| | | * 创建GDB |
| | | */ |
| | | public static void createGdb(String filePath, Map<String, List<?>> map) { |
| | | Driver driver = null; |
| | | DataSource dataSource = null; |
| | | try { |
| | | driver = ogr.GetDriverByName("OpenFileGDB"); |
| | | if (null == driver) { |
| | | return; |
| | | } |
| | | |
| | | dataSource = driver.CreateDataSource(filePath); |
| | | if (null == dataSource) { |
| | | return; |
| | | } |
| | | |
| | | for (String key : map.keySet()) { |
| | | GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(key); |
| | | if (null == baseMapper) { |
| | | continue; |
| | | } |
| | | Layer layer = createLayer(dataSource, baseMapper); |
| | | if(null == layer){ |
| | | continue; |
| | | } |
| | | |
| | | String className = ClassHelper.getClassName(baseMapper); |
| | | Class clazz = ClassHelper.getEntityClass(className); |
| | | |
| | | List<?> list = map.get(key); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage(), ex); |
| | | } finally { |
| | | GdbHelper.delete(dataSource, driver); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 创建图层 |
| | | */ |
| | | private static Layer createLayer(DataSource dataSource, GeomBaseMapper baseMapper ) { |
| | | String tab = BaseQueryService.getTabName(baseMapper); |
| | | if (StringHelper.isNull(tab)) { |
| | | return null; |
| | | } |
| | | |
| | | String geomType = baseMapper.selectGeometryType(tab); |
| | | if (StringHelper.isEmpty(geomType)) { |
| | | return null; |
| | | } |
| | | |
| | | Integer srid = baseMapper.selectSrid(tab); |
| | | SpatialReference sr = new SpatialReference(); |
| | | sr.ImportFromEPSG(null == srid ? 4326 : srid); |
| | | |
| | | Layer layer = dataSource.CreateLayer(tab, sr, getGeomType(geomType), null); |
| | | |
| | | return layer; |
| | | } |
| | | |
| | | /** |
| | | * 获取Geom类别 |
| | | */ |
| | | private static Integer getGeomType(String geomType) { |
| | | if (StringHelper.isEmpty(geomType)){ |
| | | return ogr.wkbUnknown; |
| | | } |
| | | |
| | | switch (geomType){ |
| | | case "ST_Point": |
| | | return ogr.wkbPoint; |
| | | case "ST_LineString": |
| | | return ogr.wkbLineString; |
| | | case "ST_MultiLineString": |
| | | return ogr.wkbMultiLineString; |
| | | case "ST_Polygon": |
| | | return ogr.wkbPolygon; |
| | | case "ST_MultiPolygon": |
| | | return ogr.wkbMultiPolygon; |
| | | default: |
| | | return ogr.wkbUnknown; |
| | | } |
| | | } |
| | | } |