|
|
|
| Доброго времени суток.
Я на сайте хочу сделать сервис, подобный картам Яндекс или Google maps.
У меня есть подробная карта нужной мне местности, но она огромная по весу и по размерам и поэтому грузить ее полностью на сайт не возможно.
Как мне сделать чтобы при перетаскивании мышкой карта подгружалась динамически.?
С чего начать? | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 13:46)
| | Наверно не на сайт, а в браузер. Если я правильно понял, то это надо делать при помощи JavaScript или Ajax, это то что работает на стороне клиента, а РНР работает на стороне сервера и поэтому проследить за мышкой не получится. Я так думаю :) | |
|
|
|
|
|
|
|
для: magic
(09.02.2009 в 14:09)
| | Я думаю что при помощи JavaScript можно получать координаты прямоугольной области, эти координаты отправлять на сервер, а затем на сервере при помощи imagecopy (php) с сервера брать часть картинки и вставлять в браузер.
Что думаете по этому поводу?
Я что-то не уверен правильно ли так делать. Может есть какие-то другие варианты. | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 14:19)
| | Да так, грузить все изображение на сервер, это долго ждать его. Можете грузить части изображения во фрейм, тогда не нужно будет перегружать остальную часть страницы. | |
|
|
|
|
|
|
|
для: sim5
(09.02.2009 в 14:35)
| | to andMegaM:
на сервере все равно придется порезать карту.
Причем отнюдь не php-средствами.
И вероятно, даже не на сервере. :) | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 14:41)
| | Почему придется резать карту? И как быть в том случае если пользователь перешел на границу двух (или) более частей? Если подгржать обе части, то это уже не хорошо, т.к. видимая лощадь во фрейме будет меньше площади подгруженных картинок. | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 14:51)
| | Вы на карты яндекса или гугла, про которые упоминали здесь, хоть раз заходили?
Зайдите - убедитесь, что них карты порезаны. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 14:57)
| | С картами гугла я немного знаком, но я не знаю как определить порезана она или нет.
Подскажите. И если вы знаток таких карт как яндекс или гугл, то попрошу по подробнее рассказать как у них происходит подгрузка кусочков карт | |
|
|
|
|
|
|
|
для: sim5
(09.02.2009 в 14:35)
| | Вот мне и надо чтобы во фрейм подгружалась только нужная часть карты.
На правильном ли я пути? Может кто-то более подробно (по шагам) может описать реализацию задачи | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 14:47)
| | Грузить частями. А вот к разговру выше, то да, резать ее надо на части, а далее иметь список-идентификтор этих частей. В общем надо подумать как это организовать. Очень большое изображение обрабатывать на сервере, ну насколько оно большое бог его знает, но возможно, что просто нехватка памяти для этог будет и тогда крындец... | |
|
|
|
|
|
|
|
для: sim5
(09.02.2009 в 15:11)
| | О размере изображения : карта примерно 20000px на 20000px. На сколько частей ее нужно резать , на сколько частей? Может ссылки какие-нибудь дадите как мне сделать динамическую подгрузку картинок чтобы можно было карту мышкой таскать во всех направлениях | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 15:17)
| | 20000px * 20000px , если бы его можно было загрузить в gdlib, заняло бы 2Гб .
В гугле картинки порезаны квадратиками 256x256
то есть ваша карта в самом высоком разрешении - около полутора тысяч таких квадратиков.
Около двух с половиной - трех тысяч - всех разрешений.
15..30 Кб на квадратик - 50..100Мб в сумме. | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 15:17)
| | Можно попробовать прям поверх гугл мапс пустить свою карту. Чтоб велосипед не изобретать.
http://www.xakep.ru/post/47006/default.asp?print=true | |
|
|
|
|
|
|
|
для: Axxil
(09.02.2009 в 15:43)
| | Спасибо за ссылку. Это уже что-то. Но мне совсем не хотелось как-то привязываться к гуугл картам.
Как с нуля мне сделать динамическую карту?
К примеру я порезал свою карту на квадратики нужного мне размера. Что дальше? | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 16:02)
| | Какая конечная цель всех этих манипуляций? Что вы хотите в итоге получить? Просто схему, которую можно прокручивать в окне или карту с системой координат и возможностью добавлять маркеры и объекты?
Просто перемещать карту можно отслеживая в <div style="overflow:hidden;"> события onDrug*, считывая координаты мыши и последовательно подгружая квадраты, на которые нарезана карта.
Конкретнее сказать не могу, но я бы рыл в данном направлении. Задача очень нетривиальная. | |
|
|
|
|
|
|
|
для: Axxil
(09.02.2009 в 16:07)
| | Мне нужно карту с системой координат и возможностью добавлять маркеры и объекты. Изначально планируется просто перемещать карту и добавлять маркеры и объекты. Возможно потом потребуется динамически изменять масштаб карты, но сейчас это не нужно. | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 16:16)
| | Хм...
По моему глупо с нуля всё это строить. У гугла отличный открытый API карт. Сделайте слой со своей картой и всё.
Если у вас нагрузка меньше 500000 обращений к карте в сутки, то и изобретать новый механизм карт незачем. Лучше время потратить на что-то более полезное. | |
|
|
|
|
|
|
|
для: Axxil
(09.02.2009 в 17:15)
| | Гугл без предупреждений может отказать в предоставлении услуг не поясняя почему. И тогда мой web сервис накроется. | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 17:18)
| | "Сын, выйди из машины!" (с)
а сейчас он у Вас живет и здравствует?
Ваш сервис скорее накроется, даже если Вы его и сделаете.
Лицензию на предоставление картографических услуг Вы уже получили? | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 17:21)
| | Я слышал что лицензию надо только на то чтобы создавать карты, а не пользоваться. Кому и какая разница у кого и как я приобрел карту. Тогда получается что и проект сделанный с картами гугл заранее обречен.
Кстати, на картах гугл очень много косяков и неточностей | |
|
|
|
|
|
|
|
для: andMegaM
(09.02.2009 в 17:29)
| | > Тогда получается что и проект сделанный с картами гугл заранее обречен.
Лицензию гугл мапс попробуйте почитать для начала.
> Кстати, на картах гугл очень много косяков и неточностей
Так у вас же вроде своя карта.
> Кому и какая разница у кого и как я приобрел карту.
Всё зависит от детализации и подробности карты. Если это обычная схема с квадратиками нарисованными от руки, то никому никакого дела. А если это карта, сделанная военными топологами, то очень скоро к вам постучатся. | |
|
|
|
|
|
|
|
для: Axxil
(09.02.2009 в 16:07)
| | Фильмы по войнушку любите? Как там - открывает командир планшет, смотрит на него и говорит умно - "Враг в квадрате 57, ...". В квадрате!
Представьте для простоты карту какого либо района, который разбит на квадраты. Именно эти квадраты, а не координаты, вы будете передавать на сервер в качестве запроса. Из этого района вы выводите часть карты, например, таблицей 3х3. Допустим сейчас пользователь смотрит часть с квадратами:
15, 16, 17
25, 26, 27
35, 36, 37
Мышь пользователя находится в квадрате 26. Если он продвинет ее влево на квадрат 25, то вы, получив запрос этот (25), должны выдать ему таблицу с квадратами
14, 15, 16
24, 25, 26
34, 35, 36
Если с квадрата 25, он поведет мышь на квадрат 14, то выдать
3, 4, 5
13, 14, 15
23, 24, 25
Ну и так далее. Передавать координаты при разрезанном изображении, я думаю будет расточительно. А в данном случае, вы должны держать "сетку" квадратов в базе, которым соответствуют те или иные изображения. Это будет проще. Вот в этом плане бы я думал. А фрейм можно организовать так, что он у вас будет работать как AJAX, передавая запросы на сервер по событиям onmousemove каждого изображения сетки выводимой пользователю.
PS. Нет, onmousemove не годится, так будут постонно идти запросы, от любого движения. Хотя, эту проблему можно решить на JS. | |
|
|
|
|
|
|
|
для: sim5
(09.02.2009 в 17:23)
| | За идею с квадратами спасибо. Примерно к этому же я и склоняюсь.
Но в гугле по другому происходит реализация. Там я так понимаю смена картинок происходит после выполнения двух событий : нажатия мышкой и перемещении курсора.
Тут мне кажется что подгрузка зависит от координат курсора относительно фрейма и на какой картинке произошло нажатие клавиши мышки. Но как это точно работает я не пойму.
Вариант с подгрузкой при наведении на карайнюю картинку я думаю не подходит, т.к. если будет стоять метка где-нибудь около края фрейма, то при подробном просмотре метки (при наведении мыши выпрыгивает более более подробная информация ) произойдет перемещение карты, хотя пользователь перемещать карту и не собирался.
Так как же происходит реализация подгузки картинок в гугле? | |
|
|
|
|
|
|
|
для: andMegaM
(10.02.2009 в 08:12)
| | Не обязательно от координат. Можно, для того, чтобы не посылать постоянные запросы на сервер при каждом движении мыши, активировать выбор/передачу после щелчка мыши. Собственно, совсем не обязательно это делать по движению мыши, можно организовать навигатор - стрелки направляющие, выбирая какую либо, пользователь задает направление, и в этом случае их будет всего 4.
Координаты годятся только в том случае, если это единое изображение с наложенной картой. Это тоже можно организовать, но матрица с квадратами это проще - расчет, поиск, и т.п., по одному значанию найти ближайшие, быстрее и удобнее, чем работать с координатами.
Не знаю как в Гугле, я не принимал участия в создании ее. Но, если бы делал себе подобное, то - передвижение по карте, наверное бы, сделал навигатором, а вот щелчек по пункту населенному, либо по квадрату, служил либо выбором для масштабирования, либо уже приводил к масштабированию выбранного района. И, если подразумевать масштабирование, то каждый квадрат наделил бы картой, которая бы пердавала ID объектов на ней. Все это потребует описания/связей объектов в базе.
Но все делал бы именно так, разбив всю карту на квадраты. Это мне кажется самым удобным вариантом, более простым, с более быстрой реакцией сервера и выдачей ответа пользователю. | |
|
|
|