Напишите формулу как выразить 1 пиксель экрана через пиксели тайла. А также сколько unity юнитов будет в одном пикселе экрана. И приравняйте их. Ну а затем самое сложное, сколько секунд градуса будет в одном пикселе тайла
Я смогу выразить это через уравнение? Но в моем воображении я не вижу градусы в уравнении. Ведь до сих пор я о них ничего не говорил.
Ну не нужны так не нужны, на нет и суда нет. Оставайтесь с пикселями. Тогда причём тут Меркатор и GPS?
Я не говорил что не нужны. Я сказал что не имею понятия куда вставить градусы и вообще как это представить в целом, да и не в целом тоже.
Эти формулы мною используются для получения текущего тайла, в котором находится точка GPS.
Как это может решить текущую проблему?
Сообщение назад вы говорили, что градусы не используете и куда их совать не знаете. А оказывается всё же используете.
Так вы можете ответить сколько градусов между соседними тайлами и сколько же приходится на 1 пиксель тайла?
И да я не могу вам сказать конкретно куда вставить какую формулу, потому что не понятно что у вас там происходит. Поэтому и приходится заходить из далека. Но если вас это не устраивает, не буду больше беспокоить.
Виноват. Говоря что не использую градусы имел ввиду что не делаю это лично сам в своих вычислениях. Извиняюсь.
Конечно же я рад вашей помощи. Совершенно любой)
Получается могу, когда пойму как это сделать.
Надо всего-лишь узнать градусы между двумя точками.
Как это сделать?
Предположительный план действий:
- Получить расстояние в метрах между двумя точками. Могу.
- Перевести метры в градусы. Гугл даст ответ. Могу.
Скажите, правильный путь? И надо ли вообще получать метры? Раз мы работаем с эллипсом, то простой перевод метры>градусы будет не верный
Ваш план не верный, метров не существует. Базируемся на пикселях.
Формулы перевода перед глазами, если сразу тяжело можно взять конкретные пары тайлов.
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С вообще бесконечность.
Размер мира? хм… зачем он нужен? Мы же сосредоточились на одном тайле.