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);

		}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值