当前位置: 代码迷 >> GIS >> GIS惯用方法总结
  详细解决方案

GIS惯用方法总结

热度:257   发布时间:2016-05-05 06:29:47.0
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);		}

?

  相关解决方案