首页 / 浏览问题 / 移动GIS / 问题详情
如何在界面上添加点、线、面
21EXP 2018年09月11日

使用产品:iMobile 9D  操作系统:win7 x64
数据类型:文件型
问题详细描述:从官网百度云下载的Demo中Collector工程无法正常使用
问题重现步骤: 1.点击官网-iMobile 2.下载百度云下面的Demo文件 3.导入Android Studio工程 4.运行版本,点击定位,没有绘制箭头和当前位置

在引入超图平台前,我们做了百度和谷歌地图的支持。即百度、谷歌上对应的基本点为Marker,线为Polylin,多边形为Polygon。随后将对应的地图添加在地图上即可。

点-addMarker

线-addPolyline

面-addPolygon

但超图这边对应的并没有找到对应的方法。


问题:

  1. 感觉上有很多GpsPoint,Point2D,DynamicPoint等类型,查看了Demo中的Collector发现:是否添加都必须经过Collector?
  2. 还有在对当前位置进行绘制时,Collector的Demo中相关方法全部进行了注释,请问有实际能够运行的Demo吗?

Collectors中MainActivity#drawCircleOnDyn()方法中全部都进行了注释

	public void drawCircleOnDyn(Point2D pnt2D, float dAzimuth, double dAccuracy){
		//copy another point2D
//		Point2D point2D = new Point2D(pnt2D.getX(), pnt2D.getY());
//		if(point2D.getX() == 0 && point2D.getY() == 0){
//			System.out.println("Unable to draw position.");
//			return;
//		}
//		if(mDynamicView == null || mMapControl == null){
//			return;
//		}
//
//		//当投影不是经纬坐标系时,则对点进行投影转换
//		PrjCoordSys Prj = mMapControl.getMap().getPrjCoordSys();
//		if (Prj.getType() != PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE) {
//			Point2Ds points = new Point2Ds();
//			points.add(point2D);
//			PrjCoordSys desPrjCoorSys = new PrjCoordSys();
//			desPrjCoorSys.setType(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE);
//			CoordSysTranslator.convert(points, desPrjCoorSys, Prj,
//					new CoordSysTransParameter(),
//					CoordSysTransMethod.MTH_GEOCENTRIC_TRANSLATION);
//
//			point2D.setX(points.getItem(0).getX());
//			point2D.setY(points.getItem(0).getY());
//		}
//		//定位的精度
//		if(dAccuracy <= 0 || dAccuracy > 500){  //无效精度范围
//			dAccuracy = dUnit;//默认半径为60米
//		}
//		else{
//			dAccuracy = 60;//dUnit * (m_MyLocation.getAccuracy() / 60.0);
//		}
		
		//添加动态对象
		if(mDynPointID == -1 && mDynPolygonID == -1){
//			DynamicCircle dynGeoCircle = new DynamicCircle();
//			dynGeoCircle.addPoint(new Point2D(point2D.getX(), point2D.getY()));
//			dynGeoCircle.setRadius(dAccuracy/*100*//*mMapControl.getMap().getBounds().getWidth() / 100000*/);//单位:米
//			
//			DynamicStyle styleGeCircle  = new DynamicStyle();
//			styleGeCircle.setAlpha(60);
//			styleGeCircle.setBackColor(Color.rgb(255, 255, 255));//52, 168, 83
//			styleGeCircle.setSize(5);
//			styleGeCircle.setLineColor(Color.rgb(51, 129, 204));//172, 52, 48
//			dynGeoCircle.setStyle(styleGeCircle);
//			mDynamicView.addElement(dynGeoCircle);
//			mDynGeoCircle = dynGeoCircle;
//			mDynPolygonID = dynGeoCircle.getID();

//			//绘制中心点
//			DynamicPoint dynPoint = new DynamicPoint();
//			dynPoint.addPoint(point2D);
//			DynamicStyle dynStyle = new DynamicStyle();
//			dynStyle.setBackground(BitmapFactory.decodeResource(mMapControl.getResources(), R.drawable.navi_popup_small_2_1));
//			dynStyle.setAngle(dAzimuth);
//			dynPoint.setStyle(dynStyle);
//			
//			mDynamicView.addElement(dynPoint);
//			mDynGeoPoint = dynPoint;
//			mDynPointID = dynPoint.getID();
//			
//			mDynamicView.refresh();
		}
		//修改动态对象
		else{
			//绘制中心圆
//			mDynGeoCircle.setPoint(new Point2D(point2D.getX(), point2D.getY()));
//			mDynGeoCircle.setRadius(dAccuracy);//单位:米
//			
//			//绘制中心点
//			DynamicStyle dynStyle = new DynamicStyle();
//			dynStyle.setBackground(BitmapFactory.decodeResource(mMapControl.getResources(), R.drawable.navi_popup_small_2_1));
//			dynStyle.setAngle(dAzimuth);
//			mDynGeoPoint.setPoint(point2D);
//			mDynGeoPoint.setStyle(dynStyle);
//			
//			mDynamicView.refresh();
		}
		
	}

2 个回答

您好,您是想将之前的数据直接应用到超图产品吗?

思路如下:
1.查看您原有数据格式,看是否可以通过数据导入,生成适用于超图产品的数据集。您可以通过iDesktop在PC上导入制作数据,也可用iMoible导入,在产品帮助文档中可以搜索“导入数据集”
2.您说的Marker 图标,这是数据在地图上的显示风格,超图产品支持设置图层风格,可设置需要显示的符号库。但如果你使用的是一个图片,需先制作成超图的符号库,可通过iDesktop制作符号库,iMobile暂不支持
3. 在超图产品中,所有几何对象都继承于Geometry,都以Geo开头命名,Geometry是和矢量数据集关联,存储在UDB数据源中。而GPSPoint代表的是GPS点, Point2D 表示几何对象中的某个点坐标或地图上的某个坐标,DynamicPoint是用于DynamicView显示的对象,各自的用途不同。
4. 您所看到的Collector Demo只是我们众多Demo中的一个,它是演示数据采集功能的,和您所需要的应该不太一样,您可在iMobile的产品文档中查看“范例程序”了解更多的示范代码,如数据转换,动态层显示
694EXP 2018年09月12日
谢谢,您的回答。我现在是需求是

1.一些WGS84下的坐标点,需要绘制在地图上,如何绘制例如,pt1(23:00:00 114:00:00 34)

2.绘制点要有特定的图标

3.线面也是同样原理,请问有办法吗?因为我看到很多demo都是直接读取的测试数据的
你好,你是想做绘制点、线、面的功能吗?绘制点线面的话需要有对应的图层,然后对这个图层设置可编辑。layer.setEditable(true),然后用mapcontrol.setAction(Action) 可以在帮助文档搜索一下Action。另外我们有个范例程序MapEdit可以参考。
9,232EXP 2018年09月11日
具体的需求有两个:

1.自定义绘制点、线、面。因为通过matcontrol.setAction(Action)来进行绘制时,要素显示单一。我有自定义的图标

2.显示当前位置,目前我所掌握的是通过DynamicPoint,DynamicView来实现。但在demo这段代码完全被注释掉。Collector的Demo中的drawCirlceOnDyn方法
...