首页 / 浏览问题 / 组件GIS / 问题详情
iObjects java 沿线注记生成CAD数据集
2EXP 2018年06月13日
根据线对象生成专题图之后,把专题图转CAD数据集,CAD数据集一直为空。之前操作点的可以正常生成。

有实现过的吗?能否给个例子

1个回答

我试了一下,生成的CAD是有数据的,用的是layer的themeToDatasetVector方法,没有问题啊

你可以贴代码看看。

698EXP 2018年06月14日
用的9D的themeToDatasetVector,点的没问题,线的生成沿线注记转的的CAD是没有数据的。你用9D的试试沿线的转CAD后是否有数据?
设置了setAlongLine()方法后,相比不沿线,CAD中的记录少了一些。

我猜测这是由于转换为CAD时保存的记录数为你当前比例尺状态下专题图能显示注记的数量。

你保存为CAD时专题图上能看到沿线注记吗?
你用的是9D吗?

转换为CAD时保存的记录数的确是你当前比例尺状态下专题图能显示注记的数量。

现在我是同一个专题图图层,同一比例尺,desktop转CAD有数据,java代码实现就是空的。
是9D。

我分别在桌面和Java代码里实现了这个功能,都正常。

但在java里只是很简单的设置了标签专题图沿线显示、转CAD功能,也许是你其他代码有冲突?
能把你代码贴一下吗?我试了好多方法,9D就是不行。但是8C可以

我的代码很简单,就这几行

						themelabel.setUniformStyle(txtstyle);
						themelabel.setAlongLine(true);
						//
						mapcontrol1.getMap().getLayers().add(dset, themelabel, true).setVisible(true);
						mapcontrol1.getMap().refresh();
						ltree.reload();
						labelDialog.dispose();
						//转CAD
						mapcontrol1.getMap().getLayers().get(0).themeToDatasetVector(workspace1.
						getDatasources().get(2), "CAD1");

8C可以,9D不行?我没有用过8C的iObjects Java,你能用8C弄出来说明你的代码可行啊。我才疏学浅,实在是想不到你弄不出来的原因。。。假如你自查到了,给我说说,学习一个。

你在你那里跑一下这个,看生成的CAD里面是否有数据? 

import java.awt.Color;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.supermap.data.CursorType;
import com.supermap.data.DatasetVector;
import com.supermap.data.Datasource;
import com.supermap.data.DatasourceConnectionInfo;
import com.supermap.data.EngineType;
import com.supermap.data.Recordset;
import com.supermap.data.StringAlignment;
import com.supermap.data.TextAlignment;
import com.supermap.data.TextStyle;
import com.supermap.data.Workspace;
import com.supermap.data.WorkspaceConnectionInfo;
import com.supermap.data.WorkspaceType;
import com.supermap.mapping.Layer;
import com.supermap.mapping.Map;
import com.supermap.mapping.ThemeLabel;

public class LineNoteAvoid {

    public static void main(String[] args) {

        String udbPath = "C:/Users/T470p/Desktop/VectrTile/NOTE/LINE.udb";

        String workSpaceFile = "C:/Users/T470p/Desktop/VectrTile/NOTE/LINE.smwu";

        Workspace workSpace = null;

        if (new File(workSpaceFile).exists()) {
            new File(workSpaceFile).delete();
        }

        workSpace = createWorkspace(workSpaceFile);

        DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo();
        datasourceConnectionInfo.setEngineType(EngineType.UDB);
        datasourceConnectionInfo.setServer(udbPath);
        datasourceConnectionInfo.setReadOnly(false);
        Datasource source = workSpace.getDatasources().open(datasourceConnectionInfo);
        source.getDatasets().delete("NOTE");
        DatasetVector dataset = (DatasetVector)source.getDatasets().get(0);
        System.out.println("count:" + dataset.getRecordCount());

        Map map = new Map(workSpace);

        ThemeLabel theme = new ThemeLabel();
        // 设置注记取值字段
        theme.setLabelExpression("NAME");
        // 设置是否沿线显示文本
        theme.setAlongLine(true);
        Layer layertheme = map.getLayers().add(dataset, theme, true);

        layertheme.setVisible(true);
        map.refresh();
        map.setScale(0.0000007325520218248011745353122330772);
        layertheme.themeToDatasetVector(source, "NOTE");
        map.refresh();
        workSpace.getMaps().clear();
        workSpace.getMaps().add("note", map.toXML());
        workSpace.save();
        List<NoteAvoidData> dataList = new ArrayList<NoteAvoidData>();
        if(!source.getDatasets().contains("NOTE")){
            System.out.println("未生成注记数据集");
        }else{
            DatasetVector noteSet = (DatasetVector)source.getDatasets().get("NOTE");
            Recordset record = noteSet.getRecordset(false, CursorType.STATIC);
            System.out.println("生成注记数量:" + record.getRecordCount());
        }
        workSpace.dispose();
    }


    /**
     * 
     * 
     * @return
     */
    public static TextStyle getTextStyle(){
        TextStyle style = new TextStyle();
        style.setFontName("宋体");
        style.setAlignment(TextAlignment.TOPLEFT);
        style.setStringAlignment(StringAlignment.LEFT);
        style.setBackColor(Color.BLACK);
        style.setForeColor(Color.WHITE);
        style.setOutline(true);
        style.setSizeFixed(true);
        style.setFontHeight(3.8800705467372141);
        style.setFontWidth(0);
        style.setWeight(400);
        return style;
    }

    /**
     * 
     * 
     * @param workSpacePath
     */
    public static Workspace openWorkspace(String workSpacePath) {
        Workspace workspace = new Workspace();
        WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
        workspaceConnectionInfo.setType(WorkspaceType.SMWU);
        workspaceConnectionInfo.setServer(workSpacePath);
        workspace.open(workspaceConnectionInfo);
        return workspace;
    }

    public static Workspace createWorkspace(String workSpacePath) {
        Workspace workspace = new Workspace();
        WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
        workspaceConnectionInfo.setType(WorkspaceType.SMWU);
        workspaceConnectionInfo.setServer(workSpacePath);
        workspace.create(workspaceConnectionInfo);
        return workspace;
    }
    
}

还有,你沿线用的矢量数据集是线型的吗?
我刚看了你的代码,发现把所有用到map改成mapcontrol.getMap()就可以了。

具体原理我再想想,你试试
按上面说的改了可以了,很怪,用map的话线性数据集的专题图出不来。但是点的数据集无论是否沿线都可以出来。

非常感谢!!!!!
...