⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geoxygenereader.java

📁 用于GIS(全球地理系统)的分析和处理的代码。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	/** Convert a GM_LineString to a GeoLine */
	private GeoLine geOxygeneLineStringToGeoLine(int id, GM_Object geom) {
		GM_LineString geOxyLineString = (GM_LineString)geom;
		DirectPositionList dpl = geOxyLineString.coord();
		int nbPts = dpl.size();
		GeoLine geoLine = new GeoLine(id,dpl.toArrayX(),dpl.toArrayY(),nbPts );
		return geoLine;						
	}
	
	
	/** Convert a GM_Polygon (single, without holes) to a Polygon */
	private GeoPolygon geOxygenePolygonToGeoPolygon(int id, GM_Object geom) {
		GM_Polygon geOxyPolygon = (GM_Polygon)geom;
		DirectPositionList dpl = geOxyPolygon.coord();
		int nbPts = dpl.size();
		GeoPolygon geoPoly = new GeoPolygon (id,dpl.toArrayX(), dpl.toArrayY(),	nbPts );
		return geoPoly;						
	}
	
	
	private void addGeoShape(FT_Feature feature, GM_Object geom) {
		if (GM_Point.class.isAssignableFrom(geom.getClass())) {
			((PointLayer)layer).addGeoPoint(geOxygenePointToGeoPoint(feature.hashCode(), geom));
		}
		else if (GM_MultiPoint.class.isAssignableFrom(geom.getClass())) {
			GM_Aggregate aggr = (GM_Aggregate)geom;
			aggr.initIterator();
			while (aggr.hasNext()) 
				((PointLayer)layer).addGeoPoint(geOxygenePointToGeoPoint(feature.hashCode(), aggr.next()));
		}
		else if (GM_LineString.class.isAssignableFrom(geom.getClass())) {
			((LineLayer)layer).addGeoLine(geOxygeneLineStringToGeoLine(feature.hashCode(),geom));
		} 
		else if (GM_MultiCurve.class.isAssignableFrom(geom.getClass())) {
			GM_Aggregate aggr = (GM_Aggregate)geom;
			aggr.initIterator();
			while (aggr.hasNext()) 
			((LineLayer)layer).addGeoLine(geOxygeneLineStringToGeoLine(feature.hashCode(),aggr.next()));											
		}
		else if (GM_Polygon.class.isAssignableFrom(geom.getClass())) {
			GM_Polygon poly = (GM_Polygon)geom;
			GM_Polygon ext = new GM_Polygon (poly.getExterior());					
			((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon( feature.hashCode(), ext) );
			for (int i=0; i<poly.sizeInterior(); i++) {
				GM_Polygon inter = new GM_Polygon (poly.getInterior(i));
				((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon(feature.hashCode(), inter) );
			}
		} 
		else if (GM_MultiSurface.class.isAssignableFrom(geom.getClass())) {
			GM_Aggregate aggr = (GM_Aggregate)geom;
			aggr.initIterator();
			while (aggr.hasNext()) {
				GM_Polygon poly = (GM_Polygon)aggr.next();
				GM_Polygon ext = new GM_Polygon (poly.getExterior());					
				((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon( feature.hashCode(), ext) );
				for (int i=0; i<poly.sizeInterior(); i++) {
					GM_Polygon inter = new GM_Polygon (poly.getInterior(i));
					((PolygonLayer)layer).addGeoPolygon(geOxygenePolygonToGeoPolygon(feature.hashCode(), inter) );
				}
			}									
		}			
		else {
			System.out.println(" ## GeOxygeneReader works only for GM_Point, GM_LineString or GM_Polygon or MultiPrimitives");
			System.out.println(" ## Have tried to read : " + geom.getClass().getName());
			return;
		}		
	}
		
	
	/** Fills geodata objects with all of the fields of the collection.	*/
	public Object[] readData() {
		Vector columnNames = new Vector();
		Vector rowData = new Vector();
		
		// Fill columnNames
		Field[] fields = getAccessibleFields();
		int nbFields = fields.length;
		for (int i=0; i<nbFields; i++) 
			columnNames.add(fields[i].getName());
			
		// Fill rowData
		coll.initIterator();
		while (coll.hasNext()) {
			FT_Feature feature = coll.next();
			Vector row = new Vector();
			for (int i = 0; i < nbFields; i++) 
				try {		
					row.add ( fields[i].get(feature) );
				} catch (Exception e) {
					System.out.println(e.getMessage());
					row.add(null);
				}
			rowData.add(row);
		}
		
		return new Vector[] {columnNames, rowData};
		
	}
	
	
	/** Fills a geodata objects with this field.
	 * Field type MUST be String ou double. */
	private GeoData readData(String fieldName) {
		SimpleGeoData data = new SimpleGeoData();
		try {			
			Field field = getAccessibleField(fieldName);
			coll.initIterator();
			if (field.getType().equals(String.class))  {
				data.setDataType(GeoData.CHARACTER);
				while (coll.hasNext()) {
					FT_Feature feature = coll.next();
					Object obj = field.get(feature);
					if (obj != null)
						data.setText(feature.hashCode(), (String) obj );
				}	
			} else if (field.getType().equals(double.class)) {
				data.setDataType(GeoData.FLOATING);
				while (coll.hasNext()) {
					FT_Feature feature = coll.next();
					Object obj = field.get(feature);
					if (obj != null)
						data.setValue(feature.hashCode(), ((Double)obj).doubleValue());
				}
			} else if (field.getType().equals(int.class)) {
				data.setDataType(GeoData.FLOATING);
				while (coll.hasNext()) {
					FT_Feature feature = coll.next();
					Object obj = field.get(feature);
					if (obj != null)
						data.setValue(feature.hashCode(), ((Integer)obj).doubleValue());
				}
			} else {
				System.out.println("readData() : works only for String or double or int "+fieldName);
				return data;
			}	
		} catch (Exception e) {
			e.printStackTrace();
		}		
		return data;

		
	}

	
	/** Returns all fields name. */
	public String[] getFieldsNames() {
		Field[] fields = ObjectBrowser.getAccessibleFields(featureClass, SHOW_PUBLIC_ATTRIBUTES, SHOW_PROTECTED_ATTRIBUTES);
		String[] strings = new String[fields.length];
		for (int i=0; i<strings.length; i++)
			strings[i] = fields[i].getName();
		return strings;	
	}
	
	
	/** Returns all possible values for a litteral field. */
	private String[] getPossibleValues (String fieldName) {
		Set values = new HashSet();
		Field field = getAccessibleField(fieldName);
		coll.initIterator();
		while (coll.hasNext()) {
			FT_Feature feature = coll.next();
			try {
				values.add(field.get(feature));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		String[] result = new String[values.size()];
		Iterator it = values.iterator();
		int i= 0;
		while (it.hasNext()) {
			result[i] = (String) it.next();
			i++;
		}
		return  result;
	
	}
	
	
	public Class getFieldType (String fieldName) {
		return getAccessibleField(fieldName).getType();
	}
	
	
	private Field getAccessibleField (String fieldName) {
		Field[] fields = getAccessibleFields();
		for (int i=0; i<fields.length; i++)
			if (fields[i].getName().equals(fieldName)) return fields[i];
		System.out.println("No field found : "+fieldName+" class "+featureClass);
		return null;
	}
	
	
	private Field[] getAccessibleFields() {
		return ObjectBrowser.getAccessibleFields(featureClass, SHOW_PUBLIC_ATTRIBUTES, SHOW_PROTECTED_ATTRIBUTES);
	}
	
	
	private Color getRandomColor() {
		return new Color((float)Math.random(),(float)Math.random(),(float)Math.random());
	}
	
	
	public FT_FeatureCollection getFeatureCollection() {
		return coll;
	}
	
	
	public FT_Feature getFeatureById (int id) {
		coll.initIterator();
		while (coll.hasNext()) {
			FT_Feature f = coll.next();
			if (f.hashCode() == id) 
				return f;
		}
		System.out.println("### No feature found - id = "+id);
		return null;
	}
	
		
	class InitUniqueShader extends Thread {
		Shader shader;
		String shadedBy;
		public InitUniqueShader(Shader sh, String field) {
			shader = sh;
			shadedBy = field;
		}		
		public void run() {
			UniqueShader uShader = (UniqueShader) shader;
			Field field = getAccessibleField(shadedBy);
			String[] values = getPossibleValues(shadedBy);
			int n = values.length;
			Color[] colors = new Color[n];
			for (int i=0; i<n; i++) 
				colors[i] = getRandomColor();
			coll.initIterator();
			while (coll.hasNext()) {
				FT_Feature feature = coll.next();
				String value = null;
				try {
					value = (String) field.get(feature);
				} catch (Exception e) {
					e.printStackTrace();
				}
				for (int i=0; i<n; i++) {
					if (value == null) 	{
						uShader.setColor(feature.hashCode(),ObjectViewerThemeProperties.DEFAULT_MISSING_VALUE_SHADER_COLOR);
						break;
					}
					if (value.equals(values[i])) {					
						uShader.setColor(feature.hashCode(),colors[i]);
						break;
					}

				}
			}
		}		
		public Shader getShader() {
			return shader;
		}
	}
			
			
	class InitHSVShader extends Thread {
		Shader shader;
		String shadedBy;
		public InitHSVShader(Shader sh, String field) {
			shader = sh;
			shadedBy = field;
		}		
		public void run() {
			SimpleGeoData data = (SimpleGeoData) readData(shadedBy);
			theme.setGeoData(data);
			shader.setRange(data);
			
		}		
		public Shader getShader() {
			return shader;
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -