GeoTools 簡單記錄
阿新 • • 發佈:2018-11-13
選擇19.0版本:https://sourceforge.net/projects/geotools/files/GeoTools%2019%20Releases/19.0/
主要是記錄一:shp檔案存在還是不存在呼叫的方法
// 判斷檔案是否存在 public void judeFileExists() throws Exception { // 1.建立shape檔案物件 File file = new File(filepath_myPoint); if (!file.exists()) { System.out.println("***********檔案不存在***********"); Map<String, Serializable> params = new HashMap<>(); // 用於捕獲引數需求的資料類 // URLP:url to the .shp file. params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL()); // 2.建立一個新的資料儲存——對於一個還不存在的檔案。 shapefileDataStore = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params); // 3.定義圖形資訊和屬性資訊 // SimpleFeatureTypeBuilder 構造簡單特性型別的構造器 final SimpleFeatureType TYPE = createFeatureType(); // 設定此資料儲存的特徵型別 shapefileDataStore.createSchema(TYPE); // 設定編碼,防止中文讀取亂碼 shapefileDataStore.setCharset(Charset.forName("UTF-8")); } else { System.out.println("**************檔案已存在***********"); // 構建一個已存在的shapfile資料來源 // ShapefileDataStore:資料儲存實現,允許從Shapefiles讀取和寫入 shapefileDataStore = (ShapefileDataStore) new ShapefileDataStoreFactory() .createDataStore(file.toURI().toURL()); // 設定編碼,防止中文讀取亂碼 shapefileDataStore.setCharset(Charset.forName("UTF-8")); } }
記錄二:如果想在一個shp檔案中新增一個動點,動點的取值範圍必須在shp檔案比例尺範圍內
/** * 1.1根據X,Y座標構建一個幾何物件: 點 【Point】 // System.out.println("X: " + layer.getBounds().getMinX() + " ~ " + layer.getBounds().getMaxX()); // xmin = layer.getBounds().getMinX(); // xmax = layer.getBounds().getMaxX(); // System.out.println("Y: " + layer.getBounds().getMinY() + " ~ " + layer.getBounds().getMaxY()); // ymin = layer.getBounds().getMinY(); // ymax = layer.getBounds().getMaxY(); * @param x * @param y * @return */ public Point createPoint(){ double x, y; x = xmin + ((xmax - xmin) * new Random().nextDouble()); y = ymin + ((ymax - ymin) * new Random().nextDouble()); // 保留五位小數 String x_str = decimalFormat.format(x); String y_str = decimalFormat.format(y); Coordinate coord = new Coordinate(Double.valueOf(x_str),Double.valueOf(y_str)); Point point = geometryFactory.createPoint(coord); return point; }
記錄三:動點樣式【是一個自定義小圖片】
/** * 設定動點是圖片樣式 * @return * @throws MalformedURLException */ private Style createPoint_GraphicsBasedStyle() throws MalformedURLException { StyleBuilder sb = new StyleBuilder(); String filePath=new File(System.getProperty("user.dir")+"/images").getAbsolutePath(); String iconPath = filePath+"\\XXXX.png"; URL url=new File(iconPath).toURI().toURL(); ExternalGraphic icon = sb.createExternalGraphic(url, "image/png"); // Graphic graph2 = sb.createGraphic(null, circle, null, 1.0, 4.0, 0.0); //使用內部已知圖元 Graphic graph2 = sb.createGraphic(icon, null, null, 1.0, 26.0, 0.0); //使用外部圖片 PointSymbolizer symbolizer = sb.createPointSymbolizer(graph2); symbolizer.getGraphic().setSize(filterFactory2.literal(30)); //設定大小 Rule rule = sb.createRule(symbolizer); FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(new Rule[]{rule}); Style style = styleFactory.createStyle(); style.featureTypeStyles().add(fts); return style; }