Färglägga karta efter medlemmar

Permalänk
Medlem

Färglägga karta efter medlemmar

Jag håller på med ett litet projekt just nu där jag ska färglägga en karta i olika färger beroende på hur många medlemmar det kommer från just det landet. Typ att röd färg indikerar att det kommer fler än 1000 medlemmar därifrån, grön mellan 500 och 1000 osv. Jag undrar dock hur jag ska lösa det rent praktiskt med bilderna. Jag skulle kunna göra transparenta gif-bilder där en bild motsvarar ett land och en färg på det landet. I sådana fall skulle det behövas X antal bilder för varje land (varje land ska ju finnas i X antal olika färger). Det skulle dock vara ganska dåligt (förmodar jag) eftersom laddningstiden skulle bli dålig genom att man skulle behöva ladda ner en massa bilder (kan förmodligen dock få ner bildstorleken till ca 2kb). Bilderna skulle sedan staplas på varandra med hjälp av Z-index.

Iaf, har ni något bättre förslag? Det finns säkerligen någon funktion där man kan färglägga bilder med php!? Men det skulle bli ganska svårt att få till konturerna bra då...

Det är denna karta jag tänkt använda: http://geography.about.com/library/blank/europe.jpg

Permalänk
Medlem

Är länderna kvadratiska kör man ju med CSS. Men eftersom vi väntar på CSS3 att komma med sina runda divs och allt sådant så kanske vi tänker om lite.
Jag skulle göra typ en flash-karta.
Så kan man ju mata in värden med $_POST i php så att man kan välja land och hur många.

Eller så kollar du upp vilka friheter du har när du genererar en PNG-bild i PHP. Dvs om du kan lägga in jpg-bilden i bakrunden, det hade ju varit ultimat.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

nje, gillar inte riktigt flash. Sedan skulle väl inte en flash-fil bli mindre än 90 kb (45 EU-länder * 2kb)?

När du pratar om att generera en bild genom php, är det denna funktion du tänker på? http://se.php.net/manual/en/function.imagepolygon.php Är inte så hemma med denna sortens funktioner.

Permalänk
Hedersmedlem

GD-lib är ju bra att köra sånt med, annars.

Ta Sverige, dela upp i kvadrater med hjälp av t.ex. Imageready, och vid utskrift byter du färg på varje liten bild. Alternativt kan du plotta ut en punkt där folk bor.

Permalänk
Medlem

Problemet ligger väl i att det är ganska svårt att dula upp alla EU-länder i rutor... Men om du har något bra förslag på att göra det på ett enkelt nått så visst!

Du nämnde imageready, kan det programmet dela upp bilder i rutor automatiskt? färglägger rutorna i efterhand blir HELA rutorna fyllda eller, ingen hänsyn tas till genomskinlighet!?

Just nu kör jag med detta:

<div style="position:absolute;top:200px;left:200px;width:550px;z-index:1;"><img src="layout/maps/blank.gif" alt="" /></div> <div style="position:absolute;top:200px;left:200px;width:550px;z-index:8;"><img src="layout/maps/icelandRed.gif" alt="" /></div> <div style="position:absolute;top:200px;left:200px;width:550px;z-index:10;"><img src="layout/maps/sweden.gif" alt="" /></div> <div style="position:absolute;top:200px;left:200px;width:550px;z-index:12;"><img src="layout/maps/norwayLightBlue.gif" alt="" /></div> <div style="position:absolute;top:200px;left:200px;width:550px;z-index:14;"><img src="layout/maps/finland.gif" alt="" /></div> <div style="position:absolute;top:200px;left:200px;width:550px;z-index:16;"><img src="layout/maps/fr.gif" alt="" /></div>

Ser ni något problem med detta förutom att det är jobbigt att göra alla länder?

En till fråga när jag ändå håller på: bilderna ligger på ca 1,5 KB just nu, men klusterstorleken är väl 2,048 KB eller nått!? kommer min bandbredd påverkas på 1,5 KB eller 2 KB?

Permalänk
Medlem
Permalänk
Medlem

Det verkar finnas flood fill i GD: http://se.php.net/manual/sv/function.imagefilltoborder.php

EDIT: Men jag förstår inte riktigt hur den funkar. Här har du lite grundkod, men ImageFillToBorder() verkar lite underlig, just nu blir hela kartan väldigt rödartad. Nån som förstår varför?

<?php $map = "http://geography.about.com/library/blank/europe.jpg"; $img = ImageCreateFromJPEG($map); // Colors $black = ImageColorAllocate($img, 0, 0, 0); $red = ImageColorAllocate($img, 255, 0, 0); ImageFillToBorder($img, 440, 120, $black, $red); header("Content-type: image/jpeg"); ImageJPEG($img); ImageDestroy($img); ?>

EDIT 2: Ah, nu fick jag det att funka. Först reducerade jag färgerna i bilden så den blev helt svartvit (förut hade den runt 50 nyanser av vitt och svart), och därutöver fick jag av nån anledning plocka konturfärgen från bilden istället för att utgå från att den var svart.

Fungerande:

http://henrik.nyh.se/dump/map/map.html
http://henrik.nyh.se/dump/map/map.phps

Permalänk
Hedersmedlem

Malesca: Nice!

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Tack

Blir gult där man klickar:
http://henrik.nyh.se/dump/map/yellow/colorcoord.php

Källkod i samma katalog (.phps). Långa taggar (<?php ?>) av ren välvilja; det är inget jag personligen föredrar.

EDIT: Det räckte visst med ImageFill(), man behöver inte använda ImageFillToBorder(). Länkade filerna uppdaterade därefter.

EDIT2: Fast om man har ImageFillToBorder() så kan man inte göra det svarta (konturerna) gult; det kan man med ImageFill().

Permalänk
Medlem

aaah, coolt! Tack så mycket Malesca!! Ska genast kolla på det, men det ser ju väldigt häftigt ut!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Malesca
Tack

Blir gult där man klickar:
http://henrik.nyh.se/dump/map/yellow/colorcoord.php

Källkod i samma katalog (.phps). Långa taggar (<?php ?>) av ren välvilja; det är inget jag personligen föredrar.

EDIT: Det räckte visst med ImageFill(), man behöver inte använda ImageFillToBorder(). Länkade filerna uppdaterade därefter.

EDIT2: Fast om man har ImageFillToBorder() så kan man inte göra det svarta (konturerna) gult; det kan man med ImageFill().

Om man klickar på norra norge så markeras bara det...Inte hela landet

Visa signatur

"With a rubberduck one's never alone"

Permalänk
Medlem

DeaN: upptäckte också det, men det var ganska simpelt att lösa genom att rita en 1px linge mellan de båda delarna. Då fattar PHPn att den ska färglägga allt. Problemet uppstår även i södra ukraina, i västra turkiet, italien med sina öag, frankrike och korsika, m.fl.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av DeaN
Om man klickar på norra norge så markeras bara det...Inte hela landet

http://apakossa.org/upload/norge.jpg

Japp. Jag skrev inte kod för "färglägg länder" utan för "färglägg sammanhängande områden". Om man klickar i Sverige markeras ju inte Gotland m.fl.

Bästa lösningen på det är antagligen att ha en databas (array, råtextdatabas, MySQL, vadhelst) som säger t.ex. att för att markera Norge måste man färglägga fältet runt punkterna (1,2), (3,4) respektive (5,6).

Man får också tänka på att t.ex. Frankrike äger väl öar som ligger på andra sidan världen, så man får bestämma sig för om ett besök i fastlands-Frankrike också ska färga dessa.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Malesca
Tack

Blir gult där man klickar:
http://henrik.nyh.se/dump/map/yellow/colorcoord.php

Källkod i samma katalog (.phps). Långa taggar (<?php ?>) av ren välvilja; det är inget jag personligen föredrar.

EDIT: Det räckte visst med ImageFill(), man behöver inte använda ImageFillToBorder(). Länkade filerna uppdaterade därefter.

EDIT2: Fast om man har ImageFillToBorder() så kan man inte göra det svarta (konturerna) gult; det kan man med ImageFill().

Du har missat en kort tagg.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk