Maperitive: spezielle Frage zu If-Else ...

Moin !

irgendwie läßt mir das ganze keine Ruhe und das hierzu einmal eröffnete Posting ist vermutlich für den Fremdleser etwas mehr als unübersichtlich geworden. Deshalb habe ich diese Frage nochmal herausgezogen und in ein eigenes Posting überführt.

Es geht darum das bei nachfolgender Regel irgendwie nicht das angezeigt wird was ich erwarte. Hier erst einmal der Code auf Basis der “Maperitive-Standardicons”:


	points
		tourism : tourism=information
		tourism hotel : tourism=hotel
		tourism museum : tourism=museum
		tourism guide: tourism=information AND information=guidepost
...

rules
	target : tourism*
		define
			...
		draw : text
		if : *hotel
			define
				...

		elseif : *guide
			define
				...

		elseif : *museum
			define
				...
		else
			define
				...
		draw : icon


Aus meinem logischen Verständnis heraus müßten Hotel, Guide und Museum immer mit dem zugewiesenen speziellen Icon dargestellt werden und alle verbleibenden Nodes mit* tourism=information* und optional anderen Tags wie* information=office *mit dem Icon was unter ELSE definiert ist.

Das ist aber nicht so - alle Tourismus-Nodes werden zusätzlich mit dem ELSE-Icon versehen.

Erst wenn ich die Definition für tourism auf

tourism : tourism=information AND NOT information=guidepost

ändere, dann ist die Darstellung richtig - aber nicht vom Grundverständis. Liege ich mit meinen Gedanken falsch? Geht das vielleicht gar nicht was ich da hineininterpretiere ?

Eine Idee - im übrigen habe ich Maperitive 2.3.16.

Gruß Jan :slight_smile:

naja, maperative rennt durch den code, bis es eine Zuordnung findet. Objekte die bereits zugeordnet wurden werden nicht mehr geprüft.

ich vermute dass auch folgender code funktionieren würde:


	points
		tourism hotel : tourism=hotel
		tourism museum : tourism=museum
		tourism guide: tourism=information AND information=guidepost
		tourism : tourism=information

Leider negativ ! Die mit guidepost bekommen auch das Symbol von nur Tourismus=information!

Gruß Jan vom smarty

features
	points, areas
		tourism all : tourism
		tourism viewpoint : tourism=viewpoint
		tourism hotel : node[tourism=hotel]
		tourism hostel : node[tourism=hostel]
		tourism museum : tourism=museum
		tourism attraction : tourism=attraction
		tourism guide: tourism=information AND information=guidepost

properties
	map-background-color	: #F1EEE8
	map-background-opacity	: 1
	map-sea-color : #B5D0D0
	font-weight : bold
	line-color : blue
	font-family : Verdana
	text-max-width : 7
	text-halo-width : 25%
	text-halo-opacity : 0.75
	text-align-horizontal : center
	text-align-vertical : center
	font-stretch : 0.9
	map.rendering.lflp.min-buffer-space : 5
	map.rendering.lflp.max-allowed-corner-angle : 40

rules
	target : tourism*
		define
			min-zoom : 5
			text:  "Alle"
			line-color : blue
			fill-color : #BCA9A9
			line-style : solid
			text-offset-vertical :200%
			fill-color : #F6EEB7

		if : *viewpoint
			define
				text:  Name "View"
				icon-width : 16
				icon-image : icons/blackwhite/20/tourist_view_point.p.000000.20.png
		elseif : *hotel
			define
				text: Name "Hotel"
				icon-width : 16
				icon-image : icons/blackwhite/20/accommodation_hotel2.p.000000.20.png	
		elseif : *hostel
			define
				text: Name "Hostel"
				icon-width : 16
				icon-image : icons/blackwhite/20/accommodation_youth_hostel.glow.000000.20.png	
		elseif : *attraction
			define
				text: Name "Attractions"
				icon-width : 16
				icon-image : icons/blackwhite/20/tourist_attraction.p.000000.20.png	
		elseif : *museum
			define
				text: Name "Museum"
				icon-width : 16
				icon-image : icons/blackwhite/20/tourist_museum.p.000000.20.png	
		elseif : *guide
			define
				text: Name "Guide"
				icon-width : 16
				icon-image : icons/blackwhite/20/food_fastfood2.p.000000.20.png	
		elseif : *all
			define
				text: Name "ALL"
				text-offset-vertical : -200%
				text-offset-horizontal  :200%
				icon-width :60
				icon-image : icons/blackwhite/20/food_pub.p.000000.20.png


		else
			define
				text:  "Fehler"
			stop
		draw : icon
		draw : text	

Ich hoffe das Hilft bezüglich der Schleifenproblemeatic

Doppelt zutreffende Möglichkeiten ergeben doppelte Icons.

Bitte immer nur eine define innerhalb der if-Schleife (usw.) verwenden - ausser man hat durch min-zoom + max-zoom diese getrennt - es wird nur die letzte define sonst wirksam

Überlappender Text wird durch Labal-collision verhinder es erscheint nur der erstgezeichnete ! (Deshalb hab ich ALL versetzt damit man beide sieht)

hi !

ich habe das mal eben in meine Testumgebung übertragen. Soweit sogut.

Wie ich an anderer Stelle schon geschrieben hatte (quasilotte weiß wo ich meine) geht es mir ja auch noch um die Kirchen - die es OHNE Religion - und mit einer Konfessionsangabe gibt.

Bei denen wolle ich mit else dann die nicht näher definierten in Maperitive konfigurieren. Das geht in dem tollen o.g. Beispiel nicht.

Wie würdest Du das da machen ??

Gruß Jan :slight_smile:

features
	points, areas
		building church : ((building=yes AND amenity=place_of_worship) OR building=church) AND NOT religion=christian
		building church christian: (building=yes AND amenity=place_of_worship AND religion=christian) OR (building=church AND religion=christian)
		//tourism all : tourism
		tourism viewpoint : tourism=viewpoint
		tourism hotel : node[tourism=hotel]
		tourism hostel : node[tourism=hostel]
		tourism museum : tourism=museum
		tourism attraction : tourism=attraction
		tourism guide: tourism=information AND information=guidepost

properties
	map-background-color	: #F1EEE8
	map-background-opacity	: 1
	map-sea-color : #B5D0D0
	font-weight : bold
	line-color : blue
	font-family : Verdana
	text-max-width : 7
	text-halo-width : 25%
	text-halo-opacity : 0.75
	text-align-horizontal : center
	text-align-vertical : center
	font-stretch : 0.9
	map.rendering.lflp.min-buffer-space : 5
	map.rendering.lflp.max-allowed-corner-angle : 40

rules
	target : tourism*
		define
			min-zoom : 5
			text:  "Alle"
			line-color : blue
			fill-color : #BCA9A9
			line-style : solid
			text-offset-vertical :200%
			fill-color : #F6EEB7

		if : *viewpoint
			define
				text:  Name "View"
				icon-width : 16
				icon-image : icons/blackwhite/20/tourist_view_point.p.000000.20.png
		elseif : *hotel
			define
				text: Name "Hotel"
				icon-width : 16
				icon-image : icons/blackwhite/20/accommodation_hotel2.p.000000.20.png	
		elseif : *hostel
			define
				text: Name "Hostel"
				icon-width : 16
				icon-image : icons/blackwhite/20/accommodation_youth_hostel.glow.000000.20.png	
		elseif : *attraction
			define
				text: Name "Attractions"
				icon-width : 16
				icon-image : icons/blackwhite/20/tourist_attraction.p.000000.20.png	
		elseif : *museum
			define
				text: Name "Museum"
				icon-width : 16
				icon-image : icons/blackwhite/20/tourist_museum.p.000000.20.png	
		elseif : *guide
			define
				text: Name "Guide"
				icon-width : 16
				icon-image : icons/blackwhite/20/food_fastfood2.p.000000.20.png	
		elseif : *all
			define
				text: Name "ALL"
				text-offset-vertical : -200%
				text-offset-horizontal  :200%
				icon-width :60
				icon-image : icons/blackwhite/20/food_pub.p.000000.20.png


		else
			define
				text:  "Fehler"

		draw : icon
		draw : text	

	target : building*
		define
			min-zoom : 5
			line-color : blue
			fill-color : #BCA9A9
			line-style : solid
			text-offset-vertical :200%
			fill-color : #F6EEB7

		if : *church
			define

				icon-width : 16
				icon-image : icons/blackwhite/20/place_of_worship_unknown.p.000000.20.png


		elseif : *church christian
			define

				icon-width : 16
				icon-image : icons/blackwhite/20/place_of_worship_christian3.p.000000.20.png


		else
			define
				text:  "Fehler"
				icon-width : 60
				text-offset-vertical : -200%
				text-offset-horizontal  :200%
				icon-image : icons/blackwhite/20/food_pub.p.000000.20.png

		draw : icon
		draw : text				

Damit könnte es hinhauen

hi !

danke - aber “soweit war ich auch schon mit den Kirchen”.

Nur dann werden auch andere Konfessionen als unbekannt mit einem Icon versehen und das ist falsch. Church sollte nur für alle nicht mit einer religion erfaßten Kirchen gelten.

Gruß Jan :slight_smile:

OK da hatte ich wohl nicht genaugenug gelsesen - dachte alle ausser Christian

Damit sollte es passen:

building church : ((building=yes AND amenity=place_of_worship) OR building=church) AND @isFalse(religion)

hi !

danke - ich hatte es immer mit NOT versucht und das ist gescheitert.

Gruß Jan :slight_smile:

Hi !

ich habe mal etwas gebastelt und das sieht schon ganz gut aus - mein Ziel ist es letztendlich Regeln zu bekommen die “alle” Varianten (mit building=yes / building:type / bulding= [type]) in Kombi von POI abbilden ohne die OSM-Daten groß vorab editieren zu müssen.

Die aktuelle Regel folgt am Schluss. Derzeit ist noch eine Frage zu klären. Wenn Namen an den POI dann wird ein Symbol erstellt und dieses darunter beschriftet. Der Text müßte noch etwas weiter nach unten. Bei Gebäuden nur mit Namen (untere Reihe im Bild) sollte dieses zentriert werden.

(vorletzte Reihe: building=yes | building=residental)

Kann mir einer nochmal helfen - wenn das steht kann ich den Rest aufbauen. Möchte die Doppelarbeit verhindern.

Gruß Jan :slight_smile:

Hier die Regel: