package com.hdmap.fymas; import java.io.IOException; import com.esri.arcgis.geodatabase.Feature; import com.esri.arcgis.geodatabase.FeatureClass; import com.esri.arcgis.geodatabase.FeatureCursor; import com.esri.arcgis.geodatabase.Field; import com.esri.arcgis.geodatabase.Fields; import com.esri.arcgis.geodatabase.IDataset; import com.esri.arcgis.geodatabase.IDatasetName; import com.esri.arcgis.geodatabase.IEnumDataset; import com.esri.arcgis.geodatabase.IEnumDatasetName; import com.esri.arcgis.geodatabase.IFeatureBuffer; import com.esri.arcgis.geodatabase.IFeatureCursor; import com.esri.arcgis.geodatabase.IWorkspace; import com.esri.arcgis.geodatabase.esriDatasetType; import com.esri.arcgis.geodatabase.esriFieldType; import com.esri.arcgis.geodatabasedistributed.GeoDataServer; import com.esri.arcgis.geometry.IPoint; import com.esri.arcgis.geometry.Point; import com.esri.arcgis.interop.AutomationException; import com.esri.arcgis.server.IServerContext; import com.esri.arcgis.server.IServerObjectManager; import com.esri.arcgis.server.ServerConnection; import com.esri.arcgis.system.Cleaner; import com.esri.arcgis.system.ServerInitializer; public class GeoDataServerMain { private static String user = "cmt";// private static String password = "a";// private static String domain = "172.16.17.156"; private static String host = "172.16.17.156"; private static String servicesName = "qin/usaqiny"; private static ServerConnection conn = null; private static IServerContext serverContext = null; private static IServerObjectManager som = null; private static GeoDataServer gdbserver = null; private static IWorkspace workspace = null; public static void initGeoDataServer() { /*** 连接到ArcGISSever */ try { new ServerInitializer().initializeServer(domain, user, password); conn = new ServerConnection(); conn.connect(host); som = conn.getServerObjectManager(); serverContext = som.createServerContext(servicesName, "GeoDataServer"); gdbserver = (GeoDataServer) serverContext.getServerObject(); workspace = gdbserver.getDefaultWorkingWorkspace(); System.out.print("已连接到ArcGIS Sever"); } catch (Exception e) { e.printStackTrace(); gdbserver = null; workspace = null; som = null; } } public static void main(String[] args) throws Exception { // GeoDataServerMain it = new GeoDataServerMain(); initGeoDataServer(); browseFileGDB(workspace); insertFeaturesUsingCursor(workspace); browseFileGDB(workspace); serverContext.releaseContext(); } /** * 显示所有的图层 * @param workspace */ public static void browseFileGDB(IWorkspace workspace) { try { IEnumDatasetName enumDatasetName = workspace .getDatasetNames(esriDatasetType.esriDTAny); IDatasetName dsName = enumDatasetName.next(); while (dsName != null) { System.out.println("Dataset Name: " + dsName.getName()); dsName = enumDatasetName.next(); } IEnumDataset enumDataset = workspace .getDatasets(esriDatasetType.esriDTFeatureClass); IDataset ds = enumDataset.next(); while (ds != null) { FeatureClass fClass = new FeatureClass(ds); query(fClass); int fCount = fClass.featureCount(null); System.out.println("FeatureClass " + fClass.getAliasName() + " has " + fCount + " features."); ds = enumDataset.next(); } } catch (Exception e) { e.printStackTrace(); } } /**查询数据 * @param featureClass * @throws AutomationException * @throws IOException */ public static void query(FeatureClass featureClass) throws AutomationException, IOException { FeatureCursor featureCursor = new FeatureCursor(featureClass.search( null, true)); Feature feature = (Feature) featureCursor.nextFeature(); Fields fields = (Fields) featureCursor.getFields(); int fieldCount = fields.getFieldCount(); for (int index = 0; index < fieldCount; index++) { Field field = (Field) fields.getField(index); String fieldName = field.getName(); System.out.print(fieldName + "\t"); } System.out.println(); while (feature != null) { StringBuffer row = new StringBuffer(); for (int index = 0; index < fieldCount; index++) { int fieldType = feature.getFields().getField(index).getType(); switch (fieldType) { case esriFieldType.esriFieldTypeDate: case esriFieldType.esriFieldTypeDouble: case esriFieldType.esriFieldTypeGlobalID: case esriFieldType.esriFieldTypeGUID: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeOID: case esriFieldType.esriFieldTypeSingle: case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeString: row.append(feature.getValue(index) + "\t"); break; case esriFieldType.esriFieldTypeBlob: row.append("(blob)" + "\t"); break; case esriFieldType.esriFieldTypeGeometry: row.append("(geometry)" + "\t"); break; case esriFieldType.esriFieldTypeRaster: row.append("(raster)" + "\t"); break; } } if (row.length() > 0) { System.out.println(row); } feature = (Feature) featureCursor.nextFeature(); } } /** * 插入数据 * @param workspace * @throws Exception */ private static void insertFeaturesUsingCursor(IWorkspace workspace) throws Exception { IEnumDataset enumDataset = workspace .getDatasets(esriDatasetType.esriDTFeatureClass); IDataset ds = enumDataset.next();// 这里就有一个图层,所以就这么写了,应该获得图层然后进行操作 while (ds != null) { FeatureClass featureClass = new FeatureClass(ds); IFeatureBuffer featureBuffer = featureClass.createFeatureBuffer(); IFeatureCursor insertCursor = featureClass .IFeatureClass_insert(false); // 这里是关键 // 不能 Point point= new Point(); IPoint point = (IPoint) serverContext .createObject(Point.getClsid()); point.setX(100); point.setY(200); featureBuffer.setShapeByRef(point); insertCursor.insertFeature(featureBuffer); ds = enumDataset.next(); insertCursor.flush(); Cleaner.release(insertCursor); } } }
package com.hdmap.fymas; import java.io.IOException; import java.util.List; import com.esri.arcgis.carto.FeatureLayer; import com.esri.arcgis.carto.IFeatureLayer; import com.esri.arcgis.geodatabase.Feature; import com.esri.arcgis.geodatabase.FeatureClass; import com.esri.arcgis.geodatabase.FeatureCursor; import com.esri.arcgis.geodatabase.Field; import com.esri.arcgis.geodatabase.Fields; import com.esri.arcgis.geodatabase.IDataset; import com.esri.arcgis.geodatabase.IDatasetName; import com.esri.arcgis.geodatabase.IEnumDataset; import com.esri.arcgis.geodatabase.IEnumDatasetName; import com.esri.arcgis.geodatabase.IFeatureBuffer; import com.esri.arcgis.geodatabase.IFeatureClass; import com.esri.arcgis.geodatabase.IFeatureCursor; import com.esri.arcgis.geodatabase.IWorkspace; import com.esri.arcgis.geodatabase.esriDatasetType; import com.esri.arcgis.geodatabase.esriFieldType; import com.esri.arcgis.geodatabasedistributed.GeoDataServer; import com.esri.arcgis.geometry.IPoint; import com.esri.arcgis.geometry.Point; import com.esri.arcgis.interop.AutomationException; import com.esri.arcgis.server.IServerContext; import com.esri.arcgis.server.IServerObjectManager; import com.esri.arcgis.server.ServerConnection; import com.esri.arcgis.system.Cleaner; import com.esri.arcgis.system.ServerInitializer; import com.hdmap.fymas.fire.bean.FirePoint; import com.hdmap.fymas.utils.ReadFromFileUtil; public class GeoDataServerMain { private static String user = "cmt";// private static String password = "a";// private static String domain = "172.16.17.156"; private static String host = "172.16.17.156"; private static String servicesName = "qin/usaqiny"; private static ServerConnection conn = null; private static IServerContext serverContext = null; private static IServerObjectManager som = null; private static GeoDataServer gdbserver = null; private static IWorkspace workspace = null; public static void initGeoDataServer() { /*** 连接到ArcGISSever */ try { new ServerInitializer().initializeServer(domain, user, password); conn = new ServerConnection(); conn.connect(host); som = conn.getServerObjectManager(); serverContext = som.createServerContext(servicesName, "GeoDataServer"); gdbserver = (GeoDataServer) serverContext.getServerObject(); workspace = gdbserver.getDefaultWorkingWorkspace(); System.out.print("已连接到ArcGIS Sever"); } catch (Exception e) { e.printStackTrace(); gdbserver = null; workspace = null; som = null; } } public static void main(String[] args) throws Exception { // GeoDataServerMain it = new GeoDataServerMain(); initGeoDataServer(); browseFileGDB(workspace); String fileName = "D:/FIR_PLST_FY3A_MERSI_1000M_EJ_P001_20110426024500.TXT"; List alist = ReadFromFileUtil.readFirePointByLines(fileName); System.out.println(alist); // insertFeaturesUsingCursor(workspace); insertFirePoint(workspace, alist); browseFileGDB(workspace); serverContext.releaseContext(); } /** * 插入数据 * * @param workspace * @throws Exception */ @SuppressWarnings("unused") private static void insertFeaturesUsingCursor(IWorkspace workspace, String featureName) throws Exception { FeatureClass featureClass = getFeatureClassByName(workspace, featureName); IFeatureBuffer featureBuffer = featureClass.createFeatureBuffer(); IFeatureCursor insertCursor = featureClass.IFeatureClass_insert(false); // 这里是关键 // 不能 Point point= new Point(); IPoint point = (IPoint) serverContext.createObject(Point.getClsid()); point.setX(100); point.setY(200); featureBuffer.setShapeByRef(point); insertCursor.insertFeature(featureBuffer); insertCursor.flush(); Cleaner.release(insertCursor); } /** * 根据FeatureClassName 获得FeatureClass * * @param workspace * @param FeatureClassName * @return * @throws AutomationException * @throws IOException */ public static FeatureClass getFeatureClassByName(IWorkspace workspace, String FeatureClassName) throws AutomationException, IOException { IEnumDataset enumDataset = workspace .getDatasets(esriDatasetType.esriDTFeatureClass); IDataset ds = enumDataset.next();// FeatureClass featureClass = null; while (ds != null) { if (FeatureClassName.equals(ds.getName())) { featureClass = new FeatureClass(ds); } ds = enumDataset.next(); } return featureClass; } /** * 显示所有的图层 * * @param workspace */ public static void browseFileGDB(IWorkspace workspace) { try { IEnumDatasetName enumDatasetName = workspace .getDatasetNames(esriDatasetType.esriDTAny); IDatasetName dsName = enumDatasetName.next(); while (dsName != null) { System.out.println("Dataset Name: " + dsName.getName()); dsName = enumDatasetName.next(); } IEnumDataset enumDataset = workspace .getDatasets(esriDatasetType.esriDTFeatureClass); IDataset ds = enumDataset.next(); while (ds != null) { FeatureClass fClass = new FeatureClass(ds); query(fClass); int fCount = fClass.featureCount(null); System.out.println("FeatureClass " + fClass.getAliasName() + " has " + fCount + " features."); ds = enumDataset.next(); } } catch (Exception e) { e.printStackTrace(); } } /** * 查询数据 * * @param featureClass * @throws AutomationException * @throws IOException */ public static void query(FeatureClass featureClass) throws AutomationException, IOException { FeatureCursor featureCursor = new FeatureCursor(featureClass.search( null, true)); Feature feature = (Feature) featureCursor.nextFeature(); Fields fields = (Fields) featureCursor.getFields(); int fieldCount = fields.getFieldCount(); for (int index = 0; index < fieldCount; index++) { Field field = (Field) fields.getField(index); String fieldName = field.getName(); System.out.print(fieldName + "\t"); } System.out.println(); while (feature != null) { StringBuffer row = new StringBuffer(); for (int index = 0; index < fieldCount; index++) { int fieldType = feature.getFields().getField(index).getType(); switch (fieldType) { case esriFieldType.esriFieldTypeDate: case esriFieldType.esriFieldTypeDouble: case esriFieldType.esriFieldTypeGlobalID: case esriFieldType.esriFieldTypeGUID: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeOID: case esriFieldType.esriFieldTypeSingle: case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeString: row.append(feature.getValue(index) + "\t"); break; case esriFieldType.esriFieldTypeBlob: row.append("(blob)" + "\t"); break; case esriFieldType.esriFieldTypeGeometry: row.append("(geometry)" + "\t"); break; case esriFieldType.esriFieldTypeRaster: row.append("(raster)" + "\t"); break; } } if (row.length() > 0) { System.out.println(row); } feature = (Feature) featureCursor.nextFeature(); } } /** * 插入火点数据 * * @param workspace * @throws Exception */ @SuppressWarnings("unused") private static void insertFirePoint(IWorkspace workspace, List<FirePoint> fpList) throws Exception { // IEnumDataset enumDataset = workspace // .getDatasets(esriDatasetType.esriDTFeatureClass); // IDataset ds = enumDataset.next();// 这里就有一个图层,所以就这么写了,应该获得图层然后进行操作 String fName = "fire_p"; // while (ds != null) { FeatureClass featureClass = getFeatureClassByName(workspace, fName); // FeatureClass featureClass = new FeatureClass(ds); IFeatureBuffer featureBuffer = featureClass.createFeatureBuffer(); IFeatureCursor insertCursor = featureClass.IFeatureClass_insert(false); for (int i = 0; i < fpList.size(); i++) { // 这里是关键 FirePoint fp = fpList.get(i); IPoint point = (IPoint) serverContext .createObject(Point.getClsid()); point.setX(fp.getX()); point.setY(fp.getY()); featureBuffer.setShapeByRef(point); insertCursor.insertFeature(featureBuffer); } // ds = enumDataset.next(); insertCursor.flush(); Cleaner.release(insertCursor); // } } }