themronion / Maui.GoogleMaps

Map library for MAUI using Google maps API
https://www.nuget.org/packages/Onion.Maui.GoogleMaps/
MIT License
76 stars 33 forks source link

Adding large number of pins (20 thousand or more) #47

Closed andersonvieiragomeslopes closed 2 weeks ago

andersonvieiragomeslopes commented 3 months ago

This may not be a problem, but rather a limitation or implementation error, I'm still investigating.

VERSIONS

IDE

PLATFORMS

ACTUAL BEHAVIOR

In other apps I see the pin being loaded dynamically without lag with high numbers of pins, when I zoom in, more pins in that region are loaded in a specific radius of the map where it is visible to me, I did that, but I would like to know if there is a performance problem related to the map or if I really shouldn't upload too many pins or if there is a limit to showing on the map, because I realized that if I increase the radius where I upload items from 10km to 50km I start to have lags when scrolling on the map, I did a "loading more" to refresh the map list and remove the previous pins, but I don't know if it would also be necessary to do some clearing on the map as well. Sorry to tag you @plppp2001, but I saw that you worked on another item also related to performance with pins on the map and mentioned this component to be used. #14778 #19906

ACTUAL SCREENSHOTS/STACKTRACE

EXPECTED BEHAVIOR

No freezing with many items within a 50km radius Because if I decrease the MinimumDistanceKm to 1.0 and radiusKm to a smaller value 5.0 or 10.0 things start to work without freezing because I will have fewer pins on the map.

HOW TO REPRODUCE

`
private bool isCameraMoving = false; private const int UpdateInterval = 500; private double previousLat = 0; private double previousLon = 0; private const double MinimumDistanceKm = 10.0; // Distância mínima em km para atualizar os pins

    public TheftViewModel(INavigationService navigationService, ILocationService locationService) : base(navigationService)
    {
        _locationService = locationService;
    }
    [RelayCommand]
    public async Task Disappearing()
    {
    }
    [RelayCommand]
    private async Task CameraMovingTo(CameraMovingEventArgs e)
    {
        if (IsFlipped)
        {
            isCameraMoving = true;
            var lon = e.Position.Target.Longitude;
            var lat = e.Position.Target.Latitude;
            if (CalculateDistance(previousLat, previousLon, lat, lon) < MinimumDistanceKm)
            {
                return;
            }
            previousLat = lat;
            previousLon = lon;

            await Task.Delay(UpdateInterval);

            if (!isCameraMoving)
            {
                return;
            }
            UpdateDisplayedData(lat, lon);
            isCameraMoving = false;
        }
    }
    private void UpdateDisplayedData(double centerLat, double centerLon)
    {

        const double radiusKm = 50.0;
        var filteredPins = UploadedPins.Where(pin => CalculateDistance(centerLat, centerLon, pin.Position.Latitude, pin.Position.Longitude) <= radiusKm).ToList();
        MainThread.BeginInvokeOnMainThread(() =>
        {
            Pins.Clear();
            foreach (var item in filteredPins)
            {
                Pins.Add(item);
            }
        });

    }
    private double CalculateDistance(double lat1, double lon1, double lat2, double lon2)
    {
        const double R = 6371; // Raio da Terra em km
        var lat = (lat2 - lat1) * Math.PI / 180;
        var lon = (lon2 - lon1) * Math.PI / 180;
        var a = Math.Sin(lat / 2) * Math.Sin(lat / 2) +
                Math.Cos(lat1 * Math.PI / 180) * Math.Cos(lat2 * Math.PI / 180) *
                Math.Sin(lon / 2) * Math.Sin(lon / 2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        return R * c;
    }`
  1. Upload 20 thousand pins
  2. Set the ItemsSource binding to a property in your VM
  3. Populate said property
plppp2001 commented 3 months ago

I'll check my map code on Monday or Tuesday, I'll let you know what I'm doing....

themronion commented 3 months ago

20k pins 💀💀💀💀

themronion commented 3 months ago

clustering just exists

SupermindPT commented 3 months ago

clustering just exists

This nuget package does not have map marker clustering functionality and there is no easy way to implement clustering of markers in .NET MAUI at the moment.

andersonvieiragomeslopes commented 3 months ago

clustering just exists

Ahhhh, my god, now I found out what this is for hahaha Well, I searched here and found some examples with heat maps and the cluster you mentioned, but I think putting them in this project would require significant work.

andersonvieiragomeslopes commented 3 months ago

clustering just exists

This nuget package does not have map marker clustering functionality and there is no easy way to implement clustering of markers in .NET MAUI at the moment.

It seems easy to me, I can count how many items I have on the map in a certain region and instead of showing them all, I just show a point with the number (using the custom pin) and as the zoom appears I distribute the pins again, for example :

public class ClusteredPin
{
    public Position Position { get; set; }
    public int Count { get; set; }
}
private List<ClusteredPin> ClusterPins(List<Pin> pins, double clusterRadius)
{
    List<ClusteredPin> clusteredPins = new List<ClusteredPin>();

    foreach (var pin in pins)
    {
        var cluster = clusteredPins.FirstOrDefault(c => CalculateDistance(c.Position.Latitude, c.Position.Longitude, pin.Position.Latitude, pin.Position.Longitude) <= clusterRadius);

        if (cluster == null)
        {
            clusteredPins.Add(new ClusteredPin { Position = pin.Position, Count = 1 });
        }
        else
        {
            cluster.Position = new Position((cluster.Position.Latitude * cluster.Count + pin.Position.Latitude) / (cluster.Count + 1),
                                            (cluster.Position.Longitude * cluster.Count + pin.Position.Longitude) / (cluster.Count + 1));
            cluster.Count++;
        }
    }

    return clusteredPins;
}
private void UpdateDisplayedPins(double centerLat, double centerLon)
{
    const double radiusKm = 10.0;
    const double clusterRadiusKm = 0.5; 

    // Filtra os pinos que estão dentro do raio de 10 km
    var filteredPins = allPins.Where(pin => CalculateDistance(centerLat, centerLon, pin.Position.Latitude, pin.Position.Longitude) <= radiusKm).ToList();

    // Agrupa os pinos filtrados
    var clusteredPins = ClusterPins(filteredPins, clusterRadiusKm);

    displayedPins.Clear();
    foreach (var cluster in clusteredPins)
    {
        displayedPins.Add(new Pin
        {
            Position = cluster.Position,
            Label = cluster.Count > 1 ? $"Cluster ({cluster.Count})" : "Pin",
            Address = cluster.Count > 1 ? $"{cluster.Count} locations" : "Location",
            Type = PinType.Place
        });
    }

    // Atualize o mapa aqui com os pinos em displayedPins
    UpdateMap(displayedPins);
}

I feel like an idiot now because I didn't know there was this feature for the map. But I think it is possible to implement this logic easily, I will test this further and bring the final result, because with the logic of the zoom distance and the km radius I have already managed to fully resolve the treatments, but if it is possible to group the items, better.

SupermindPT commented 3 months ago

clustering just exists

This nuget package does not have map marker clustering functionality and there is no easy way to implement clustering of markers in .NET MAUI at the moment.

It seems easy to me, I can count how many items I have on the map in a certain region and instead of showing them all, I just show a point with the number (using the custom pin) and as the zoom appears I distribute the pins again, for example :

public class ClusteredPin
{
    public Position Position { get; set; }
    public int Count { get; set; }
}
private List<ClusteredPin> ClusterPins(List<Pin> pins, double clusterRadius)
{
    List<ClusteredPin> clusteredPins = new List<ClusteredPin>();

    foreach (var pin in pins)
    {
        var cluster = clusteredPins.FirstOrDefault(c => CalculateDistance(c.Position.Latitude, c.Position.Longitude, pin.Position.Latitude, pin.Position.Longitude) <= clusterRadius);

        if (cluster == null)
        {
            clusteredPins.Add(new ClusteredPin { Position = pin.Position, Count = 1 });
        }
        else
        {
            cluster.Position = new Position((cluster.Position.Latitude * cluster.Count + pin.Position.Latitude) / (cluster.Count + 1),
                                            (cluster.Position.Longitude * cluster.Count + pin.Position.Longitude) / (cluster.Count + 1));
            cluster.Count++;
        }
    }

    return clusteredPins;
}
private void UpdateDisplayedPins(double centerLat, double centerLon)
{
    const double radiusKm = 10.0;
    const double clusterRadiusKm = 0.5; 

    // Filtra os pinos que estão dentro do raio de 10 km
    var filteredPins = allPins.Where(pin => CalculateDistance(centerLat, centerLon, pin.Position.Latitude, pin.Position.Longitude) <= radiusKm).ToList();

    // Agrupa os pinos filtrados
    var clusteredPins = ClusterPins(filteredPins, clusterRadiusKm);

    displayedPins.Clear();
    foreach (var cluster in clusteredPins)
    {
        displayedPins.Add(new Pin
        {
            Position = cluster.Position,
            Label = cluster.Count > 1 ? $"Cluster ({cluster.Count})" : "Pin",
            Address = cluster.Count > 1 ? $"{cluster.Count} locations" : "Location",
            Type = PinType.Place
        });
    }

    // Atualize o mapa aqui com os pinos em displayedPins
    UpdateMap(displayedPins);
}

I feel like an idiot now because I didn't know there was this feature for the map. But I think it is possible to implement this logic easily, I will test this further and bring the final result, because with the logic of the zoom distance and the km radius I have already managed to fully resolve the treatments, but if it is possible to group the items, better.

With that approach you need to update the map pins everytime you zoom / unzoom the map. It is not the most performant but if it works, it works. When I find time to do it, I will try to bind a native Android Google Maps utils library to .NET MAUI project. That seems the best way to do it.

themronion commented 3 months ago

I will try to bind a native Android Google Maps utils library to .NET MAUI project.

@SupermindPT FYI the bindings already exist. Just search the nuget for googlemapsutils

andersonvieiragomeslopes commented 3 months ago

I will try to bind a native Android Google Maps utils library to .NET MAUI project.

@SupermindPT FYI the bindings already exist. Just search the nuget for googlemapsutils

https://github.com/JosueDM94/Xamarin.Google.Maps.Utils https://github.com/damiand2/google-maps-clustering-maui

Is there any way to implement it based on inheritance? If so, tell me the way I can implement the clusters provisionally and share the alternative solution code. I have no idea where to start implementing this here in the original project, but if it is possible to implement it as an inheritance, it would solve the problem in the short term.

andersonvieiragomeslopes commented 3 months ago

When I find time to do it, I will try to bind a native Android Google Maps utils library to .NET MAUI project. That seems the best way to do it.

It worked, but it was very bad, there is definitely no way to use it.

My interim solution is to restrict the loading of items to zoom and radius.

I'm going to look a little better at the implementation of this item here in the project, unfortunately, the only way that seems to maintain good performance is the cluster.

Adler33 commented 3 months ago

This is my issue too, My idea is using open gl for render points.

On Mon, 10 Jun 2024, 16:35 Anderson Lopes, @.***> wrote:

When I find time to do it, I will try to bind a native Android Google Maps utils library to .NET MAUI project. That seems the best way to do it.

It worked, but it was very bad, there is definitely no way to use it.

My interim solution is to restrict the loading of items to zoom and radius.

I'm going to look a little better at the implementation of this item here in the project, unfortunately, the only way that seems to maintain good performance is the cluster.

— Reply to this email directly, view it on GitHub https://github.com/themronion/Maui.GoogleMaps/issues/47#issuecomment-2158298678, or unsubscribe https://github.com/notifications/unsubscribe-auth/A2U27KXKIYNDQKU4CVBOGQTZGWQBJAVCNFSM6AAAAABJACWZBSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNJYGI4TQNRXHA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

SupermindPT commented 3 months ago

@andersonvieiragomeslopes

It worked, but it was very bad, there is definitely no way to use it.

Well at least it worked. Why do you say where is no way to use it ? Surely if it works that is a good thing no matter how difficult the native APIs are.

My interim solution is to restrict the loading of items to zoom and radius.

That seems to be a good approach, my guess is you'd have to subclass the Maps control to detect when the user zooms or moves the map. We have the VisibleRegion property of the map control that can be used to update the visible map pins. I didn't quite understand your suggested Cluster marker implementation, you'd have to continuously decrease the clusterRadius when the user zooms the map so that the cluster markers become map pins.

andersonvieiragomeslopes commented 3 months ago

@andersonvieiragomeslopes

It worked, but it was very bad, there is definitely no way to use it.

Well at least it worked. Why do you say where is no way to use it ? Surely if it works that is a good thing no matter how difficult the native APIs are.

For now, I kept the pins restricted to the zoom and radius determined on the map, this completely solved my problem, but I also have many pins in other countries and to manage this, the cluster is the best option.

My interim solution is to restrict the loading of items to zoom and radius.

That seems to be a good approach, my guess is you'd have to subclass the Maps control to detect when the user zooms or moves the map. We have the VisibleRegion property of the map control that can be used to update the visible map pins. I didn't quite understand your suggested Cluster marker implementation, you'd have to continuously decrease the clusterRadius when the user zooms the map so that the cluster markers become map pins.

Things didn't work as well as I imagined, it generated a lot of conditions to manage and I ended up getting lost with the scenarios in which I needed to remove all the "normal pins" and add a "pinCluster" with the name label "cluster" and based In this label I would have to say if it can be clicked or not and thus zoom in and expand the map, etc.. terrible approach and full of scenarios to manage. The native implementation of the cluster seems easy to me, there are examples, but I think the difficulty is implementing it here within this component, I'll try to do that in the next few days.

andersonvieiragomeslopes commented 3 months ago

Update.. cluster is work fine, fine bad, with logic problems, but it works :) and it was not necessary to add it here in this component, we can leave it separate from the project in another nugget package.

https://github.com/themronion/Maui.GoogleMaps/assets/26186056/2d074b68-b81b-4839-8a47-6bb6dfd1e50f

https://github.com/themronion/Maui.GoogleMaps/assets/26186056/c1835529-7515-49f9-8f02-4bb089d91c7f

I have 38 thousand pins now so maybe some adjustments are still necessary, I need to analyze, I'll adjust things and share the workaround or maybe I'll dig up this other plugin (Xamarin.Forms.GoogleMaps.Clustering) because that's the one I was inspired by.

Maybe I'll try to dig this out if it's possible to also add the heat map part in the same component, I'll investigate the topic and update again.

MarkEvans8 commented 2 weeks ago

Hi Everyone. I also have the same problem. I have thousands of pins and I need clustering. I'm using Maui and native maps on Android and iOS. Has anyone managed to find a solution to this problem?

andersonvieiragomeslopes commented 2 weeks ago

Hi Everyone. I also have the same problem. I have thousands of pins and I need clustering. I'm using Maui and native maps on Android and iOS. Has anyone managed to find a solution to this problem?

Yes, try these two nuget packages and let us know if everything works fine, I'm using android, but due to problems in the environment I haven't been able to look at iOS yet.

Onion.Maui.GoogleMaps.Cluster.6.0.0.zip

https://github.com/andersonvieiragomeslopes/Maui.GoogleMaps/blob/cluster-implementation/sample/MauiGoogleMapSample/MauiProgram.cs image

https://github.com/andersonvieiragomeslopes/Maui.GoogleMaps/blob/cluster-implementation/sample/MauiGoogleMapSample/ClusteringPage.xaml.cs https://github.com/andersonvieiragomeslopes/Maui.GoogleMaps/blob/cluster-implementation/sample/MauiGoogleMapSample/ClusteringPage.xaml image

themronion commented 2 weeks ago

https://github.com/themronion/Maui.GoogleMaps/pull/57#issuecomment-2322909855

MarkEvans8 commented 2 weeks ago

Hi. Wow thanks for working on this issue. I desperately need this for my current project. I tried to test this and immediately ran into issues. I have previously installed Onion.Maui.GoogleMaps before and used it successfully. However this time as soon as I added this and attempted to compile I got errors. This was a new test Maui app targeting .NET 8. The app was newly created with no other code at all. Here are the errors:

Build started at 2:53 PM... 1>------ Build started: Project: MauiApp1, Configuration: Debug Any CPU ------ 1>MauiApp1 -> E:\OnCl\MauiApp1\MauiApp1\bin\Debug\net8.0-maccatalyst\maccatalyst-x64\MauiApp1.dll 1>MauiApp1 -> E:\OnCl\MauiApp1\MauiApp1\bin\Debug\net8.0-android\MauiApp1.dll 1>MSBUILD : java.exe error JAVA0000: Error in C:\Users\compa.nuget\packages\xamarin.androidx.collection.jvm\1.3.0.2\buildTransitive\net7.0-android33.0....\jar\androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class: 1>MSBUILD : java.exe error JAVA0000: Type androidx.collection.ArrayMapKt is defined multiple times: C:\Users\compa.nuget\packages\xamarin.androidx.collection.jvm\1.3.0.2\buildTransitive\net7.0-android33.0....\jar\androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class, C:\Users\compa.nuget\packages\xamarin.androidx.collection.ktx\1.2.0.9\buildTransitive\net6.0-android31.0....\jar\androidx.collection.collection-ktx.jar:androidx/collection/ArrayMapKt.class 1>MSBUILD : java.exe error JAVA0000: Compilation failed 1>MSBUILD : java.exe error JAVA0000: java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: C:\Users\compa.nuget\packages\xamarin.androidx.collection.jvm\1.3.0.2\buildTransitive\net7.0-android33.0....\jar\androidx.collection.collection-jvm.jar 1>MSBUILD : java.exe error JAVA0000: androidx/collection/ArrayMapKt.class 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:135) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.main(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:5) 1>MSBUILD : java.exe error JAVA0000: Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: C:\Users\compa.nuget\packages\xamarin.androidx.collection.jvm\1.3.0.2\buildTransitive\net7.0-android33.0....\jar\androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class 1>MSBUILD : java.exe error JAVA0000: at Version.fakeStackEntry(Version_8.2.33.java:0) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.T.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:5) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:82) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:32) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:31) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.b(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:2) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:42) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.b(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:13) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:40) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:122) 1>MSBUILD : java.exe error JAVA0000: ... 1 more 1>MSBUILD : java.exe error JAVA0000: Caused by: com.android.tools.r8.utils.b: Type androidx.collection.ArrayMapKt is defined multiple times: C:\Users\compa.nuget\packages\xamarin.androidx.collection.jvm\1.3.0.2\buildTransitive\net7.0-android33.0....\jar\androidx.collection.collection-jvm.jar:androidx/collection/ArrayMapKt.class, C:\Users\compa.nuget\packages\xamarin.androidx.collection.ktx\1.2.0.9\buildTransitive\net6.0-android31.0....\jar\androidx.collection.collection-ktx.jar:androidx/collection/ArrayMapKt.class 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.Q2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:21) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.D2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:54) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.D2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:10) 1>MSBUILD : java.exe error JAVA0000: at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2056) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.D2.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:6) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.graph.m4$a.d(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:6) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.dex.c.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:61) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.dex.c.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:12) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.dex.c.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:9) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:45) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.d(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:17) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.D8.c(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:69) 1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.utils.S0.a(R8_8.2.33_429c93fd24a535127db6f4e2628eb18f2f978e02f99f55740728d6b22bef16dd:28) 1>MSBUILD : java.exe error JAVA0000: ... 6 more 1>MSBUILD : java.exe error JAVA0000: 1>Done building project "MauiApp1.csproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== ========== Build completed at 2:53 PM and took 28.529 seconds ==========

themronion commented 2 weeks ago

Please see sample app or pinned issue how to resolve

MarkEvans8 commented 2 weeks ago

Thanks. The sample app is working. Very cool !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :)

MarkEvans8 commented 2 weeks ago

I would like to thank you for this amazing work!

I don't really understand exactly how open source dev works but it seems amazing to me that I could ask for help and just a day or two later someone has written a ton of code to fix my problem. I was unable to proceed in my Maui project without clustering but now I can keep going.

I'm sorry I don't understand more about this code. I have been a developer for quite a while but I'm not familiar with how this works.

The sample app works fine but I was not able to update the various NuGet packages. I can see from the pinned issue there is some problem with upgrading stuff. This is not something I have experienced before and it worries me that I am building an app that cannot be updated.

To be honest I still don't understand exactly which Nuget packages cannot be updated and why. Normally I like to continually update my code to run on the latest versions. Sorry for the dumb questions and thanks again for your efforts.

themronion commented 2 weeks ago

@MarkEvans8 please read https://github.com/themronion/Maui.GoogleMaps/issues/28 description with more attention. The OP wrote very detailed what he did to get it working. If u don't understand that, sorry, not much I can help u with. Locking this issue.