# 图形处理
处理图形一般通过两种方式来实现
- 方法一: 组合成新地图 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
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
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
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
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
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
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
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)
# 提取图层
使用composeNewMap
的layers
也可以提取图层,这里使用DbDocument
做为示例