Клуб API Карткак узнать номер тайла по геоточке?Пост в архиве.sairi-na-tenshi27 января 2009, 18:11сабж
13 комментариевАвторизуйтесь, чтобы оставить комментарийwaloid28 января 2016, 09:03у тайла 2 номера, по Х и по У. и оба этих номера зависят от зума(масштаба). алгоритм вычисления должен быть не сложным...sairi-na-tenshi28 января 2016, 09:03я понимаю, что он не сложный, но хотелось бы апишную функцию.waloid28 января 2016, 09:03еслия я не ошибаюсь, то нужно смотреть в сторону YMaps.Converter.coordinatesToMapPixels(geoPoint), где geoPoint точка в тайле.sairi-na-tenshi28 января 2016, 09:03к номеру тайла это совершенно не приближает...rodlex28 января 2016, 09:03В настоящее время никак. А зачем Вам нужны координаты тайла?sairi-na-tenshi28 января 2016, 09:03чтобы подгружать объекты из текущей области видимостиrodlex28 января 2016, 09:03Про адресацию тайлов Вы можете почитать в разделе Координатные системы. Реализовывать механизм поиска номера тайла Вам придется самостоятельно.sairi-na-tenshi28 января 2016, 09:03можно, хотябы, конкретную фолмулу, по которой вы делаете преобразование меркатора?rodlex28 января 2016, 09:03По проекции Меркаторе написано в википедии.sairi-na-tenshi28 января 2016, 09:03которая формула из приведённых там используется у вас и какие значения констант вы туда подставляете?sairi-na-tenshi28 января 2016, 09:03короче, нашёл function _geoToMercator(n) { var l = n.getLng() * Math.PI / 180, u = O(n.getLat(), -90, 90) * Math.PI / 180, t = 6378137, s = 0.0818191908426, m = s * Math.sin(u); var o = Math.tan(Math.PI / 4 + u / 2) || 1e-13, r = Math.pow(Math.tan(Math.PI / 4 + Math.asin(m) / 2), s), q = o / r; return new YMaps.Point(Math.round(t * l), Math.round(t * Math.log(q))); } function _mercatorToTiles(e) { return new YMaps.Point(Math.round((20037508.342789 + e.x) * 53.5865938), Math.round((20037508.342789 - e.y) * 53.5865938)); } sairi-na-tenshi28 января 2016, 09:03правильно ли я понял, что у полученных чисел мне нужно обрезать лишние биты с соответствии с зумом и получатся те самые координаты тайла?Владимир Сутула24 февраля 2018, 11:08сам долго искал, может кому пригодится, код на С/С++у тайла 3 номера, Z, X, Yint lat2tileY_Yandex(double lat, int z)//lat=широта в градусах, z=масштаб{ lat = lat * M_PI / 180.0; //радианы = градусы * ПИ / 180 double a = 6378137; double k = 0.0818191908426; double z1 = tan(M_PI / 4 + lat / 2) / pow(tan(M_PI / 4 + asin(k * sin(lat)) / 2) , k); int pix_Y = round((20037508.342789 - a * log(z1)) * 53.5865938 / pow(2, 23 - z)); return (pix_Y / 256);}int long2tileX_Yandex(double lon, int z)//lon=долгота в градусах, z=масштаб{ lon = lon * M_PI / 180.0; //радианы = градусы * ПИ / 180 double a = 6378137; double k = 0.0818191908426; int pix_X = round((20037508.342789 + a * lon) * 53.5865938 / pow(2.0 , 23 - z)); return (pix_X / 256);}Обновлено 24 февраля 2018, 11:09