1. 程式人生 > >GeoTools 簡單記錄

GeoTools 簡單記錄

選擇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;
    }