Comments 15
Вы рассматривали возможность использования официальных карт Майкрософт?
Было бы неплохо поправить отступы в листингах.
Круто, спасибо.
Много лет занимаюсь с картами. OSM + Leaflet + Chromium пока что лучшая связка которую можно вменяемо использовать. Гугл мапс платный же с некоторого времени. Для OSM нужен свой сервер конечно-же (для некоторых сценариев), но и возможностей больше в разы.
Тоже пытался баловаться с этой библиотекой. В итоге только пару карт работало (вроде гугл и бинг), а нужны были карты Яндекс, автор вроде как их заложил, но всё равно у меня они не завелись. Если получится их оживить, расскажите как)
Здравствуйте, какое-то время назад тоже работал с данными картами, и тогда возникла проблема сохранения хотя бы небольшой части карты(для использования оффлайн), получалось сохранять только то что грузилось в кэш автоматически, но выкачать бд так и не получилось. Тоже находил серию видео, что вы оставили в ссылках, но там сохранение карт, у автора самого не получилось, хотелось бы узнать пробовали вы это и получилось ли?
Так же какое-то время искал возможность сохранить карты, но времени было мало на поиски, поэтому быстро сделал на онлайн. Если кто-нибудь знает секрет и поделится, буду признателен)
Сохранение карты в 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. Более свежих и не придумать тащемта.
Работа с картами. GMAP C#