首页 / 浏览问题 / 移动GIS / 问题详情
iMobile如何实现对三维点数据集的点击查询
10EXP 2024年02月15日
使用产品:iMobile for android 10i

问题:我通过获取本地点数据集在三维跟踪图层进行了显示和标注,请问应该如何实现点数据的点击查询功能,并通过气泡或者文本框显示获取的属性信息,我研究相关的示例代码没有研究明白,因为时间比较急,我又不知道从哪里下手,可以麻烦提供一个代码示例嘛,感谢!!!

1个回答

您好,可以使用trackinglayer3D.hitTest(Point point)返回选中的屏幕像素点所对应的三维几何对象的 ID,再用trackingLayer3D.get(int index)返回指定对象
3,660EXP 2024年02月18日

您好,可以请问下我应该如何将您给出的示例修改我的代码呢?

我创建了一个BubbleView的类,它包含气泡的大小,位置,文本,颜色的设置,在MainActivity中调用代码如下

sceneControl.setOnTouchListener(new View.OnTouchListener() {
                               @Override
                               public boolean onTouch(View v, MotionEvent event) {
                                   //获取屏幕坐标
                                 android.graphics.Point point = new android.graphics.Point((int) event.getX(),(int) event.getY());
                                   //坐标转换
                                   Point3D screenpoint = null;
                                   screenpoint = scene.pixelToGlobe(point);
                                   Point point1 = new Point((int) event.getX(), (int) event.getY());
                                   Point2D screenpoint2d = new Point2D(screenpoint.getX(), screenpoint.getY());
                                   TrackingLayer3D trackingLayer3D = scene.getTrackingLayer();
                                   //遍历数据集中点数据
                                   for(int a=0;a<imp_point.getCount();a++){
                                       Point2D dibiao = imp_point.getItem(a);
                                       GeoCircle scope = new GeoCircle(dibiao,2);
                                       boolean inscope = scope.hitTest(screenpoint2d,0.5);
                                       if(inscope){
                                           //返回选中的屏幕像素点所对应的三维几何对象的 ID
                                          /* int index = trackingLayer3D.hitTest(point1);
                                           //返回指定对象
                                           trackingLayer3D.get(index);*/
                                           setContentView(R.layout.layout);
                                          bubbleView = new BubbleView(MainActivity.this);
                                           bubbleView = findViewById(R.id.bubble_view);
                                           if(bubbleView !=null){
                                               bubbleView.setPosition((int) event.getX(), (int) event.getY());
                                               bubbleView.setText("这是一个气泡");
                                           }

                                       }

                                   }
                                   return false;
                               }
                           });

但是并未实现我想要的效果,这里有两个问题,一个是气泡不能在当前界面展示,他会重新再生成一个页面

第二个问题是它并不是一个屏幕坐标只对应一个匹配的对象,位置相近的会匹配两次,是应该修改容限范围吗,有没有更好的办法啊

请问我该如何修改?麻烦您了

您好,我还想问下,这种通过将获取到的屏幕坐标与数据集中点坐标进行匹配,然后通过气泡显示文本的实现思路是否可行?
scenecontrol继承了android.view.SurfaceView的方法,可以在安卓api中查找相关方法
...