• 0
Rusland

OpenStreetMap

Вопросы

Как реализовать вывод карты OpenStreetMap в Android приложении?

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 ответов на этот вопрос

  • 0

посмотрите библиотеку https://github.com/cadetill/gmlib_v1 честно сказать, на андроид ее не проверял. но для fmx использовал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

вот здесь написано как вычислить номера тайлов по известным GPS координатам

вычисляем тайл в центре карты

далее просто арифметика - размеры окна поделить на 256 - получим кол-во тайлов, которые нужно получить с сервера

получаем, в цикле укладываем в окно. карта готова

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Библиотека работает и с гуглом и опенстрит

Изменено пользователем noisy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, krapotkin сказал:

если есть тайловый сервер, то в принципе задача не очень сложная

А зачем нужен свой сервер?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

данные OSM - бесплатные. а сервера - нет

если весь мир кинется качать картинки на халяву, все тут же ляжет

поэтому OSM разрешает вам для пробы пользоваться их сервером, но при достижении некоего порога - все заканчивается

аналогично 50000 запросов в мес дает вам MapBox. но если у вас карта 1000*1000 точек, то там уже 16 тайлов

а если вы поводите мышью туда - сюда, оп - и уже 100 запросов...

так что сервер либо оплачивать, либо поднимать самому...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
function osmGetTile(const Latitude, Longitude: double;const Scale: integer): TTile;
begin
  Result.Scale:=Scale;
  Result.TileX:=osmGetTileX(Latitude, Longitude, Scale);
  Result.TileY:=osmGetTileY(Latitude, Longitude, Scale);

end;

function osmGetTileX(const Latitude, Longitude: double; const Scale: integer): integer;
begin
  Result:=Floor((Longitude+180)/360*Power(2, Scale));
end;

function osmGetTileY(const Latitude, Longitude: double; const Scale: integer): integer;
begin
  Result:=Floor((1-ln(Tan(Latitude*PI/180)+1/Cos(Latitude*PI/180))/PI)/2*Power(2, Scale));
end;

Что касается тайлов. их можно получить либо скачивая с сайта по URL 'http://tile.openstreetmap.org/'+Scale/+ TileX/+TileY.png, либо установить программу, которая подключается к БД OSM и нарезает тайлы в указанный каталог на вашем ПК.

При разработке логики программы необязательно задействовать собственный тайловый сервер, достаточно кешировать просматриваемые с сайта тайлы (например, так работает яндекс.навигатор)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

все верно.

тот же яндекс дает 100000 запросов, после чего присылает коммерческое предложение на "от 300000 руб в год"

кэширование - вещь отличная, и даже необходимая, только объем данных великоват - Екатеринбург в 19 масштабах занимает 19 ГБайт )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А зачем всё закачивать? Качать только то, что необходимо отобразить и кешировать. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

правильно, но, ерзая по карте, потихоньку придется закешировать все )))

так что надо еще второй алгоритм - как часто нужный кусок достается из кэша. чтобы контролировать, что удалять, когда кэш разрастется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не уверен,  за два года пользованием яндекс.навигатор (Москва -Нижний Новгород, Волгоград, Иркутск,  Улан-Удэ) 1.5 Гб. Масштабы 6-18. Самые емкие масштабы с 15-20, но они нужны участками

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От Денис Демин
      Здравствуйте, есть такая задача:
      1) Необходимо вставить карту от Яндекса на форму.
      2) Необходимо вставить информацию текстовую (информация о доставке или оплате), это можно также вставить HTML кодом, а лучше просто отформатированным содержанием. 
      Заранее спасибо всем за ответы.
    • От yura371
      Здравствуйте. Подскажите пожалуйста. Например у меня есть карта города в формате bmp. Как можно нарисовать на ней точки обозначающие маршрут, и соединить их линиями? И, если возможно такое реализовать, чтобы эти точки имели событие на нажатие. Хочу сделать простое подобие Яндекс-карт. Желательно примеры кода. Спасибо.

    • От FreeOS
      Захотелось создать игрушку для дальнейший освоение FM, так как у меня работа связана с дорогами.
       
      Каким способ лучше создать дороги, пробовал ректанглам получается какие то не красивые коробки   
       
      Планируется что то наподобие этого картинки плюс разные разветвление и в некоторых местах узкие или широкие дороги

       
      PS. Дорога трехмерная, еще было бы круто создать редактор карт. За ранее спасибо
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу