efremidze / Cluster

Easy Map Annotation Clustering 📍
MIT License
1.28k stars 121 forks source link

Cluster views change their location constantly when zooming (even very slightly) on low zoom #60

Closed IVANKRUPSKI closed 6 years ago

IVANKRUPSKI commented 7 years ago

Issue Description

(1) Cluster views change their location constantly when zooming (even very slightly) on low zoom, (2) they move far from the actual pins locations, (3) occasionally on very low zoom pins pop up.

All this somehow linked to this method manager.shouldCenterAlignClusters = true

Screenshots

screenshot at nov 23 15-23-57

Environment

efremidze commented 7 years ago

Does it work properly when manager.shouldCenterAlignClusters = false?

IVANKRUPSKI commented 7 years ago

Yea, it seems to work without this strange behavior when it’s false.

But in this case the bug with overlapping cluster views and pins appears.

On Nov 23, 2017, at 22:26, Lasha Efremidze notifications@github.com wrote:

Does it work properly when manager.shouldCenterAlignClusters = false?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/efremidze/Cluster/issues/60#issuecomment-346699474, or mute the thread https://github.com/notifications/unsubscribe-auth/APbj6exTK8RSijSQ0jT0Q63g8ZwlskrOks5s5eMHgaJpZM4Qo0rj.

josepfm commented 7 years ago

It happens to me too. It put the group on top of the sea when in reality there is no one there. Any help?

efremidze commented 7 years ago

The pins shouldn't be centered, only the clusters. Ill take a look. The clusters landing in the sea are normal since it is placing them in the center of quadrants.

josepfm commented 7 years ago

You could modify it so that the clusters are created, not in the center, if not in reference to the last or first of the pins with a bit of deviation, if you want.

I think it would be a good idea.

I have three pins in Spain, and when zooming out, as are the 3 near the coast, place the cluster in the sea.

efremidze commented 7 years ago

In your case I would set manager.shouldCenterAlignClusters = false since it does that exactly.

josepfm commented 7 years ago

With manager.shouldCenterAlignClusters = true, the pins , when zooming out, as are the 3 near the coast, place the cluster in the sea.

Could you tell me how to modify your excellent library so that the tool set is placed in the coordinates of the last or first pin?

efremidze commented 7 years ago

I meant manager.shouldCenterAlignClusters = false should do that. It places the cluster based on the average coordinate. I could use median instead.

josepfm commented 7 years ago

I have a bigger problem

When the change is the location, often do not see the pines if I do not zoom and zoom out, and sometimes even doing so not all are displayed.

Could you help me, please, to solve this?

It is very important for my project.

efremidze commented 7 years ago

Im adding options for displaying clusters (center, first, average), however ur issue is probably unrelated. Please post an example so I can reproduce it.

efremidze commented 7 years ago

I reproduced the bug. I'll try to get to this as soon as possible, but if you have a fix for it, pull-requests are always welcome!

efremidze commented 6 years ago

Fixed in 2.1.0

dneykov commented 6 years ago

I have similar problem with 2.1.0 I have clusters in 2 continents and when I zoom out to see both clusters, cluster counts are changing when when changing zoom levels.

efremidze commented 6 years ago

I don't think thats a bug, its by design.

dneykov commented 6 years ago

I don't think is normal because I have cluster with about 3k annotations in Africa and 6k in Europe. When I'm slightly changing zoom level these numbers swaps. So it shows 3k in Europe and 6k in Africa which is totally wrong.

UPDATE: This is not happening with version 1.0.7 This occurs after 1.0.8

josepfm commented 6 years ago

Now it works worse.

When I change the location of the map, it does not show me the annotations or the clusters.

When I charge it for the first time either.

I have to be zooming so that they start to see each other.

You could review it?

efremidze commented 6 years ago

@dneykov Ill look into that. Are experiencing the same issue with 2.1.0? @jose46moreno which version?

efremidze commented 6 years ago

Im testing it and everything appears right. Ill add unit tests. Help is appreciated.

dneykov commented 6 years ago

@efremidze Yes this is the case in 2.1.0 as well Here are examples on different zoom levels with 2.1.0

screen shot 2017-12-07 at 9 48 02 am copy screen shot 2017-12-07 at 9 52 10 am copy screen shot 2017-12-07 at 9 52 27 am copy

efremidze commented 6 years ago

What clusterPosition are you using?

dneykov commented 6 years ago

manager.clusterPosition = .nearCenter

efremidze commented 6 years ago

r u having the same issue when setting clusterPosition to .center or .average?

dneykov commented 6 years ago

@efremidze I have tried . center before but the result is the same. I didn't tried . average but can try it at Monday and will let you know the result.

josepfm commented 6 years ago

@efremidze the version is 2.1.0.

Besides the problem that clusters do not appear at times, it also happens to me as a @dneykov and that is that it moves position clusters when I zoom.

tdimeco commented 6 years ago

Actually this is an old issue, see #15.

dneykov commented 6 years ago

In #15 the problem is solved with version 1.0.7 as I mentioned above version 1.0.7 works as expected but the versions after that have same problem.

josepfm commented 6 years ago

Help?

efremidze commented 6 years ago

Its not related to #15, that issue related to a meridian bug.

efremidze commented 6 years ago

Can u guys send me a sample project to reproduce?

josepfm commented 6 years ago

@efremidze here I leave a link to my Dropbox folder with the video where you can see the error:

https://www.dropbox.com/sh/exo23lipw6n0hs6/AACALNR29SY7v881CYZjcGRka?dl=0

And an image where I print the number of annotations by console:

captura de pantalla 2017-12-09 a las 10 19 20

Result:

captura de pantalla 2017-12-09 a las 10 18 39
josepfm commented 6 years ago

Here you can see the entire function that runs in the viewWillAppear.

captura de pantalla 2017-12-09 a las 11 21 30

The problem is that when you add the annotations to the manager, it does not call the method ViewFor of MapKit (I have put a print on that method and it does not run)

efremidze commented 6 years ago

I'm unable to reproduce it. Regarding your setup, mapView.centerCoordinate doesn't call viewFor:, regionDidChangeAnimated: or reload:. Call manager.reload(mapView, visibleMapRect: mapView.visibleMapRect) to reload the map.

dneykov commented 6 years ago

I completely rewrote my mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) delegate method and now everything seems to work as expected with manager.clusterPosition = . average and Cluster version 2.1.0

IVANKRUPSKI commented 6 years ago

Great! manager.clusterPosition = .average does the work.

However there again appeared the problem that was described in #49. Any chances it could be solved?

efremidze commented 6 years ago

Increasing the cell size fixes that issue, however it needs to be done dynamically. I need to investigate a good solution for that.

josepfm commented 6 years ago

@efremidze You think you could implement some animation for the grouping and ungrouping of the annotations.

Something like they all come together at one point and separate.

It would be incredible and improve the user experience.

IVANKRUPSKI commented 6 years ago

Sorry didn't get it. What is meant by the cell size? This -> manager.maxZoomLevel = 20 ?

efremidze commented 6 years ago

@jose46moreno I'll create a separate issue for that

@IVANKRUPSKI manager.cellSize = 20

IVANKRUPSKI commented 6 years ago

Got it, thanks!