Hello.
Out of the box, this script cannot do this.
But you can easily add it, for example like this:
// ...
public class Clustering2DMarkers : MonoBehaviour
{
public static Action<Cluster, OnlineMapsMarker> OnCreateInstance;
// ...
public class Cluster : ClusterItem
{
// ...
private void TryGetMarkers(int z, double tlx, double tly, double brx, double bry, ref List<OnlineMapsMarker> markers)
{
if (zoom < z)
{
for (int i = 0; i < count; i++) childs[i].GetMarkers(z, tlx, tly, brx, bry, ref markers);
}
else
{
if (markerRef == null)
{
UpdatePosition();
markerRef = new OnlineMapsMarker();
markerRef.SetPosition(longitude, latitude);
markerRef.texture = instance.groupTexture;
markerRef.label = "Group (childs: " + totalCount + ")";
if (OnCreateInstance != null) OnCreateInstance(this, markerRef);
markerRef.Init();
}
markers.Add(markerRef);
}
}
// ...
}
// ...
}
using UnityEngine;
using System.Collections.Generic;
public class ZoomOnCluster : MonoBehaviour
{
public int countMarkers = 50000;
public Texture2D texture;
private void GenerateMarkers()
{
Clustering2DMarkers.OnCreateInstance += OnCreateInstance;
for (int i = 0; i < countMarkers; i++)
{
double longitude = Random.Range(-180f, 180f);
double latitude = Random.Range(-90f, 90f);
OnlineMapsMarker marker = new OnlineMapsMarker();
marker.SetPosition(longitude, latitude);
marker.label = "Marker " + i;
marker.texture = texture;
marker.Init();
marker.OnPositionChanged += delegate (OnlineMapsMarkerBase m)
{
Debug.Log("Position Changed");
Clustering2DMarkers.UpdateMarkerPosition(m as OnlineMapsMarker);
};
Clustering2DMarkers.Add(marker);
}
Clustering2DMarkers.UpdatePositions();
}
private void OnCreateInstance(Clustering2DMarkers.Cluster cluster, OnlineMapsMarker marker)
{
marker.OnClick += m =>
{
var cc = cluster;
while (cc.count == 1)
{
cc = cc.childs[0] as Clustering2DMarkers.Cluster;
}
List<Vector2> points = new List<Vector2>();
for (int i = 0; i < cc.count; i++)
{
var child = cc.childs[i];
var subCluster = child as Clustering2DMarkers.Cluster;
if (subCluster != null)
{
double lng, lat;
OnlineMapsUtils.MercatToLatLong(subCluster.mx.Value, subCluster.my.Value, out lng, out lat);
points.Add(new Vector2((float)lng, (float)lat));
}
else points.Add(child.markerRef.position);
}
Vector2 center;
int zoom;
OnlineMapsUtils.GetCenterPointAndZoom(points.ToArray(), out center, out zoom);
OnlineMaps.instance.SetPositionAndZoom(center.x, center.y, zoom - 1);
};
}
private void Start()
{
GenerateMarkers();
}
}
Kind Regards,
Infinity Code Team.
Boost your productivity a lot and immediately using
Ultimate Editor Enhancer.
Trial and non-commerce versions available.