TransWikia.com

Как разрезать фото на части?

Stack Overflow на русском Asked on January 4, 2022

Делаю собственную карту по шаблону от Яндекса https://tech.yandex.ru/maps/jsbox/2.1/custom_map.
И там нужно целую карту разрезать на части в разных масштабах.

Посоветуйте сервис или что-то другое что сможет это сделатьвведите сюда описание изображения

2 Answers

Правильнее пользоваться инструкцией самого Яндекса https://tech.yandex.ru/maps/archive/doc/jsapi/1.x/dg/concepts/ymapstiler-docpage/

Там суть такова:

  1. скачивайте специальную программу
  2. задаёте точки привязки. Дело в том, что Ваша карта скорее всего сделана не в той проекции, что у Яндекса. И чтобы это исправить, необходимо задать соответствие точек на растовой карте реальным координаторам на местности.Чем больше точек и чем они точнее, тем лучше. Сайты с онлайн определением координат можно найти в поиске.
  3. Программа сама сгенерирует нужные тайлы именно под Яндекс карты с нужными номерами тайлов и для нужных масштабов. Вручную это делать проблематично. Можно сгенерировать и полупрозрачные тайлы в формате PNG.

От себя:

  1. Частенько трудно корректно привязать карту. Я лично качаю (растрирую) часть Яндекс карты, накладываю сверху свою карту в Photoshop, затем применяю марионеточную деформацию и медленно и аккуратно "натягиваю" свою карту на карту от Яндекса. А потом уже привязываю.

  2. Рассмотрите вариант вообще не делать тайлы. Я лично по определённым причинам пришёл к такому решению.

     myMap = new ymaps.Map("map1", {
             center: 55.03930264,82.67716136});
     maprect= [ [55.03330264,82.67716136],
                 [55.03930264,82.67716136],
                 [55.03930264,82.69716136],
                 [55.03330264,82.69716136]];
         RastMap = new ymaps.Polygon([maprect],
             {
    
             },
             {
                 fillImageHref:'map.png'
             });
             myMap.geoObjects.add(RastMap); 
    

Для наглядности тут координаты реального проекта. Суть в том что вся не резанная, но обработанная по методу 1, карта выводится на полигон (в данном случае, прямоугольник). Координаты углов прямоугольника подбираются так, чтобы карты совпали по координатам.

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

  1. Для уменьшения размера файла карты, можно сохранить его в специальном формате PNG с ограниченной палитрой цветов. Это можно сделать в специальных редакторах типа PhotoShop. Ищите сохранение в PNG8. Сохранять в JPG не рекомендую, там нет прозрачности и по краю карты могут быть некрасивые белые поля.

Answered by dmitrybykov84 on January 4, 2022

Можете попробовать воспользоваться ImageMagic

$ convert map.jpg -crop 512x512 -set filename:tile "%[fx:page.x/512]-%[fx:page.y/512]" "tiles/%[filename:tile].jpg"

Каждый тайл будет сохранен в отдельном файле с названием « x-y.jpg », где x — номер тайла по оси X, y — номер тайла по оси Y (порядковый отсчет начинается с левого верхнего тайла).

Answered by shchedrin on January 4, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP