arcgis 4.x Point3dSymbol 随着line变化的名称方式

https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/index.html  官方案例地址

 

1.效果截图

 

2.symbol的创建格式

{
    type: "point-3d", //json格式类型标注
    symbolLayers: [{
        type: "icon", //
        resource: {
            href: name //图标加載路徑
        },
        size: 20, 图标大小
        outline: {
            color: "white", // 图标外圆颜色
            size: 2         // 边框宽度
        }
    }],

    verticalOffset: {
        screenLength: 40,      
        maxWorldLength: 200,   //最大显示高度
        minWorldLength: 35     //最小显示高度
    },

    callout: {
        type: "line",    // 联系线的类型
        color: "white",  // 颜色
        size: 2,         // 宽度
        border: {          
            color: color // 边线颜色
        }
    }
};

 

3. 不知道如何创建随动态line变化的name

一开始用的GraphicLayer 来加载  发现并不能实现名称自动的问题  然后决定使用renderer渲染器来解决这个问题

 

4. FeatureLayer 的使用方法

使用渲染器的话 就不得不提到这个图层了。一开始我对FeatureLayer的认识还停留在对已经编辑好的服务进行渲染显示的层度 后来认真看了一下api发现 它支持

source属性(一个graphics容器数组) 支持add添加  这样就好办多了  于是 代码如下
var graphics = [{
	geometry: {
		type: "point",
		x: 12352848.781849042,
		y: 2482358.72638897,
		spatialReference: {
			wkid: 102100
		}
	},
	attributes: {
		name: "测试名称",
		type: "name",
		aons: "测试名称"
	}
}]


function getUniqueValueSymbol(name, color) {
	// The point symbol is visualized with an icon symbol. To clearly see the location of the point
	// we displace the icon vertically and add a callout line. The line connects the offseted symbol with the location
	// of the point feature.
	return {
		type: "point-3d", // autocasts as new PointSymbol3D()
		symbolLayers: [{
			type: "icon", // autocasts as new IconSymbol3DLayer()
			resource: {
				href: name
			},
			size: 20,
			outline: {
				color: "white",
				size: 2
			}
		}],

		verticalOffset: {
			screenLength: 40,
			maxWorldLength: 200,
			minWorldLength: 35
		},

		callout: {
			type: "line", // autocasts as new LineCallout3D()
			color: "white",
			size: 2,
			border: {
				color: color
			}
		}
	};
}


var pointsRenderer = {
	type: "unique-value", // autocasts as new UniqueValueRenderer()
	field: "type",
	uniqueValueInfos: [{
			value: "name",
			symbol: getUniqueValueSymbol(
				"https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/live/Museum.png",
				"#ffffff"
			)
		},
		{
			value: "Museum",
			symbol: getUniqueValueSymbol(
				"https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/live/Museum.png",
				"#D13470"
			)
		},
		{
			value: "Restaurant",
			symbol: getUniqueValueSymbol(
				"https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/live/Restaurant.png",
				"#F97C5A"
			)
		},
		{
			value: "Church",
			symbol: getUniqueValueSymbol(
				"https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/live/Church.png",
				"#884614"
			)
		},
		{
			value: "Hotel",
			symbol: getUniqueValueSymbol(
				"https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/live/Hotel.png",
				"#56B2D6"
			)
		},
		{
			value: "Park",
			symbol: getUniqueValueSymbol(
				"https://developers.arcgis.com/javascript/latest/sample-code/visualization-point-styles/live/Park.png",
				"#40C2B4"
			)
		}
	]
};

var Fealayer = new FeatureLayer({
	source: graphics,
	fields: [{
		name: "name",
		alias: "name",
		type: "string"
	}, {
		name: "type",
		alias: "type",
		type: "string"
	}, {
		name: "aons",
		alias: "aons",
		type: "string"
	}],
	objectIdField: "name",
	geometryType: "point",
	renderer: pointsRenderer,
	labelingInfo: [{
		labelExpressionInfo: {
			expression: "$feature.aons"
		},
		symbol: {
			type: "label-3d",
			symbolLayers: [{
				type: "text",
				material: {
					color: "white"
				},
				halo: {
					size: 1,
					color: [50, 50, 50]
				},
				size: 10
			}]
		}
	}]
});

5.结论

 使用featureLayer + LabelClass的组合可以高效便捷的创建点分布已经名称跟随 非常方便且实用的一种渲染形式

posted @ 2020-09-15 17:27  blurs  阅读(351)  评论(0编辑  收藏  举报