fix: slim pin geometry, r/d=0.35 opening angle 20deg
Some checks failed
Build & Push marker-api / build (push) Failing after 4s

Was: r=35.5% of size -> r/d=0.59 -> 36 deg opening -> fat oval
Now: r=24% of size -> r/d=0.35 -> 20 deg opening -> proper Google Maps pin shape
This commit is contained in:
Conrad Schulz 2026-07-01 12:23:31 +00:00
parent 3960c9c5c1
commit 9367ba5b6b
4 changed files with 18 additions and 15 deletions

View file

@ -237,7 +237,7 @@ docker compose logs -f tileserver # Raster-Rendering
- Image: `192.168.178.6:8083/cschulz/rd13_tile_server-marker-api:latest` (Forgejo Registry)
- API Root: `http://localhost:9984`
- Endpunkt: `/styles/v4/marker/{type}+{hexcolor}(@{scale}x).png`
- Typen: `pin-s` (24px), `pin-m` (32px), `pin-l` (40px); Canvas quadratisch, 80% opak
- Typen: `pin-s` (24px), `pin-m` (32px), `pin-l` (40px); Canvas quadratisch, 80% opak, schlanke Teardrop-Form (r/d≈0.35)
- Image neu bauen: `docker compose build marker-api && docker compose up -d marker-api`
- CI: Forgejo baut + pusht automatisch bei Änderungen in `services/marker-api/`

View file

@ -110,9 +110,12 @@ Geometry-Fix: r=35.5% der Breite, tipY=97.5%, Spitze passt jetzt sauber in die C
### Prompt 12
«Aber ich will doch das es in media wiki gut aussieht also muss es in 32x32 passen und gut aussehen. wäre es auch möglich ihn etwas durchsichtig zu machen?»
### Antwort 12
Zurück auf quadratische Canvas (pin-m=32×32 @1x, 64×64 @2x) mit optimierter Geometrie:
- `r=35.5%` der Breite (statt 29%) → Kreis füllt Canvas besser aus
- `tipY=97.5%` → Spitze immer noch vollständig sichtbar
- 80% Transparenz: `fill.A=204`, `white.A=220`
- Verifiziert: `pin-m@2x = 64×64px PNG`
### Prompt 13
«Das sieht aber immer noch komisch aus...»
### Antwort 13
Ursache identifiziert: `r/d = 0.59` (Kreisradius / Abstand zur Spitze) → Öffnungswinkel 36° → Tangenten laufen flach aus → Form sieht aus wie ein Oval.
Fix: `r = size * 0.24` (statt 0.355) → `r/d ≈ 0.35` → Öffnungswinkel 20° → schlanker Pin.
Verifiziert mit blauen Test-Pin (±4285F4): sieht jetzt aus wie Google-Maps-Pin.

View file

@ -1,6 +1,6 @@
# PROJECT_CONTEXT rd13_tile_server
**Letzte Aktualisierung:** 2026-07-01 **Marker-API**: Go-Service für Maptiler-kompatible Marker-Endpunkte (`/styles/v4/marker/*`) hinzugefügt. 32×32px Canvas, 80% Transparenz, Google-Maps-Teardrop-Form. Forgejo CI baut + pusht Image in lokale Container-Registry.
**Letzte Aktualisierung:** 2026-07-01 **Marker-API**: Go-Service für Maptiler-kompatible Marker-Endpunkte (`/styles/v4/marker/*`). 32×32px Canvas, schlanker Teardrop-Pin (`r/d≈0.35`, Öffnungswinkel 20°), 80% Transparenz. Forgejo CI baut + pusht Image in lokale Container-Registry.
---

View file

@ -156,14 +156,14 @@ func generateMarker(pinType, hexColor string, scale float64) ([]byte, error) {
size = 12
}
// Geometrie: Teardrop in quadratische Canvas einpassen
// Kreis füllt obere 3/4, Spitze landet am unteren Rand
// Geometrie: schlanker Google-Maps-Pin
// r/d ≈ 0.35 → Öffnungswinkel ~20° → Pin sieht spitz aus, nicht oval
cx := size / 2
r := size * 0.355 // Kreisradius (rechts/links je 1px Puffer für Rand)
cy := r + size*0.02 // Kreismittelpunkt Y (kleiner oberer Rand)
tipY := size * 0.975 // Spitze Y (knapp vor unterem Rand)
borderW := math.Max(1.2, size*0.045) // Randbreite
innerR := r * 0.36 // weißer Innenpunkt
r := size * 0.24 // kleiner Kreis → langer, schlanker Schwanz
cy := r + size*0.02 // Kreismittelpunkt oben
tipY := size * 0.975 // Spitze am unteren Rand
borderW := math.Max(1.5, size*0.05) // Randbreite
innerR := r * 0.40 // weißer Innenpunkt (etwas größer für Sichtbarkeit)
// Transparenz: 80% opak (Alpha 204)
fillBase := hexToColor(hexColor)