Skip to content

Instantly share code, notes, and snippets.

@pespes pespes/geocoding
Created Mar 26, 2010

Embed
What would you like to do?
(ns parsing2
(:use clojure.contrib.str-utils)
;(:use com.ashafa.clutch)
(:import java.io.File
java.util.Date
java.text.DateFormat
jxl.Workbook
jxl.Sheet
jxl.Range
jxl.Cell
org.geonames.ToponymSearchCriteria
org.geonames.ToponymSearchResult
org.geonames.WebService
org.jdom.input.SAXBuilder))
(defstruct flight :day :rf :aircraft :from :etd :to :eta)
(defstruct map-point :name :country :latitude :longitude)
(def *days* ["SUNDAY" "MONDAY" "TUESDAY" "WEDNESDAY" "THURSDAY" "FRIDAY" "SATURDAY"])
(def *curr-day* (atom "None"))
(def *curr-rf* (atom "None"))
(def *curr-aircraft* (atom "None"))
(def *countries-ck* ["Sudan" "Uganda"])
(defn in-list? )
;(geo-code "Khartoum" "AFRICA")
(defn geo-code [loc area]
(let [tsc (doto (ToponymSearchCriteria. )
(.setQ (str loc "," area))
(.setMaxRows 5))
result (WebService/search tsc)]
(doseq [r (.getToponyms result)]
(let [n (.getName r)
c (.getCountryName r)
lat (.getLatitude r)
lon (.getLongitude r)
m (some #{c} *countries-ck*)]
(when m
(let [s
(struct map-point n m lat lon )] (prn s)))))))
(defn get-rf-ac [flight]
(let [rf (get flight :rf)
ac (get flight :aircraft)]
(when (> (.length rf) 0)
(do (reset! *curr-rf* rf)
(reset! *curr-aircraft* (.trim ac))
(prn *curr-rf* *curr-aircraft*)))
(let [flt (assoc flight :rf (deref *curr-rf*) :aircraft (deref *curr-aircraft*))]
(prn flt))))
(defn get-day [{from :from to :to :as flight}]
(let [match (some (set *days*) (vals flight))
from-s (geo-code from "AFRICA")
to-s (geo-code to "AFRICA")]
(when (and from (> (.length from) 0))
(when match
(reset! *curr-day* (.toUpperCase match)))
(prn from-s)
(get-rf-ac (assoc flight :day (deref *curr-day*) :to to-s :from from-s)))))
(defn format-it [r]
(let [[day rf aircraft from etd to eta] (map #(.getContents %) r)]
(let [f (struct flight day rf aircraft from etd to eta)]
(get-day f))))
;;(parse-it "src/data/01_04_2009_UNMIS_1.xls")
(defn parse-it [file]
(let [wb (Workbook/getWorkbook (File. file))]
(doseq [sheet (.getSheets wb)]
(let [num-rows (range 0 (.getRows sheet))]
(doseq [r num-rows]
(let [row (.getRow sheet r)]
(prn (format-it row))))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.