d attribute in path
The infamous d
attribute in a path element for SVG is a handful. Or at least at first. Especially for mapping.
Let‘s look at a d
attribute for a geojson feature:
const feature = {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [ [
[ 13.31, 52.79 ],
[ 13.35, 52.79 ],
[ 13.35, 52.80 ],
[ 13.31, 52.80 ],
[ 13.31, 52.79 ]]]
}
};
M2.9103830456733704e-11,282.68992037849966
L400,282.68992037849966
L400,117.31007962138392
L2.9103830456733704e-11,117.31007962138392Z
Pretty daunting right? Let‘s simplify that.
M0,282L400,282L400,117L0,117Z
That looks not too bad. Let’s break this down even further.
Creating a simple rectangle
Creating a rectangle is an easy example. You would not use a path
element for it, but it‘s a good way to learn the d
attribute. So we’re doing it anyway.
M10,10L10,20L20,20L20,10Z
Pretty similar to our version above, right? If we take a look at what these things are, it starts to make more sense.
M, m (Move To)
Move the current Point to x,y coordinates
Mx,y
M10,20
uppercase: absolute
lowercase: relative
L, l (LineTo)
Draw a line from the current point to the end point specified by x,y
Lx,y
L20,30
Z
Close the element. Which means the shortest straight line to the beginning of the polygon.
Rectangle Example
Let’s look at our rectangle example again. Now with real values.
So we start at 10,10
and then draw a line to 10,20
and from there a line to 20,20
and then to 20,10
and close the element (which would go back to 10,10
).
If we go back to our example from the GeoJSON. It is similar:
Start at 0,282
draw a line to 400,282
another line to 400,117
and then to 0,117
and close the element (go back to 0,282
)
This is just a shot explanation of a simple case. The path element is capable of much more. But it is sufficient enough for us to know that much. D3 offers us great helpers, so we don’t have to deal with it directly.
Here is a great illustrated article that goes even deeper on the topic