GIS惯用方法总结
GIS常用方法总结
// 记录下当前地图的屏幕中心点 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); }