Greek Villages
Η αρχική ιδέα δημιουργήθηκε βλέποντας την οπτικοποίηση του Christophoros στο flickr. Η μεθοδολογία βέβαια που ακολούθησα είναι εντελώς διαφορετική. Αρχικά έγινε έρευνα για βάση δεδομένων. Στη περιήγηση βρήκα την βάση MaxMind World Cities with Population που διατίθεται με άδεια ανοιχτών δεδομένων. Μέ το emacs έκανα επιλογή των ελληνικών χωριών και τα ανέβασα στο google documents.
Έπειτα, το επόμενο βήμα ήταν η οπτικοποίηση των παραπάνω δεδομένων. Για το σκοπό αυτό και για το σχεδιασμό του πρωτότυπου χρησιμοποιήθηκε η γλώσσα προγραμματισμού Processing. Καταπληκτική δουλειά στην οπτικοποίηση δεδομένων κάνει ο Jer Thorp και μοιράζεται κώδικα για να αντλείς δεδομένα απο τα spreadsheet documents του google.
Το πρώτο βήμα ήταν η προσαρμογή του γεωγραφικού μήκους και πλάτους στια διαστάσεις της οθόνης.
float lonToX ( float lon ) {
return map( lon, 17, 31, 0, width );
}// convert a longitude value to screen space
float latToY ( float lat ){
return map( lat, 33, 43, 0, height );
}// convert a latitude value to screen space
Στη συνέχεια δημιουργήθηκαν τα διανύσματα:
float[] xPos = new float[23263]; float[] yPos = new float[23263]; String[] xoria = new String[23263];
χρησιμοποιόντας την βιβλιοθήκη XlsReader by Florian Jenett και τον παρακάτω κώδικα:
reader = new XlsReader( this, "ellinikaXoria3colones.xls" );
reader.firstRow();
reader.nextRow(); // legend
while ( reader.hasMoreRows() ) // loop thru rows
{
reader.nextRow();
xoria[count] = reader.getString(); // city name
reader.nextCell(); // lon
xPos[count] = lonToX( reader.getFloat() );
reader.nextCell(); // lat
yPos[count] = height - latToY( reader.getFloat() );
count++;
}
Η συνέχεια είναι ένα προγραμματιστικό παιχνίδι προσπάθειας να λύσεις γρίφους που μόνος σου δημιουργείς. Παράδειγμα αποτελεί η διάδραση με το κλίκ του ποντικιού. Μπορώ να κλικάρω σε ένα σημείο και να μου εμφανίζει τα χωριό; Φυσικά, γιατί με τον προγραμματισμό όλα γίνονται.
void mouseInteraction() {
fill(0,32);
rect(-50, -50, width+100, height+100);
fill(255);
noFill();
for (int i = 0; i < 23262; i++) {
if(abs(xPos[i]-mouseX) < 2 && abs(yPos[i]-mouseY) < 2) {
if (yPosRand > height-13) yPosRand = 13;
stroke(int(random(255)),int(random(255)),int(random(255)), 125);
curve(0,height, xPos[i], yPos[i], width - 250, yPosRand, width - 250, yPosRand);
text(xoria[i], width - 250, yPosRand);
yPosRand = yPosRand + 13;
}
viewMouseInteraction = false;
}
}
void mousePressed() {
viewMouseInteraction = !viewMouseInteraction;
}
Η εφαρμογή διατίθεται με GNU licence είναι δωρεάν, και o κώδικάς της ανοιχτός. Κατεβάστε την εφαρμογή και τον κώδικα για Linux, για MacOSX και για Windows.
Aris Bezas Mon, 04 October 2010, 02:57PM
See also:
- how popular is each greek village, town, and city on the web? by Christophoros Vradis
- Οπτικοποίηση χωριών της Ελλάδας by http://geodata.gov.gr/