FriendsOfREDAXO / geolocation

Tile-Proxy/Cache und Kartendarstellung mit Leaflet für REDAXO 5.13+
MIT License
26 stars 3 forks source link

Retina-Karten #114

Closed christophboecker closed 1 year ago

christophboecker commented 1 year ago

Basierent auf #110:

Grundsätzlich die automatische Auswahl der passenden Tile-URL für Retina- und Non-Retina-Dislays ermöglichen.

Leaflet liefert dazu in der URL im Falle eines Retina-Clients ein r=@2x mit. Damit der Parameter ankommt, muss die Abruf-Url um &r={r} erweitert werden.

Alle Tile-URLs, die den Parameter @2x untetstützen, könnn dann client-seitig je nach Anforderung normale oder hochauflösende Kacheln liefern. Beispiel CartoDB/OSM:

https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager_labels_under/{z}/{x}/{y}{r}.png

Es gibt auch URL-Provider, die statt dessen die Aufösung über anders geartete Parameter anfordern. Z.B. hat HERE fix 256 oder 512 in der URL stehen. Um den Fall abzudecken könnte man mit zwei URLs arbeiten. Die Standard-URL wird bei normalen Anfragen (r=) genommen, die Retina-URL bei Anfragen mit r=@2x.

https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey=....
https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/512/png8?apiKey=....
christophboecker commented 1 year ago

Lösung 1: alternative Retina-URL

Es gibt ein zweites Eingabefeld für eine optionale Retina-Url. Über den vom Client gelieferten Parameter r=@2x wird entschieden, welche genutzt wird. Bleibt das Feld für die Retina-Url leer, würde die Standard-Url benutzt. Falls dort {r} vorkommt, wird @2x eingesetzt.

Technisch: beim Kachelabruf prüft der Proxy, ob r == '@2x'und ob eine Retina-Url vorliegt. In dem Fall wird die Retina-Url zum Kachelabruf genutzt.

grafik

Lösung 2: Alternativer {r}-Parameter

Es bleibt bei einem URL-Feld und bei {r}als Platzhalter. Der Inhalt des Platzhalters kann im Formular flexibel vorgegeben werden, also z.B. bei den HERE-Urls 256 für Standard und 512für Retina. Bleibt der Platzhalter leer gilt wieder der Default: leer für Standardauflösung und @2x für Retina.

grafik

Technisch: Wenn angegeben werden die r-Parameter bereits beim Aufbau der Karte im Mapset mit an den Client übertragen. Bei der Anforderung einer Karte steht dann bereits - um im Beispiel zu bleiben - r=256 bzw. r=512 in der Anforderung an den Proxy. Weil: Leaflet erlaubt es, den vorgesehenen Wert (leer bzw. @2x) zu überschreiben. Damit entfällt die Fallunterscheidung im Proxy.

bitshiftersgmbh commented 1 year ago

1 scheint mir solider. Der 2. Ansatz setzt voraus, dass der Basis-URL-Syntax in der Form parameterisierbar ist. Das muss ja aber nicht zwingend so sein bei anderen Diensten oder in der Zukunft. Mit einer 2. vollständigen URL bist du diesbezüglich safe.

christophboecker commented 1 year ago

Ziemlich eindeutiges Votum! Danke.