You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#51 2013-11-25 08:31:27

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 8,547

Re: Alacarte, рендеринг своих карт средствами OSM

Alexandr Zeinalov wrote:

В городах пустых тайлов явно меньше чем в среднем по больнице.

Городов на всю Россию кот наплакал. В основном или пусто или лес.

Offline

#52 2013-11-25 10:17:43

chnav
Member
From: Russia, mapping Kazakhstan
Registered: 2010-03-18
Posts: 3,303

Re: Alacarte, рендеринг своих карт средствами OSM

Поизучал вчера возможности разных программ... Конечно большинство заточено на ubuntu, что для меня чревато "чёрным ящиком", т.е. одноразово всё это запустить в виртуалке смог, но шаг влево-вправо - проблемы решить не смогу.

В то же время обнаружилось что TileMill имеет встроенный рендер на основе кода мапника, но он сознательно сделан без кеширования т.к. в основном используется для отладки стилей. Сидит по адресу и порту

http://localhost:20008/tile/road-trip/{z}/{x}/{y}.png (италиком выделено название проекта-картостиля в TileMill)

Его тайл-сервер можно также запускать фоном без GUI. Соответственно нужно прикрутить tilecache или что-то подобное, а также настроить подгрузку дифов в PostGIS и проверку необходимости обновления тайлов.

PS: ещё бы кэш хранить в одном файле...

Last edited by chnav (2013-11-25 10:33:00)

Offline

#53 2013-12-24 20:42:31

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 8,547

Re: Alacarte, рендеринг своих карт средствами OSM

freeExec wrote:

Alacarte Server (обновлён)
Необходимая особенность .. , т.к. рендер шрифтов работает только с одним потоком.
server.num-threads = 1

Больше не актуально, спасибо Chun-wei за патч.

Offline

#54 2013-12-25 08:46:56

chnav
Member
From: Russia, mapping Kazakhstan
Registered: 2010-03-18
Posts: 3,303

Re: Alacarte, рендеринг своих карт средствами OSM

freeExec
Спасибо, действительно загружает оба ядра на ноутбуке. :up:

Offline

#55 2014-03-19 20:44:14

Muz1kand
Member
From: Псков
Registered: 2014-02-05
Posts: 36
Website

Re: Alacarte, рендеринг своих карт средствами OSM

А случаем под ARM собрать alacarte кто то не сможет? Интересует под RaspberryPi...
Был бы весьма признателен

Offline

#56 2014-03-20 04:44:01

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 8,547

Re: Alacarte, рендеринг своих карт средствами OSM

У меня нет. Но зачем тебе, только если ты собираешься рассматривать карту на 18 зуме. На больших масштабах довольно сильно грузит процессор для рендеринга, поэтому вряд ли получится что-то адекватное с RaspberryPi.

Offline

#57 2014-03-20 10:07:44

Muz1kand
Member
From: Псков
Registered: 2014-02-05
Posts: 36
Website

Re: Alacarte, рендеринг своих карт средствами OSM

freeExec wrote:

У меня нет. Но зачем тебе, только если ты собираешься рассматривать карту на 18 зуме. На больших масштабах довольно сильно грузит процессор для рендеринга, поэтому вряд ли получится что-то адекватное с RaspberryPi.

Хочется экспериментов с картами, в закрытой сети без доступа к интернету(Отображение разнородной телеком-информации с привязкой к узлам доступа на карте)

Поднимать ради мелких задач мапник, postgis и прочее считаю неразумным.
Ручками "лялюкарту" собрать мне не удалось sad

P.S. Mapnik же на малинке запускали...

Offline

#58 2016-04-25 07:46:33

chnav
Member
From: Russia, mapping Kazakhstan
Registered: 2010-03-18
Posts: 3,303

Re: Alacarte, рендеринг своих карт средствами OSM

Замечательный рендер, не требующий танцев с базами, настройками и т.д. Работает быстро, для Windows просто находка.
http://shtosm.ru/all/alacarte/
http://forum.openstreetmap.org/viewtopic.php?pid=329105


К сожалению развитие прекратилось в 2013 году, issues висят годами. Есть несколько досадных недороаботок или багов, которые не позволяют использовать его на полную мощь, хотя и сейчас это достойный инструмент.

AMDmi3, freeExec, akks, Zverik - не могли бы вы довести alaCarte до ума ? Меня при одном взгляде на boost берет оторопь ))

Issues, bugs:
1. Не подписываются замкнутые мультиполигоны - заливка есть, надписи нет.
2. Не рисуются иконки в центре area
2. Заполнение line паттернами image выровнено по экрану, а не по линии: невозможно рисовать стрелки одностороннего движения, обозначать ЛЭП, а также делать линии асимметричными, например обрывы.
3. Функция eval не работает для свойства text, и вообще у eval очень ограниченный список поддерживаемых функций от стандарта.
4. Не поддерживаются class и set. Без них mapcss сильно разрастается т.к. одни и те же условия приходится проверять по нескольку раз (например при анализе surface, smoothness, tracktype и их комбинаций). По поводу set ответил TheMarex, но похоже мы просто не поняли друг друга: я понимаю set как временную переменную для упрощения синтаксиса, а не исправление базы объектов на лету.

Это самые наболевшие проблемы. Еще не хватает макроподстановок типа размера шрифтов, толщины линий - для ретины приходится переделывать размеры и зум. Впрочем этой функции в стандарте MapCSS нет.

Offline

#59 2016-05-16 13:10:41

chnav
Member
From: Russia, mapping Kazakhstan
Registered: 2010-03-18
Posts: 3,303

Re: Alacarte, рендеринг своих карт средствами OSM

chnav wrote:

3. Функция eval не работает для свойства text, и вообще у eval очень ограниченный список поддерживаемых функций от стандарта.

Собрал отладочную версию под винду, выяснилось следующее: программа при парсинге mapcss все значения справа от двоеточия трактует как eval вне зависимости пишится eval явно или нет. Когда все правила обработаны, происходит финальное присвоение значений, и вот тут поля text и shield-text трактуются не как остальные - считается что там находится название тега. Вместо того чтобы использовать в стандарте хотя бы макропеременные чтобы отличить название поля от значения, решили сделать так. Итого конструкции

text: name
text: "na . me"
text: eval (concat("n", "ame")

выдают одинаковый результат т.е. это название _тега_.

Сделал заплатку, чтобы тест трактовался как значение ставлю перед ним underscore.
text: "_name" будет отрендерен как "name". Костыль, конечно ((

diff --git a/src/server/style.cpp b/src/server/style.cpp
index 4bcf30a..b426f92 100644
--- a/src/server/style.cpp
+++ b/src/server/style.cpp
@@ -159,25 +159,39 @@ void Style::finish(GeoObject* associatedObject, shared_ptr<const Stylesheet> sty
 
 	if (this->text.str().size())
 	{
-		// text is not null, so do a tag lookup and display the tag value
-		auto entry = associatedObject->getTags().find(this->text, boost::hash<MaybeCachedString>(), CachedComparator());
-		if (entry != associatedObject->getTags().end()) {
-			this->text = entry->second.str();
+		// text is not null, check raw text or tag
+		if (this->text.str().substr(0, 1) == "_") {
+			// raw text after underscore, not a tag
+			this->text = this->text.str().substr(1);
 		} else {
-			// no tag of that name found. display empty text
-			this->text = "";
+			// text is not null, so do a tag lookup and display the tag value
+			auto entry = associatedObject->getTags().find(this->text, boost::hash<MaybeCachedString>(), CachedComparator());
+			if (entry != associatedObject->getTags().end()) {
+				this->text = entry->second.str();
+			}
+			else {
+				// no tag of that name found. display empty text
+				this->text = "";
+			}
 		}
 	}
 
 	if (this->shield_text.str().size())
 	{
-		// shield_text is not null, so do a tag lookup and display the tag value
-		auto entry = associatedObject->getTags().find(this->shield_text, boost::hash<MaybeCachedString>(), CachedComparator());
-		if (entry != associatedObject->getTags().end()) {
-			this->shield_text = entry->second.str();
-		} else {
-			// no tag of that name found. display empty text
-			this->shield_text = "";
+		// shield_text is not null, check raw text or tag
+		if (this->shield_text.str().substr(0, 1) == "_") {
+			// raw text after underscore, not a tag
+			this->shield_text = this->shield_text.str().substr(1);
+		}
+		else {
+			// shield_text is not null, so do a tag lookup and display the tag value
+			auto entry = associatedObject->getTags().find(this->shield_text, boost::hash<MaybeCachedString>(), CachedComparator());
+			if (entry != associatedObject->getTags().end()) {
+				this->shield_text = entry->second.str();
+			} else {
+				// no tag of that name found. display empty text
+				this->shield_text = "";
+			}
 		}
 	}
 

Last edited by chnav (2016-05-16 13:14:47)

Offline

Board footer

Powered by FluxBB