// 记录下当前地图的屏幕中心点
eMyPoint2D centerPoint = new eMyPoint2D(mapWnd.getWidth() / 2, mapWnd.getHeight() / 2);
// 获得GridNo图层
eMyLayer gridNoLayer2 = mapWnd.GetMap().GetLayerByName("GridNo");
// 物理坐标
eMyPoint2D myPoint2D = new eMyPoint2D(px, py);
查询一个点所在GridNo图层某个区域的GRIDNO的值
// 查询myPoint2D这个点附近100个单位的对象
eMyResultSet rs2 = gridNoLayer2.QueryByPoint(myPoint2D, mapWnd.DevToGeo(100));
// 必不可少!!获取对象
rs2.HasNext();
// 获取到GRIDNO的值,有时候查到的NewGRIDNO值是空
String NewGRIDNO = rs2.GetString("GRIDNO");
// 定位到某个点
public void MoveToPoint(double px, double py) {
MapUtil.showPoint(String.valueOf(px), String.valueOf(py));
int jj = 0;
if (px != -1 && py != -1) {
System.out.println("定时器开始定位!");
// 物理坐标
eMyPoint2D myPoint2D = new eMyPoint2D(px, py);
// 获得GridNo图层
eMyLayer gridNoLayer2 = mapWnd.GetMap().GetLayerByName("GridNo");
// 查询myPoint2D这个点附近100个单位的对象
eMyResultSet rs2 = gridNoLayer2.QueryByPoint(myPoint2D, mapWnd
.DevToGeo(100));
// 必不可少!!获取对象
rs2.HasNext();
// 获取到GRIDNO的值,有时候查到的NewGRIDNO值是空
String NewGRIDNO = rs2.GetString("GRIDNO");
// GRIDNO不空
if (!NewGRIDNO.equals("")) {
// 不相等,就加载新地图
if (!NewGRIDNO.equals(GRIDNO)) {
loadNewMap(NewGRIDNO);
}
} else {
System.out.println("读到的GRIDNO为空!无法自动切换地图!");
}
// 定位到px,py点
mapWnd.ZoomTo(px, py, radio);
mapWnd.reDraw();// 那个Ondraw在redraw就会触发
mapWnd.repaint(0, 0);
}
// 加载新地图
public void loadNewMap(String _GridNo) {
// 切换地图,需要记录当前地图的平面中心点坐标和放大比例
double currentZoom = mapWnd.GetZoom();
try {
// 是否有权限加载该地图的地图
if (MapUtil.isLoad(gridnos, _GridNo)) {
// SDCard有该地图的文件
if (SDCard.hasMapFile(_GridNo)) {
mapWnd.Close();
int bRet = mapWnd.Open(SDCard.getMapFilePath(_GridNo));
// 加载失败的几种情况
if (bRet != 1) {
MapUtil.loadError(bRet, MapBrowseView.this);
// 还是加载原来的图
bRet = mapWnd.Open(SDCard.getMapFilePath(GRIDNO));
mapWnd.ZoomTo(0, 0, currentZoom);
showBigClassLayer(bigClassName);
mapWnd.viewEntire();
mapWnd.reDraw();
mapWnd.repaint(0, 0);
// mapWnd.refreshDrawableState();
} else
// 加载成功
{
// GridNo重新赋值
GRIDNO = _GridNo;
showBigClassLayer(bigClassName);
mapWnd.viewEntire();
mapWnd.reDraw();
mapWnd.repaint(0, 0);
}
} else {
ShowMsg.showToast(MapBrowseView.this, nomapdate);
}
} else {
ShowMsg.showToast(MapBrowseView.this, noloadmap);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 显示指定大类图层
private void showBigClassLayer(String bigClassName2) {
// 获得大类图层
eMyLayer catetoryLayer = mapWnd.GetMap().GetLayerByName(bigClassName2);
// 如果该大类图层不为空,显示
if (catetoryLayer.GetName().toString() != "")
catetoryLayer.SetVisible(true);
}
// 长按事件
public void OnLongPress(int x, int y) {
// 获取标记的点的坐标
ShowMsg.showToast(MapShiJiSelectView.this, "标记地点成功!");
String GridCODE = "";
eMyLayer gridNoLayer;
eMyResultSet rs2;
eMyTrackingLayer tl = GetMap().TrackingLayer();
eMyGeoEvent ge = tl.GetAt("P1");
if (ge == null) {
// 没有这个Tag为P1的对象,就添加一个点
eMyGeometry geom = new eMyGeometry(1, 1);
// 逻辑坐标,不能用于查询BGCODE的值
eMyPoint mapPoint = GetMap().DrawParam().DevToMap(x, y);
// 设置个变量:转换成物理坐标
eMyPoint2D eMyPoint2D = DevToGeo(new eMyPoint(x, y));
mx = eMyPoint2D.GetX();
my = eMyPoint2D.GetY();
geom.SetPointAt(0, mapPoint);
mapPoint.Dispose();
// 设置TrackingLayer的风格
tl.GetStyle().SetBrushColor(Color.BLUE);
tl.GetStyle().SetAlpha(128);
tl.GetStyle().SetPenColor(Color.RED);
// 图标
tl.GetStyle().SetBmpIndex(84);
String tag = "P1";
tl.AddEvent(geom, eGeometryType.Point, tag, 0);
tl.SetVisible(true);
repaint(0, 0);
System.out.println("第一次标记的点=" + mx + "," + my + ")");
} else {
// 已经有了这个点了,移动这个点到新位置
// 逻辑坐标
eMyPoint devPoint = new eMyPoint(x, y);
// 物理坐标
eMyPoint2D geoPoint = DevToGeo(devPoint);
mx = geoPoint.GetX();
my = geoPoint.GetY();
ge.MoveTo(geoPoint.GetX(), geoPoint.GetY(), GetMap());
geoPoint.Dispose();
tl.SetVisible(true);
repaint(0, 0);
System.out.println("第二次标记的点=" + mx + "," + my + ")");
}
// // 根据标记的点,查询DYWG图层上的BGCODE的值
// gridNoLayer = mapWnd.GetMap().GetLayerByName("DYWG");
// // 查询这个点附近100个单位的对象
// rs2 = gridNoLayer.QueryByPoint(new eMyPoint2D(mx,
// my),
// 100);
// rs2.HasNext(); // 必不可少!!获取对象
// if (rs2 != null) {
// GridCODE = rs2.GetString("BGCODE");
// System.out.println("DYWG_BGCODE==" + GridCODE);
// }
// 定位到以标记点为中心
// mapWnd.ZoomTo(mx, my, mapWnd.GetZoom());// 定位到该点
// mapWnd.reDraw();// 那个Ondraw在redraw就会触发
// mapWnd.repaint(0, 0);
MoveToPoint(mx, my, 1);
// 根据标记的点,查询CS_DYWG图层上的BGCODE的值
gridNoLayer = mapWnd.GetMap().GetLayerByName("CS_DYWG");
// 查询这个点附近100个单位的对象
rs2 = gridNoLayer.QueryByPoint(new eMyPoint2D(mx, my), 10);
rs2.HasNext(); // 必不可少!!获取对象
if (rs2 != null) {
GridCODE = rs2.GetString("BGCODE");
System.out.println("CS_DYWG_BGCODE=" + GridCODE);
}
MapSelectView.loInfo.clear();
MapSelectView.loInfo.put("x", String.valueOf(mx));
MapSelectView.loInfo.put("y", String.valueOf(my));
MapSelectView.loInfo.put("bgcode", GridCODE);
MapSelectView.loInfo.put("gridno", GRIDNO);
}