Vectors

Vector Layer

All the vector objects discussed in this section must be added to a Vector layer to be visible. The vector objects are added through the addFeatures method of the Vector layer.

Points

Points can be used to mark specific locations on the map. The point can be drawn and styled as either a point of a particular radius or as an image.

Vector points are drawn using the ALKMaps.Feature.Vector. The first parameter of the Vector object is a ALKMaps.Geometry.Point defining the location for the point. The second parameter is addition attributes related to the point. The third parameter is for style definition.

Image points

In addition to manually styling the point, you can place an image at the desired location. This is done using different properties of the style paramter.

SVG Points

You now have the ability to specify custom SVG content for point vectors using the svg attribute of the given feature. The available properties of the svg object are explained in the table below.

Property Type Description
content String A string containing an SVG element.
size ALKMaps.Size Size of the SVG element. The default size is the bounding box of the element.
offset ALKMaps.Pixel The offset of the SVG element. Default ALKMaps.Pixel(width/2,height/2)

Lines

Lines are drawn using ALKMaps.Geometry.LineString

Vector Arrows

You now have the ability to add arrows along or at the end of your ALKMaps.Geometry.LineString and ALKMaps.Geometry.MultiLineString vectors. This is done using the arrow styling properties added to the same style object parameter used to do the rest of your vector styling. Please see the table below for a decription of these properties.

Please note that you cannot use a ALKMaps.StyleMap to add arrows to your vectors. The arrow style properties will only work if they are specified inside the style object parameter of the individual ALKMaps.Feature.Vector.

Property Type/Values Description
arrows "line"|"end"|null This setting is used to enable the arrow functionality and indicate whether arrows should be placed along the line ("line"), or if a single arrow should be placed at the end of the line ("end"). The default value for this setting is null, which indicates that NO arrows should be drawn on the vector.
arrowSize number/string The size of the arrow(s) either as a number representing the point radius of the arrow, or a string indicating the size of the arrow as a percentage of the line's stroke width. Default "100%".
arrowSpacing number For "line" arrows only. The distance in pixels between arrows along the line. Default is 100.
arrowStrokeColor string Hex stroke color. Used as the color for the outline of the arrow(s). Default is "black".
arrowStrokeWidth number Pixel stroke width. Used as the thickness for the outline of the arrow(s). Default is 1.
arrowStrokeOpacity number Stroke opacity (0-1). Used as the opacity for the outline of the arrow(s). Default is 1.
arrowFillColor string Hex fill color. Used as the color for the inside of the arrow(s). Default is "white".
arrowFillOpacity number Fill opacity (0-1). Used as the opacity for the inside of the arrow(s). Default is 1.

LinearRing

A ALKMaps.Geometry.LinearRing object represents a closed sequence of points that can be filled. LinearRings are contructed from an array of points.

Polygons

Polygons are constructed using a collection of ALKMaps.Geometry.LinearRing objects. The first ring object in the collection should represent the outer bounds of the polygon and the rest of the ring objects represent internal holes.

Clustering

If you have a vector layer with the potential of a high density of points, you may choose to use clustering to provide a cleaner visualization of those points.

Strategy

When clustering is enabled, the map will automatically cluster points on the chosen layer based on two criteria. The first is a distance specified in pixels. The second criteria is a threshold of the number of points.

You now have the ability to specify the maximum zoom level at which vectors will be clustered by setting the maxZoomLevel property to the desired zoom level integer. You can set this property value inside the options object of your strategy definition. This can be useful when you have more than one vector either extremely close or at the exact same location, or if you only want to cluster at lower zoom levels where the vectors can appear too jumbled.

var clusterStrategy = new ALKMaps.Strategy.Cluster({ distance: 20, threshold: 2 });
var vectorLayer = new ALKMaps.Layer.Vector("Vector Layer", 
	{ 
		strategies: [clusterStrategy],
		styleMap: pointStyleMap 
	});
map.addLayer(vectorLayer);

Cluster by Attribute/Rule

Starting in version 1.2, in addition to distance and threshold you have the ability to cluster by attribute and/or rule. This can be done by specifying the attribute and rule properties of your cluster strategy. If an attribute is specified, only features with matching values for the specified attribute will be clustered together. If a rule is specified, only features that satisfy the rule are eligible for clustering.

This cluster strategy will only cluster vectors together if they have the same "highway" attribute value.

var clusterStrategy = new ALKMaps.Strategy.Cluster({
    distance: 50,
    threshold: 2,
    attribute: "highway"
})
                    

This cluster strategy will only cluster vectors containing a "Company" attribute with a value of "My Truck Company".

var rule = new ALKMaps.Rule({
    filter: new ALKMaps.Filter.Comparison({
        type: ALKMaps.Filter.Comparison.EQUAL_TO,
        property: "Company",
        value: "My Truck Company"
    }),
});


var clusterStrategy = new ALKMaps.Strategy.Cluster({
    distance: 50,
    threshold: 2,
    rule: rule
})

                    

Styles

To make the most of clustering, you will want to vary the styling of clustered points. You can create a style for your points that uses dynamic values to changes the visualization based on clustering.

var pointStyle = new ALKMaps.Style({
	strokeColor: "#116666",
	pointRadius: "${radius}",
	strokeWidth: 2,
	fillColor: "${fill}",
	label: "${label}"
},{
	context: {
		fill: function(feature){
			return (feature.cluster) ? "#99EEEE" :"#66AAAA";
		},
		radius: function(feature){
			return (feature.cluster) ? 15 : 8;
		},
		label: function(feature){
			return (feature.cluster) ? feature.cluster.length : "";
		}
	}
});

Dynamic values in styles are handled via the context of the style. Each function in the context will receive the feature as a parameter to allow for inspection and use in the dynamic value. If the feature is a cluster, it will have a cluster property which is an array of the features in the cluster. More details are at Styling section