Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Геоинформационная система

289
10 июня 2009 года
Jeyson
207 / / 20.04.2000
Здравствуйте.
Хочу начать создание ГИС - системы. Не знаю с чего начать. Для начала хотелось бы получить ответы на нижеприведенные вопросы. А может и получить дополнительные рекомендации.
Надо учесть следующее:
1. Объем данных - в идеале все дома, улицы, коммуникации целого города.
2. Скорость перерисовки при панаромировании и зумировании.
3. Поиск объектов.
4. Создание объектов

Вопросы:
1. где хранить данные.
2. на каком движке писать.
3. как рисовать и манипулировать системой (выбор, создание системы, зумирование)
1
10 июня 2009 года
kot_
7.3K / / 20.01.2000
Цитата: Jeyson
Здравствуйте.
Хочу начать создание ГИС - системы.


Зачем? во первых без внятного ответа на этот вопрос все ваши вопросы просто бессмыслица. Во вторых - те вопросы которые вы задали, это собственно вы должны и ответить - потому что именно вы сказали

Цитата: Jeyson

Хочу начать создание ГИС - системы.


если вы не в состоянии внятно ответить ни на первый ни на второй вопрос - то вероятно ваш проект обречен.
В крайнем случайте используйте любой удобный вам картографический сервис типа гуглмапа, написав к нему оболочку с нужной вам функциональностью (предполагается что вы ответили на первый вопрос)

240
10 июня 2009 года
aks
2.5K / / 14.07.2006
Цитата: kot_
В крайнем случайте используйте любой удобный вам картографический сервис типа гуглмапа, написав к нему оболочку с нужной вам функциональностью (предполагается что вы ответили на первый вопрос)


На самом деле для таких целей скорее подойдут продукты ArcGIS для разработики. Собственно там как раз решены проблемы заданные автором давно и умными людьми. )

http://www.esri.com/software/arcgis/index.html

92
10 июня 2009 года
Тень Пса
2.2K / / 19.10.2006
IMHO, "Hello world" перешёл на новый уровень... Ровно как и в web "хочу написать свою CMS"...
289
10 июня 2009 года
Jeyson
207 / / 20.04.2000
Бальшое спасибо за сарказм ))
343
10 июня 2009 года
lena_ki
282 / / 14.04.2005
Можно использовать популярный формат от компании MapInfo, и их компонет MapInfo MapX который легко устанавливается в Builder 6 и имеет богатый функционал.
Установка MapInfo MapX в RAD 2007 и 2009 чуть сложнее:
[FONT=monospace]Import and and compile Mapx50.dll[/FONT]
[FONT=monospace]tlibimp -P- -C+ "C:\Program Files\MapInfo\MapX 5.0\MAPX50.DLL"[/FONT]
[FONT=monospace]bcc32 -c MapXLib_OCX.cpp[/FONT]
[FONT=monospace]//exp:[/FONT]
[FONT=monospace]No errors[/FONT]
[FONT=monospace]//act:[/FONT]
[FONT=monospace]Error E2316 MapXLib_OCX.h 698: 'set_Width' is not a member of 'TField'[/FONT]
[FONT=monospace]Error E2316 MapXLib_OCX.h 699: 'set_Decimals' is not a member of 'TField'[/FONT]
[FONT=monospace][FONT=monospace]Edit the generated code to look like the code generated in BCB6:[/FONT]
[FONT=monospace]CHANGE:[/FONT]
[FONT=monospace]__property short Width={ read=get_Width, write=set_Width, stored=false };[/FONT]
[FONT=monospace]__property short Decimals={ read=get_Decimals, write=set_Decimals, stored=false };[/FONT]
[FONT=monospace]TO:[/FONT]
[FONT=monospace]__property short Width={ read=get_Width, stored=false };[/FONT]
[FONT=monospace]__property short Decimals={ read=get_Decimals, stored=false };[/FONT]


[FONT=monospace]There is another change necessary to enable installing the components.[/FONT]
[FONT=monospace]It is necessary to alias "Label" to some other name to avoid a name[/FONT]
[FONT=monospace]clash with VCL TLabel. To do that aliasing, open ..\bin\tlibimp.sym[/FONT]
[FONT=monospace]and add an alias under C++ typenames.[/FONT]
[FONT=monospace][C++:TypeNames][/FONT]
[FONT=monospace]Label=MapXLabel[/FONT]
[FONT=monospace]After that change to tlibimp.sym subsequent imports will alias[/FONT]
[FONT=monospace]TLabel and the components can be installed without conflict with[/FONT]
[FONT=monospace]VCL TLabel.[/FONT]

[/FONT]
294
10 июня 2009 года
Plisteron
982 / / 29.08.2003
И что все так на бедного Jeyson накинулись?
"Аффтар", безусловно, "жжот", но ведь он ни о целях проекта, ни о полноте его реализации ничего не говорил. Может быть, это коллективный проект, а может быть, какая-нибудь дипломная работа, от которой не требуется законченность коммерческого продукта.
Цитата: Jeyson
Вопросы:
1. где хранить данные.


Можно использовать Oracle или DB2. Обе упомянутые СУБД очень мощные (если кто не знает ;) ) и имеют поставляемые отдельно средства хранения данных GIS. Для первой из них написано множество разных библиотек "прямого доступа" из C++ Builder (мне больше всего нравится ODAC)
Только разбираться с этими СУБД, если нет опыта или знающего товарища, немного хлопотно, особенно с DB2.

92
10 июня 2009 года
Тень Пса
2.2K / / 19.10.2006
Цитата: Jeyson
Бальшое спасибо за сарказм ))


извиняй, конечно, если обидел. но просто этих ГИС систем... как собак не резанных.

даже общедоступные - Google Maps, Yandex.Карты, даж у MS что-то было...

первое что на ум приходит - ДубльГИС (www.2gis.ru)

http://www.dataplus.ru/industries/100_GIS/GIS.htm тут почитай
http://www.gisinfo.ru/ - тут
http://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BE%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0 - тут
http://gisexpert.ru/ - тут
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 - тут (а отсюда по ссылкам СУБД пройдись)

и вопросы твои сами отпадут...

UPD: компоненты для разработки ГИС
http://gislab.wharton.upenn.edu/LINKS/components.html
http://www.vclcomponents.com/s/0__/EzGIS
http://www.torry.net/pages.php?id=625
http://www.tatukgis.com/products/summary/products.aspx - еще какой-то KIT

294
15 июня 2009 года
Plisteron
982 / / 29.08.2003

Неинтересная статья. Про мои любимые Oracle и DB2 сказано только, что такие существуют.

289
16 июня 2009 года
Jeyson
207 / / 20.04.2000
Спасибо большое за ответы. Начинает все потихоньку в голове укладываться. Теперь если позволите еще два глобальных вопроса от чайника. Ответы на них, как я полагаю, будут значительно влиять на скорость работы.
1. Вывод графики. Что использовать канву для рисования (формы или имаджа) или библиотеку OpenGL. Или без разницы? И еще: представим что у нас порядка 20000 домов. Каждый из них имеет как минимум 4 координаты, т.е. надо отрисовать порядка 80000 линий. Я предполагаю, что отрисовка будет проходить в цикле, который будет иметь порядка 80000 итераций. А ведь это только дома! Еще сети, дороги, зоны и т.д...
Как можно оптимизировать вывод? если можно, то с примером, хотя бы образно.
2. Чтение-запись данных. При прорисовке графики или поиске выводить сразу из базы или использовать промежуточные массивы? Или продумать какой либо класс? если можно с примером...
Извиняюсь если обидел глупыми вопросами...
Спасибо.
240
16 июня 2009 года
aks
2.5K / / 14.07.2006
Цитата: Jeyson

1. Вывод графики. Что использовать канву для рисования (формы или имаджа) или библиотеку OpenGL. Или без разницы? И еще: представим что у нас порядка 20000 домов. Каждый из них имеет как минимум 4 координаты, т.е. надо отрисовать порядка 80000 линий. Я предполагаю, что отрисовка будет проходить в цикле, который будет иметь порядка 80000 итераций. А ведь это только дома! Еще сети, дороги, зоны и т.д...
Как можно оптимизировать вывод? если можно, то с примером, хотя бы образно.


:eek: Так зачем тебе рисовать все 20000 домов? Рисуй те которые на экране видны + небольшую область за пределами экрана.

Цитата: Jeyson

2. Чтение-запись данных. При прорисовке графики или поиске выводить сразу из базы или использовать промежуточные массивы? Или продумать какой либо класс? если можно с примером...
Извиняюсь если обидел глупыми вопросами...


Я бы использовал заранее закэшированную дополнительную область вокруг отображаемой в окне - шириной в 1-2 экрана. Для более гладкого прокручивания. Соотвественно регулярно обновляемую по мере движения по карте.

А вобще все эти вещи давно реализованны в различных gis движках. Да хоть того же arcgis. =)

289
16 июня 2009 года
Jeyson
207 / / 20.04.2000
не понимаю.
вывод идет примерно след образом:
for(i=1; i<количество домов; i++)
{
LineTo(x,y);
MoveTo(x,y);
}

Допустим определить находится дом в экране или нет можно тупо анализируя координаты экрана (еще if() появится). А как избежать лишней итерации цикла?
Спасибо.
240
16 июня 2009 года
aks
2.5K / / 14.07.2006
У тебя в каком виде данные о домах то хранятся?
289
16 июня 2009 года
Jeyson
207 / / 20.04.2000
Читаю из БД в структуру типа

struct Dom{
int X1,X2,Y1,Y2;
}

struct Dom masDom[20000];

Примерно так планирую.

А дальше в цикле рисую как выше. Т.е. при рисовании идет перебор всех элементов структуры.
240
16 июня 2009 года
aks
2.5K / / 14.07.2006
X1,X2,Y1,Y2 - это что координаты дома? Их можно привязать к координатам отображаемой области? Вот и делай из базы выборку только тех домов, которые в область попадаеют, а не всех.
289
16 июня 2009 года
Jeyson
207 / / 20.04.2000
Цитата: aks
X1,X2,Y1,Y2 - это что координаты дома? Их можно привязать к координатам отображаемой области? Вот и делай из базы выборку только тех домов, которые в область попадаеют, а не всех.




Да, это координаты дома. И привязать можно. Однако, это же займет много времени - допустим после панарамирования надо открыть БД, сделать выборку, заполнить структуру, а лишь потом рисовать. Или я не прав?

240
16 июня 2009 года
aks
2.5K / / 14.07.2006
Сделать небольшую выборку в индексированной БД много времени не займет.
Это явно займет меньше времени чем отрисовка всего.
Зачем что то открывать и обратно закрывать в процессе работы тоже не понятно.
Плюс, как я уже говорил, кэшировать близлежащие области - делать для них выборку в фоне.

На разных же зумах у тебя должны быть разные объекты - на более детальном появиться те, которых нет на крупном плане.

Ну вобщем изобретаем вилосепед? =)
92
16 июня 2009 года
Тень Пса
2.2K / / 19.10.2006
Цитата: Jeyson
не понимаю.
вывод идет примерно след образом:
for(i=1; i<количество домов; i++)
{
LineTo(x,y);
MoveTo(x,y);
}

Допустим определить находится дом в экране или нет можно тупо анализируя координаты экрана (еще if() появится). А как избежать лишней итерации цикла?
Спасибо.



загуглим?

и:
- нет, не лучше рисовать на канве линиями и точечками вручную
- да, лучше использовать какой-нить движок, там всё уже придумано до тебя (например GDI+)

PS: aks прав, зачем изобретать велосипед и тот с одним колесом и без руля? (не в обиду)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог