📄 mapsearch.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 + -