I'm applying PointStacker transformation on one of my layers using Geoserver 2.5.2 and OpenLayers 2.
I know, that I have 7 datapoints located on the exact same location. However, when I change the zoom level the stacked point is moving around randomly. I would've thought that the stacked point's location is calculated by the mean of the vector points being stacked. In other words, if they are located at the same location, it shouldn't move around changing zoom levels.
What am i doing wrong?
zoom level 7:
zoom level 8:
zoom level 9:
zoom level 10:
zoom level 11:
Answer
Your assumption about how PointStacker calculates the cluster point's location is incorrect. It doesn't use centre of mass in the way you'd expect.
The bounds of the images request are broken up into a grid and clusters are created for each cell of that grid. So if you have what looks to you like a natural cluster, e.g. 3 points close to each other, they will only be clustered together if all 3 are in the same grid cell. If they fall into 3 grid cells they will be assigned to 3 separate clusters.
As you zoom in the points do not land in the same grid cell as in the previous image and therefore the cluster is given a new location relative to the image's width and height.
This is not the most intuitive behaviour but it does make for a much simpler clustering algorithm. You can see the code here: https://github.com/geotools/geotools/blob/master/modules/unsupported/process-feature/src/main/java/org/geotools/process/vector/PointStackerProcess.java
No comments:
Post a Comment