Pull to refresh

Comments 15

Вы рассматривали возможность использования официальных карт Майкрософт?

Имеете в виду, через GMap так же или что-то еще?

Было бы неплохо поправить отступы в листингах.

Круто, спасибо.
Много лет занимаюсь с картами. OSM + Leaflet + Chromium пока что лучшая связка которую можно вменяемо использовать. Гугл мапс платный же с некоторого времени. Для OSM нужен свой сервер конечно-же (для некоторых сценариев), но и возможностей больше в разы.

Тоже пытался баловаться с этой библиотекой. В итоге только пару карт работало (вроде гугл и бинг), а нужны были карты Яндекс, автор вроде как их заложил, но всё равно у меня они не завелись. Если получится их оживить, расскажите как)

Яндекс у меня так же не завёлся, только снимками со спутника. сам использовал гугловые. так же вроде интересные для использования в роли провайдера CzechMap, OpenCycleMap и Wikimapia

А мне как раз Яндекс нужен, под предлогом импортозамещения и прочего)

Здравствуйте, какое-то время назад тоже работал с данными картами, и тогда возникла проблема сохранения хотя бы небольшой части карты(для использования оффлайн), получалось сохранять только то что грузилось в кэш автоматически, но выкачать бд так и не получилось. Тоже находил серию видео, что вы оставили в ссылках, но там сохранение карт, у автора самого не получилось, хотелось бы узнать пробовали вы это и получилось ли?

Так же какое-то время искал возможность сохранить карты, но времени было мало на поиски, поэтому быстро сделал на онлайн. Если кто-нибудь знает секрет и поделится, буду признателен)

Сохранение карты в png:

    private void SaveClick(object sender, RoutedEventArgs e)
    {
        var img  = mapView.ToImageSource();
        sas.Source = img;
        SaveToPng(img as System.Windows.Media.Imaging.RenderTargetBitmap, "screenshot_"+DateTime.Now.TimeOfDay.ToString().Replace(":","")+".png");
    }

    void SaveToPng(System.Windows.Media.Imaging.RenderTargetBitmap visual, string fileName)
    {
        var encoder = new System.Windows.Media.Imaging.PngBitmapEncoder();
        SaveUsingEncoder(visual, fileName, encoder);
    }

    void SaveUsingEncoder(System.Windows.Media.Imaging.RenderTargetBitmap visual, string fileName, System.Windows.Media.Imaging.BitmapEncoder encoder)
    {
        System.Windows.Media.Imaging.BitmapFrame frame = System.Windows.Media.Imaging.BitmapFrame.Create(visual);
        encoder.Frames.Add(frame);

        using (var stream = System.IO.File.Create(fileName))
        {
            encoder.Save(stream);
        }
    }

mapView - объект GMapControl

Сохранить БД карт локально тоже никак не получалось =(

Пришлось самому картинками кешировать локально нужные участки

Если еще кому-то актуально все-таки нашел способ сохранять карту в кэш.

        private void SaveToCache()
        {
            RectLatLng area = MapControl.SelectedArea;
            if (!area.IsEmpty)
            {
                for (int i = (int)MapControl.Zoom; i <= MapControl.MaxZoom; i++)
                {
                    DialogResult res = MessageBox.Show("Ready ripp at Zoom = " + i + " ?", "GMap.NET", MessageBoxButtons.YesNoCancel);

                    if (res == DialogResult.Yes)
                    {
                        using (TilePrefetcher obj = new TilePrefetcher())
                        {
                            obj.Overlay = markers; // set overlay if you want to see cache progress on the map
                            
                            obj.Shuffle = MapControl.Manager.Mode != AccessMode.CacheOnly;

                            obj.Owner = this;
                            obj.ShowCompleteMessage = true;
                            obj.Start(area, i, MapControl.MapProvider, MapControl.Manager.Mode == AccessMode.CacheOnly ? 0 : 100, MapControl.Manager.Mode == AccessMode.CacheOnly ? 0 : 1);
                        }
                    }
                    else if (res == DialogResult.No)
                    {
                        continue;
                    }
                    else if (res == DialogResult.Cancel)
                    {
                        break;
                    }
                }
            }
            else
            {
                MessageBox.Show("Select map area holding ALT", "GMap.NET", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

Естественно, перед этим нужно поставить GMaps.Instance.Mode = AccessMode.ServerAndCache;

Выделять область для сохранения через зажатый Shift+ПКМ.

С OpenStreet библиотека работает отлично кстати, рекомендую - бесплатно для коммерческого использования openstreet вроде как. Яндекс карты у меня завелись, но спутниковые показывает явно устаревший их вариант - видимо из каких-то кешей тащит...

 

arcgis хороший источник свежих спутниковых карт. А если OSM нужен то, естественно, geofabrik.de. Более свежих и не придумать тащемта.

Sign up to leave a comment.

Articles