Векторная карта местности, как реализовать?

bgm

 
1. Таблицы слоёв не надо - в таблицу объектов добавляется поле Z-index: условная координата по вертикали (условная, т.к. всё же карта плоская);

2. Таблица для хранения последовательности точек (geo_obj_des) имеет следующую структуру:

ID-объекта | S-индекс | ID-точки

Здесь S-индекс определяет порядок точек в объекте (если он важен, т.к. объект может быть просто набором точек на местности).
Выбор всех точек объекта (отсортированный) будет примерно таким:

SELECT go.`ID-точки`, go.`X-координата`, go.`Y-координата`, gs.`S-индекс`
FROM `geo_obj_des` gs
LEFT JOIN `geo_point` go ON (gs.`ID-точки`= go.`ID-точки`)
WHERE ( gs.`ID-объекта`= `ID-объекта-для-отрисовки`)
ORDER BY gs.`S-индекс` ASC

В таблице geo_point хранятся точки:
ID-точки | X-координата | Y-координата
 

DpoHro

Новичок
bgm, спасибо!

-~{}~ 09.07.06 19:49:

Итого n+1 запрос к БД, n - количество запросов точек объектов, +1 запрос списка объектов. Хм...
bgm, ты делаешь отсечение ненужных объектов?
 

bgm

 
Для того, чтобы выбрать точки для количества объектов больше одного, всё равно нужен ровно один запрос. К примеру, если тебе надо выбрать точки всех маршрутов, то зная, ID типа объекта соответствующего маршрутам, тебе будет нужен ровно один запрос.

Подумаешь сам - какой именно?
 

DpoHro

Новичок
Да мысль ясна, не особо понимаю теперь как отсечь ненужные объекты на разных масштабах и позициях, при большом увеличении ведь бывает нужно то всего несколько объектов...

Правда не думаю что у меня их будет большое количество, в районе 1-1,5 тыс. Включая подписи и прочие объекты имеющие только точку привязки
 

DpoHro

Новичок
Как я понимаю, решение делает возможным проверку не всех точек на попадание/непопадание в просматриваемую область для каждого объекта а ищется пересечение 2 прямоугольников (области просмотра и области в которой расположен каждый из объектов)... Да не оптимально но сойдет для небольших карт.

По поводу масштабирования...
Хм... Может ввести еще поле в объект, а вернее 2 поля: задающие диапазон (масштабов) показа объекта.
А да еще и коэффициент подробности этого самого показа который находится в обратной пропорции к масштабу. То есть при увеличении масштаба количество прорисовываемых точек бы сокращалось (отрисовка через 1, через 2,... 10)
 

bgm

 
Тебе всё равно понадобятся точки, которые не попадают в область просмотра: хотя бы для построения тех элементов, которые с ними связаны (к примеру одна точка маршрута попадает в область просмотра, а две с ней соседние находятся за пределами области просмотра).
Как вариант (который мы использовали) - коэффициент масштабирования квантуется, соответственно и область просмотра квантуется. И для каждого объекта храним набор областей-кванторов. Соответственно выборка сужается ещё сильнее.
 

DpoHro

Новичок
Можно ли не сохраняя на сервере отдать пользователю отрисованную карту?
 

Wicked

Новичок
смотря как ты ее отрисовываешь, и как собираешься отдавать юзеру.
 

Wicked

Новичок
ну если ты подразумеваешь, что у тебя какой-то скрипт будет генерить картинку на лету, и отдавать ее браузеру, то да, imagegd2 будет достаточно.

The filename parameter is optional, and if left off, the raw image stream will be output directly.
 

DpoHro

Новичок
Щас наверное дурацкие вопросы буду задавать но всеже:

Первый пост: http://ru.php.net/manual/ru/function.imagecreate.php
[help at nanomc dot com]

Работает если только убрать строку
header('Content-type: image/png');

Почему? Я чтото не знаю про mime или хидеры?

-~{}~ 10.07.06 10:22:

Да я сейчас собираюсь именно такую функцию написать, правда так как никогда этого не делал то придется покапаться в мане по вопросу задания палитры, создания самих картинок, рисованию на них =) и пр пр пр... Но самое главное нужно чтобы картинка не сохранялась на сервере, ИМХО картинки небольшие(в районе 500х500), как по ширине-высоте, так и по весу...
 

Wicked

Новичок
Похоже, тот коммент мимо. Я тоже не понял, зачем при выводе html делать хидер header('Content-type: image/png');
 

DpoHro

Новичок
Нужен совет как создать картинку с минимально необходимой глубиной? CreateImage ИМХО маловато параметрафф... =)
 

Wicked

Новичок
глубиной цвета?

imagecreate создает ресурс, который предполагает заполнение палитры вручную. Так вот и заполни столько цветов, сколько тебе нужно.
 

DpoHro

Новичок
Imagecolorallocate? Ага теперь все ясно =) спасиб !

-~{}~ 10.07.06 11:20:

Мдя... Похоже если не сохранить картинку, то не получится вывести пользователю картинку посреди оформленной страницы..?

Пишу голый код
Код:
    header("Content-type: image/jpeg");
	
	$width = 500;
	$height = 500;
	$img = ImageCreate($width, $height);
	if (!$img) die('GD problem');
	
  	ImageJpeg($img, "", 90);
Картинка выводится, но как ее вывести посреди контента? Страница то на которой должна быть карта должна быть оформлена...
 

Фанат

oncle terrible
Команда форума
а учебник по html почитать? как в нём картинки выводятся?
 
Сверху