Во-первых: вы можете вычислить центр, даже если вы не знаете набор точек (местоположений) во время компиляции: во время выполнения вы знаете все точки (в противном случае было бы невозможно вставить координаты в URL)Поэтому вы можете легко перебрать все точки и вычислить центр.Вы можете вычислить среднее значение по всем координатам и получить геометрический центр (также называемый центроидом): это более простой способ.Другой способ сделать это - проверить наиболее удаленную пару местоположений (как для широты, так и для долготы), а затем установить среднюю точку как центр: для этого требуется немного больше кодирования (например, для вычисления расстояния по долготе, которое необходимо принять во вниманиеВы должны вычислить расстояние в двух направлениях, так как это возможно для обхода «вокруг света», и оно имеет более высокую сложность.
Я не буду углубляться в эту тему, потому что, даже если вы вычисляете правильноцентр ваших точек, это НЕ решает проблему, и, кроме того, центр, автоматически предоставляемый API статической карты Google, всегда корректен: опять же, центр связан с проблемой, но это не проблема (причина).
Аспект, который тривиален, но важно иметь в виду: статическая карта Google всегда рисует путь между двумя точками, рассматривая кратчайший путь, т.е. рисуя самую короткую прямую линию.
Поэтому, еслиВы находитесь в ситуации, когда ваш путь должен идти отот местоположения A до местоположения B, и кратчайший путь между A и B идет «вокруг света» (или, лучше, он проходит с одной стороны изображения), затем этот путь отображается как «borken», как на картах, которые вы показали,На практике A и B находятся рядом с левым и правым полями карты, и карта не может быть центрирована в некоторой точке вдоль кратчайшего пути между A и B из-за других точек пути.И это то, что происходит, когда вы удаляете «Рим»: без Рима карта может быть центрирована таким образом, чтобы путь не проходил.
Формально, я думаю, что проблема возникает (то есть путь нарушен), когда проекция пути на экваторе длиннее 360 градусов долготы, и путь всегда идет в одном и том же направлении (т.е. всегда с запада на восток или всегда с востока на запад).
Статическая карта Google вэта ситуация просто добавляет другую карту мира рядом с первой: если вы установите масштаб на минимум, вы можете увидеть до трех карт мира.Это действительно непрактично по нескольким причинам:
вы не можете бесконечно уменьшать масштаб;
, если вы хотите также вставить маркеры в карту, они будутбыть нарисованным только на «главной» карте;
- потенциально у вас может быть путь, который идет вокруг света (проходящий последовательно из Америки, Европы, Азии и Америки снова и т. д.)) много раз, и было бы действительно ужасно иметь так много маленьких карт друг за другом;
Я много гуглил об этой проблеме, и я не нашел никакого решения, естьошибка открыта на трекере ошибок, но она не решена.
По моему мнению, «правильный» способ сделать это просто так: не более одной карты, и если путь должен выходить из одного края поля.карта / изображение, затем оно должно появиться на противоположном поле и продолжить к месту назначения, нарисованному на той же карте.
Итак, я нашел первый обходной путь:
- вы рисуете свой путьи с тем же стилем (цвет линии и т. д.)Вы также рисуете путь в обратном порядке (статическая карта Google позволяет рисовать несколько путей на одной карте), то есть путь = A | B | C & path = C | B | A, и это решит проблему во многих ситуациях (т.е.путь выходит с одной стороны изображения и входит с другой).К сожалению, это не всегда работает: если у вас есть путь, который пересекает поле изображения два раза подряд, то вы теряете часть своего пути
Чтобы решить эту проблему, я нашел второй обходной путь:- не рисовать просто путь и его обратный путь, а рисовать отдельный путь для каждой пары местоположений пути (и наоборот), то есть для пути A-> B-> C затем: path: A | B, path = B| C, путь = C | B, путь = B | A, и это работает всегда
Недостатком является то, что таким образом URL становится очень длинным и легко достигается ограничение в 2048 символов для URL.
Лучшим решением было бы вручную вычислить центр, проверить вручную, где путь будет пересекать поле, и только для этой части пути нарисовать дополнительный путь, проходящий между двумя точками на границе (и, возможно, такженаоборот), но я не думаю, что это действительно стоит, хотя я не думаю, что Google когда-либо решит эту проблему.