Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add another type of data layer : proportional circles #1399

Open
naomap opened this issue Nov 9, 2023 · 1 comment · May be fixed by #1439
Open

Add another type of data layer : proportional circles #1399

naomap opened this issue Nov 9, 2023 · 1 comment · May be fixed by #1439
Milestone

Comments

@naomap
Copy link

naomap commented Nov 9, 2023

Is your feature request related to a problem? Please describe.
The addition of cloropleth data layers triggers another idea : showing point data as proportional circles, i.e. circles whose area is proportional to the value of a numerical field.

Describe the solution you'd like

  • Load point data in a layer, with a field that contains a numerical value e.g. population.
  • Select "Proportional circles" as the type of layer
  • Define the field used to calculate the area of each circle, and a factor to apply so that circle sizes can be adjusted
  • Each point is displayed as a circle, and can be selected to show a popup.
  • It may be necessary to adjust the size of circles to the zoom level, so that they do not hide each other at a low zoom level => need for another factor ?

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Example map :
image

@naomap
Copy link
Author

naomap commented Nov 24, 2023

Here is an example with Overpass Turbo : bicycle parkings where the surface is proportional to their capacity
http://overpass-turbo.eu/s/1DS5

Another example with the population of cities, where a factor is required to let the circles have a sensible size : http://overpass-turbo.eu/s/1DSp. Note the sqrt() which is needed for most (all ?) types of values, so that the surface of the circle (rather than the diameter) is proportional to the value.

yohanboniface added a commit that referenced this issue Nov 28, 2023
fix #1399

This is a very first look. But it's not as simple as I thought,
because:
- as for a heatmap, we need a special representation (each feature
  should be a circle, not a normal icon nor a polygon)
- as for a choropleth, we want to dynamically take control over the
  rendering (we need all the features to be able to compute the bubbles
  sizes)
- as for a normal layer, we want all the features to react to interaction,
  specifically click to open a popup, but also tooltip, highlight (?), etc.

In this first implementation, I've created a new type of layer, that creates
a CircleMarker for each feature, but doing so we lose all the interactions.
I've tried to set a sort of proxy so that a click on the circle will fire
a click on the feature, but as this feature is actually not on the map, this
does not work naturally.
Also, at this point, the styling is only done once, so editing layer's style
will not be updated live in the map.

A few more thinking is needed, mainly to decide how to handle the circle: should
it be a "proxy layer" as now, or should we try to transform a feature on the fly
(make sure it is a marker of type circle, but as for now our circle are html, not
svg…), and in this case, should we magically handle polygons and polylines (taking
their center), or only markers (which could be easier, and possibly enough) ?
@yohanboniface yohanboniface linked a pull request Nov 28, 2023 that will close this issue
@yohanboniface yohanboniface added this to the 2.x milestone Feb 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants