首页 / 浏览问题 / 移动GIS / 问题详情
android 根据经纬度添加图斑并显示
30EXP 2020年08月06日
你好,

我想根据几个点(坐标是经纬度)来创建面,添加对象并显示在超图上。

有什么方法吗?

1个回答

您好,根据已知点坐标来构造面对象,使用面几何对象的构造方法,GeoRegion geoRegion = new GeoRegion(Point2Ds);point2Ds存储经纬度坐标,详情可以参考API文档。
9,137EXP 2020年08月07日
       GeoRegion geoRegion = new GeoRegion();
        Point2Ds point2Ds = new Point2Ds();
        //其起始点和终止点重合
        for (int i = 0; i < point2DList.size(); i++) {
            point2Ds.add(point2DList.get(i));
        }
        geoRegion.addPart(point2Ds);

        Datasource datasource = workspace.getDatasources().get(0);
        DatasetVector dataset = (DatasetVector) datasource.getDatasets().get(0);
        Recordset recordset = dataset.getRecordset(false, CursorType.DYNAMIC);
        recordset.edit();
        recordset.addNew(geoRegion);
        recordset.update();
        recordset.close();
        geoRegion.dispose();
        recordset.dispose();

        mapControl.getMap().getLayers().add(dataset,true);
        mapControl.getMap().refresh();

这是我根据已知点坐标来构造面对象并添加记录集并显示的代码,可是我这样操作后界面卡住了,而且也没有添加成功显示,这是什么原因呢?

1.数据集类型是不是面数据集?
2.在添加记录时不要对记录集开启编辑recordset.edit();
3.调试一下代码addNew方法返回是否为true

你好,感谢你的回答。

1.数据集类型确定是面数据集,我采用的工作控件为

/SampleData/MapEdit/changchun.smwu

数据源为数据源数组索引1名称edit,数据集为edit数据源的数据集数组索引2名称为Region

2.取消recordset.edit();后addNew方法返回为true。

但是还是卡住并且没有显示,请问还有什么地方有错误吗?

看一下代码是卡在哪一步了,使用TrackingLayer.add()方法将几何对象添加到地图上看是否显示
GeoRegion geoRegion = new GeoRegion();
Point2Ds point2Ds = new Point2Ds();
//其起始点和终止点重合
for (int i = 0; i < point2DList.size(); i++) {
    point2Ds.add(point2DList.get(i));
}
point2Ds.add(point2DList.get(0));
geoRegion.addPart(point2Ds);

mapControl.getMap().getTrackingLayer().add(geoRegion,"123");
mapControl.getMap().refresh();

使用TrackingLayer.add()方法也不显示

您那边现在写一个简单的方法看一下,参考一下下面这个代码

Point2Ds point2Ds = new Point2Ds();
point2Ds.add(new Point2D(114,36));
point2Ds.add(new Point2D(120,40));
GeoRegion geoRegion = new GeoRegion(point2Ds);
m_mapcontrol.getMap().getTrackingLayer().add(geoRegion,"gg");
在World.smwu上可以。
我想问在workspace:/SampleData/GeometryInfo/World.smwu这个工作空间

可以根据坐标来绘制面,但是不能自由绘面

在workspace:/SampleData/GeometryInfo/changchun.smwu这个工作空间

可以自由绘面,但是不能根据坐标来绘制面

这个原理是什么啊,绘面添加对象跟工作空间有关系吗

绘制面跟工作空间是没有关系的,您那边可以在桌面iDesktop软件自己新建一个数据源和数据集,然后保存一个工作空间,将工作空间和数据源拷贝到移动端使用,您使用长春的数据进行坐标绘制不显示,有一个原因是因为长春的数据坐标系是平面坐标系,您使用经纬度绘制的面对象在地图上应该是已经显示出来了,只是不在当前地图的显示范围。使用构造方法绘制面设置的坐标尽量是地图坐标系下的坐标值。

根据坐标来绘制面,这个坐标的经纬度是否需要和地图相关联啊?

你看第一个我采用长沙,上海,台北,广州四个点经纬度可以成功绘面

point2DList.add(new Point2D(112.98626, 28.25591));
point2DList.add(new Point2D(121.48941, 31.40527));
point2DList.add(new Point2D(121.520076, 25.030724));
point2DList.add(new Point2D(113.27324, 23.15792));

第二个采用x,y坐标也可以成功

point2Ds.add(new Point2D(114,36));
point2Ds.add(new Point2D(120,40));
point2Ds.add(new Point2D(100,40));

但是第三个我采用长春市的吉林大学,长春国际会展中心,长春师范大学,吉林大学四个经纬度就绘制不成功了

 point2DList.add(new Point2D(125.288776, 43.83281));
point2DList.add(new Point2D(125.400885, 43.842382));
point2DList.add(new Point2D(125.403184, 43.9189));
point2DList.add(new Point2D(125.273253, 43.918069));
经纬度本身和地图没有关联,但是你要显示在地图上就需要坐标系一致了,因为绘制的Geometry是没有坐标系的,只有一个坐标值,如果是投影坐标系,那么你设置的面对象的位置就是在100米左右的位置,这个数据就会显示在100米的坐标处;如果坐标系是经纬度坐标系,那么你绘制的面对象就在你设置的经纬度值位置
这个我知道,但是你看我上一个回答,第三个面和第一个采用的都是经纬度坐标系,但是第一个成功了,第三个就不成功,我想问的是这个问题。
您所说的不成功是指地图上没有显示还是什么呢?
...