Визуальные данные OSM + тайлы = единое целое

Напишите формулу как выразить 1 пиксель экрана через пиксели тайла. А также сколько unity юнитов будет в одном пикселе экрана. И приравняйте их. Ну а затем самое сложное, сколько секунд градуса будет в одном пикселе тайла :wink:

Я смогу выразить это через уравнение? Но в моем воображении я не вижу градусы в уравнении. Ведь до сих пор я о них ничего не говорил.

Ну не нужны так не нужны, на нет и суда нет. Оставайтесь с пикселями. Тогда причём тут Меркатор и GPS?

Я не говорил что не нужны. Я сказал что не имею понятия куда вставить градусы и вообще как это представить в целом, да и не в целом тоже.

https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames

Эти формулы мною используются для получения текущего тайла, в котором находится точка GPS.

Как это может решить текущую проблему?

Сообщение назад вы говорили, что градусы не используете и куда их совать не знаете. А оказывается всё же используете.
Так вы можете ответить сколько градусов между соседними тайлами и сколько же приходится на 1 пиксель тайла?
И да я не могу вам сказать конкретно куда вставить какую формулу, потому что не понятно что у вас там происходит. Поэтому и приходится заходить из далека. Но если вас это не устраивает, не буду больше беспокоить.

Виноват. Говоря что не использую градусы имел ввиду что не делаю это лично сам в своих вычислениях. Извиняюсь.
Конечно же я рад вашей помощи. Совершенно любой)

Получается могу, когда пойму как это сделать.

Надо всего-лишь узнать градусы между двумя точками.
Как это сделать?

Предположительный план действий:

  1. Получить расстояние в метрах между двумя точками. Могу.
  2. Перевести метры в градусы. Гугл даст ответ. Могу.

Скажите, правильный путь? И надо ли вообще получать метры? Раз мы работаем с эллипсом, то простой перевод метры>градусы будет не верный

:slight_smile: Ваш план не верный, метров не существует. Базируемся на пикселях.
Формулы перевода перед глазами, если сразу тяжело можно взять конкретные пары тайлов.
z=5,x=17,y=13 и y=14 сколько между ними градусов, пикселей мы точно знаем 256.
И посчитайте ещё для z=5,x=17,y=5 и y=6, количество градусов должно быть разное, а пикселей всё так же 256.
А вы в своих формулах только от зума пляшите, а тут оказывается не только он вляет.
Ну а дальше смотрите сколько пикселей от угла тайла надо отступить чтобы попасть в здание.

Может со мной что-то не так, но я не вижу перевода в градусы по вашей ссылке.

Там перевод из координат тайла в мировые и из координат GPS в мировые.

А почему у вас еще z координата есть?

Хорошо, чем описывается адрес тайла по которому вы его загружаете? Что такое мировые и чем оно отличаются от GPS?

Описывается как обычно)

Мировые(x,y) это преобразованные через Mercator.
GPS это WGS84

https://github.com/Komzpa/twms/blob/master/twms/projections.py#L109 - конверсия между EPSG:3857 (сферический меркатор) и EPSG:4326 (градусы).

Дальше - поиск пикселя - простая линейная интерполяция от границ мира: https://github.com/Komzpa/twms/blob/master/twms/projections.py#L217

Вообще, берёте вашу формулу для поиска номера тайла по координате, выкорчёвываете из неё округление и получаете координаты пикселя внутри тайла.

Нет тут округления:

p.X = (float)((lon + 180.0) / 360.0 * (1 << zoom));
p.Y = (float)((1.0 - Math.Log(Math.Tan(lat * Math.PI / 180.0) + 
		1.0 / Math.Cos(lat * Math.PI / 180.0)) / Math.PI) / 2.0 * (1 << zoom));

И до меня не доходит, зачем координаты пикселя внутри тайла?

Вообще вчера пришли к выводу что надо получить градусы между тайлами. И эта была конечная цель.

Но, вы пишете:

И все же. Допустим я получил градусы между тайлами. Что с этим делать? Получить число через косинус и умножить это число на размер моего мира данных?

size = size*cos(grad);

Вообще, так можно получить пиксель тайла:

lat_diff = lat_2 - lat_1;
1pixInLat = 256/lat_diff;
xpix = 1pixInLat * (lat - lat_1);

Но, кажется, в этом нет смысла

Есть угол дома — координаты => координаты тайла => координаты угла тайла в градусах

  • размер пикселя в градусах => на сколько пикселей отодвинут дом от угла тайла => сколько пикселей тайла до здания будет в экранных пикселях => на сколько нужно сдвинуть GameObject чтобы он попал в угол дома.

Хах. Ну это ведь очевидно. Иначе никак и не сделать, так и сделано.
На скрине видно что всё сходится.
Только проблема в том, что число, которым задается размер мира данных(в котором дома), не точно такое какое надо.
Я то думал что вы мне говорите про градусы, чтобы мой размер мира умножить как-то на что-то, чтобы оно было прям идеальным.
А оказывается вы говорили совершенно про другое?

Я не прям профи во всех этих делах про косинусы и синусы, но мне показалось логичным, что раз размеру мира(далее по тексту valSize) не достает какого-то мелкого числа в сумме, а косинус 1 градуса = чу-чуть меньше единицы(1), то это как раз то, чего не хватает в формуле для valSize.

Еще вроде scale(valSize, может кому-то scale понятнее) по оси x и y должны быть разные.
И это вообще путает полностью

scale разный и зависит от широты, при 90˜С вообще бесконечность.
Размер мира? хм… зачем он нужен? Мы же сосредоточились на одном тайле.