# 图形处理

处理图形一般通过两种方式来实现

  • 方法一: 组合成新地图 composeNewMap
 /**
 * 组合成新地图
 * @param param 组合参数
 * @return {Promise<any>}
 */
composeNewMap(param: IComposeNewMap | IComposeNewMap[]): Promise<any>;
/**
 * 组合新地图参数
 */
export  interface IComposeNewMap {
    /** 地图ID. */
    mapid: string;
    /** 地图版本(为空时采用当前打开的地图版本). */
    version?: string;
    /** 地图裁剪范围,范围如[x1,y1,x2,y2], 为空的话,表示不裁剪 */
    clipbounds?: [number, number, number, number];
    /** 选择是包含还是相交(默认false表示包含,true相交) */
    selByCrossing?: boolean;
    /** 四参数(x偏移,y偏移,缩放,旋转弧度),可选,对坐标最后进行修正*/
    fourParameter?: [number, number, number, number];
    /** 是否用上面的四参数进行反算,默认false*/
    isInverseFourParamter?: boolean;
    /** 要显示的图层名称,为空的时候,表示全部图层 */
    layers?: string[];
    /** 生新成图的图层名称前缀,如果设置为null将不会有默认的图层前缀。如果没有前缀,不同的图有图层重名时,如果设置了随层属性有可能会导致绘制的不一样 */
    layerPrefix?: string;
    /** 生新成图的图层名称后缀 */
    layerSuffix?: string;
    /** 保存的文件名称,为空的时候,自根据参数自动生成 */
    savefilename?: string;
    /** 生成后清理图形数据以减少dwg文件大小 */
    purge?: boolean;
    /** 来源于其他图的实体时,如果块定义重复,则自动重命名 ,默认true */
    isRenameBlockNameIfExist?: boolean;
    /** 是不是创建完缩放至全图 默认false (如果有多个图合并,只需设置第一个图的) */
    isZoomExtents?: boolean;
    /** 导出的CAD版本号。如果为*表示为当前CAD图的版本 */
    cadVersion?: string | "*" | "cad2000" | "cad2004" | "cad2007" | "cad2010" | "cad2013" | "cad2018";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

如提取一个CAD图几个图层的数据保存为新图

let svc = new vjmap.Service(env.serviceUrl, env.accessToken)

// js代码
let res = await svc.composeNewMap({
    mapid: "sys_zp",
    vesion: "v1",
    layers: ["红线", "道路"]
})
1
2
3
4
5
6
7
8
  • 方法二: 基于模板图创建新图
export  class DbDocument {
    /** 来源于哪个图,会在此图的上面进行修改或新增删除,格式如 形式为 mapid/version,如 exam/v1 . */
    from?: string;
    /** 来源于哪个图时有效,表示从此图中选择指定的图层,不在指定的图层将不会显示 */
    pickLayers?: string[];
    /** 来源于哪个图时有效,表示从此图中选择指定的实体ID,不在指定的实体ID将不会显示 */
    pickEntitys?: string[];
    /** 来源于哪个图时有效,使用表达式,表示从此图中选择指定的实体ID,不在指定的实体ID将不会显示 结果与pickEntitys的取并 */
    pickExpr?: string;
    isClearFromDb?: boolean;
    /** 文档环境,用于设置是否显示线宽等设置, 设置线宽为 LWDISPLAY ,true显示或 false不显示线宽*/
    environment?: Record<string, any>;
    /** 实体集. */
    entitys?: IDbEntity[];
    /** 图层集. */
    layers?: IDbLayer[];
    /** 文字样式. */
    textStyles?: IDbTextStyle[];
    /** 标注样式. */
    dimStyles?: IDbDimStyle[];
    /** 线型. */
    linetypes?: IDbLinetype[];
    /** 块定义. */
    blocks?: IDbBlock[];
    /** 来源于其他图的实体时,如果块定义重复,则自动重命名 ,默认true */
    isRenameBlockNameIfExist?: boolean;
    /** 是不是创建完缩放至全图 默认false */
    isZoomExtents?: boolean;

    //... 其他方法省略
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

如提取一个CAD图几个图层的数据保存为新图

let svc = new vjmap.Service(env.serviceUrl, env.accessToken)
let doc = new vjmap.DbDocument();
doc.from = "sys_zp/v1";
doc.pickLayers = ["红线", "道路"]
// js代码
let res = await svc.updateMap({
    mapid: "newsyszplayers",
    filedoc: JSON.stringify(doc),
    mapopenway: vjmap.MapOpenWay.Memory,
    style: {
        backcolor: 0 // 如果div背景色是浅色,则设置为oxFFFFFF
    }
})
1
2
3
4
5
6
7
8
9
10
11
12
13

# 裁剪图形

let svc = new vjmap.Service(env.serviceUrl, env.accessToken)

// js代码
let res = await svc.composeNewMap({
    mapid: "sys_zp",
    vesion: "v1",
    /** 地图裁剪范围,范围如[x1,y1,x2,y2], 为空的话,表示不裁剪 */
    clipbounds?: [x1,y1,x2,y2];
})
1
2
3
4
5
6
7
8
9

# 坐标转换

let svc = new vjmap.Service(env.serviceUrl, env.accessToken)

// js代码
let res = await svc.composeNewMap({
    mapid: "sys_zp",
    vesion: "v1",
    /** 四参数(x偏移,y偏移,缩放,旋转弧度),可选,对坐标最后进行修正*/
    fourParameter?: [number, number, number, number];
})
1
2
3
4
5
6
7
8
9

# 合并图形

// --图形处理合成新的图形--通过将图形列表处理后,再合成一个新的图形
let svc = new vjmap.Service(env.serviceUrl, env.accessToken)
// 组合成新的图,将sys_world图进行一定的处理后,再与sys_hello进行合成,生成新的地图文件名
let rsp = await svc.composeNewMap([
    {
        mapid: "sys_world", // 地图id
        // 下面的参数可以根据实际需要来设置,可以对图层,范围,坐标转换来进行处理
        //layers: ["经纬度标注","COUNTRY"], // 要显示的图层名称列表
        //clipbounds: [10201.981489534268, 9040.030491346213, 26501.267379,  4445.465999], // 要显示的范围
        //fourParameter: [0,0,2,0] // 对地图进行四参数转换计算
    },
    {
        mapid: "sys_hello"
    }
])
if (!rsp.status) {
    message.error(rsp.error)
}
// 返回结果为
/*
{
    fileid: "pefbe7459b06",
    mapdependencies: "sys_world||sys_hello",
    mapfrom: "sys_world&&v1&&&&0&&&&&&&&&&&&10||sys_hello&&v1&&&&0&&&&&&&&&&&&2",
    status: true
}
 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
显示代码
全屏显示


图形排列组合成新图形示例 (opens new window)

# 提取图层

使用composeNewMaplayers也可以提取图层,这里使用DbDocument做为示例

显示代码
全屏显示