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

📄 mapsearch.java

📁 java+mapxtreme 开发校园房管系统
💻 JAVA
字号:
package com.oyc.mapxtreme.util;

import java.util.HashMap;
import java.util.Vector;

import com.mapinfo.dp.Attribute;
import com.mapinfo.dp.Feature;
import com.mapinfo.dp.FeatureSet;
import com.mapinfo.dp.QueryParams;
import com.mapinfo.dp.TableInfo;
import com.mapinfo.mapj.FeatureLayer;
import com.mapinfo.mapj.Layers;
import com.mapinfo.mapj.MapJ;
import com.mapinfo.util.DoublePoint;

/**
 * 地图搜索类
 * @author 三峡大学理学院 欧阳超
 *
 */
public class MapSearch {
	
	/**
	 * 按属性搜索: 通常用于主键ID搜索
	 * @param myMap
	 * @param layerName   要搜索的图层名称
	 * @param attName     属性名
	 * @param att
	 * @param params
	 * @return            如果没搜索到,则返回null
	 * @throws Exception
	 */
	public Feature searchByAttribute(MapJ myMap, String layerName, String attName, Attribute att, QueryParams params) throws Exception{
		//取出搜索的图层
		FeatureLayer layer = (FeatureLayer) myMap.getLayers().get(layerName);
		
		//创建字段向量
		TableInfo tInfo = layer.getTableInfo();
		Vector cols = new Vector();
		for(int i=0; i<tInfo.getColumnCount(); i++){
			cols.addElement(tInfo.getColumnName(i));
		}
		
		//搜索,返回图层对象
		FeatureSet fs = layer.searchByAttribute(cols, attName, att, params);
		if(fs != null){
			Feature feature = fs.getNextFeature();
			if(feature != null){
				return feature;
			}
		}
		return null;
	}
	
	/**
	 * 在某个点上搜索图元
	 * @param myMap
	 * @param point  屏幕坐标
	 * @param params
	 * @return  如果没搜索到,则返回null
	 */
	public HashMap searchAtPoint(MapJ myMap, DoublePoint point, QueryParams params) throws Exception{
		//取出图层集合
		Layers layers = myMap.getLayers();
		if(layers == null || layers.size() < 1){
			return null;
		}
		
		//当屏幕坐标转化为实际坐标
		DoublePoint p = myMap.transformScreenToNumeric(point);
		
		FeatureLayer layer = null;
		Vector cols = null;
		TableInfo tInfo = null;
		FeatureSet fs = null;
		
		//遍历各图层
		for(int i=0; i<layers.size(); i++){
			layer = (FeatureLayer) layers.get(i);
			if(layer.isEnabled()){   //如果该图层可见
				//创建属性列向量
				cols = new Vector();
				tInfo = layer.getTableInfo();
				for(int j=0; j<tInfo.getColumnCount(); j++){
					cols.addElement(tInfo.getColumnName(j));
				}
				
				//搜索图层
				fs = layer.searchAtPoint(cols, p, params);
				if(fs != null){
					Feature feature = fs.getNextFeature();
					if(feature != null){
						HashMap map = new HashMap();
						map.put("layer", layer);
						map.put("feature", feature);
						return map;
					}
				}
			}
		}
		return null;
	}
	
	/**
	 * 在某个半径范围内搜索,返回图元集
	 * @param myMap
	 * @param layerName
	 * @param center
	 * @param radius
	 * @param units
	 * @param params
	 * @return           如果没有搜索到,返回null
	 * @throws Exception
	 */
	public FeatureSet searchInRadius(MapJ myMap, String layerName, DoublePoint center, 
			double radius, QueryParams params) throws Exception{
		
		//取出搜索的图层
		FeatureLayer layer = (FeatureLayer) myMap.getLayers().get(layerName);
		
		//当屏幕坐标转化为实际坐标
		DoublePoint p = myMap.transformScreenToNumeric(center);
		
		//创建字段向量
		TableInfo tInfo = layer.getTableInfo();
		Vector cols = new Vector();
		for(int i=0; i<tInfo.getColumnCount(); i++){
			cols.addElement(tInfo.getColumnName(i));
		}
		
		//搜索
		FeatureSet fs = layer.searchWithinRadius(cols, p, radius, myMap.getDistanceUnits(), params);
		if(fs != null){
			return fs;
		}else{
			return null;
		}
	}

}

⌨️ 快捷键说明

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