Клуб API Карт

Правильные геометрические фигуры на карте.

Пост в архиве.

На примере API Яндекс.Карт Примеры. Многоугольник.

Выводится прямоугольник вместо квадрата, хотя смещение по  lat, lng одинаковое и равно 0.1

Тоесть нужно нарисовать фигуру и чтобы она отображалась на карте как:

квадрат, а не прямоугольник

круг, а не эллипс.

Есть функция:

function createRectangle (x,y,d){ 
 
    var polygon  =  new YMaps.Polygon([new    YMaps.GeoPoint(x,y),
                                                                   new YMaps.GeoPoint(x,y+d),
                                                                   new YMaps.GeoPoint(x+d,y+d),
                                                                   new YMaps.GeoPoint(x+d,y)]) ;
    return polygon;
        }
map.addOverlay(createRectangle(37.7,55.7,0.2)) ; 

 

3 комментария

Включите таскание полигона и поташите его от москвы, через экватор, и за антарктику.

Не забывайте что земля вроде как круглая( хотя в яндекс картах она эллипс ), а карты плоские.

На шаре растояние одно, на его проекции на плоскость - другое.

Чтобы реализовать задуманное - переведите координаты в пиксели, добавьте нужное колличество пикселей отступов, переведите обратно( см. http://api.yandex.ru/maps/jsapi/doc/ref/reference/converter.xml )

Sergey Konstantinov
28 января 2016, 05:34

У Вас не получится решить эту задачу в силу того, что Земля - шар.

0.1 градус вдоль меридиана всегда равен 11.1 км; 0.1 градус вдоль параллели соответствует 11.1 * cos(lat) км, т.е. примерно 5.5 км на наших широтах. Соответственно, "квадрат" в геокоординатах становится прямоугольником на карте.

Какую задачу Вы хотите решить, показывая на карте точный квадрат?

В данный момент конкретной задачи привязанной к сервису или сайту нет. Есть намерения расширить Yandex примитивы, тоесть от простых ломаных и многоугольников перейти к геометрическим примитивам: окружность, эллипс, квадрат, прямоугольник, треугольник, приямоугольный треугольник, равнобедренный треугольник и т.д.

В нашем случае прямоугольник может стать квадратом если ввести коэффициент отношения искажения пропорций lat, lng.

Нечего невозможного нет! В конце концов решение находится, только это зависит от финансирования :)

 Похоже, что прийдется разбираться с переводом координат в пиксели (fromCoordPoint, toCoordPoint)