mirror of
https://github.com/cjdenio/uta-trax-api.git
synced 2026-10-03 16:06:19 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
736b47f9f8 | ||
|
|
2e2fa0c597 | ||
|
|
31cd41d2a9 |
No files matched your search
+28
-23
@@ -21,12 +21,12 @@ import (
|
|||||||
var scheduleDb *sql.DB
|
var scheduleDb *sql.DB
|
||||||
|
|
||||||
var headsignMappings map[string]string = map[string]string{
|
var headsignMappings map[string]string = map[string]string{
|
||||||
"to medical": "To University Medical",
|
"to medical": "To University Medical",
|
||||||
"to airport": "To Airport",
|
"to airport": "To Airport",
|
||||||
"to draper": "To Draper",
|
"to draper": "To Draper",
|
||||||
"to salt lake": "To Salt Lake Central",
|
"to salt lake": "To Salt Lake Central",
|
||||||
"to meadowbrook": "To Meadowbrook",
|
"to meadowbrook": "To Meadowbrook",
|
||||||
"to ballpark": "To Ballpark",
|
"to ballpark": "To Ballpark",
|
||||||
}
|
}
|
||||||
|
|
||||||
func distance(lat1 float64, lng1 float64, lat2 float64, lng2 float64) float64 {
|
func distance(lat1 float64, lng1 float64, lat2 float64, lng2 float64) float64 {
|
||||||
@@ -207,23 +207,8 @@ func feedifyVehicles(vehicles []*pb.VehiclePosition, header *pb.FeedHeader, rout
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func vehicleHandler(mode string) http.HandlerFunc {
|
||||||
fmt.Println("Opening database...")
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
_db, err := sql.Open("sqlite3", "uta-gtfs.db")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduleDb = _db
|
|
||||||
|
|
||||||
http.Handle("/", http.FileServer(http.Dir("./static")))
|
|
||||||
|
|
||||||
http.HandleFunc("/schema.proto", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
http.ServeFile(w, r, "./proto/schema.proto")
|
|
||||||
})
|
|
||||||
|
|
||||||
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
vehicles, header, err := getVehicles()
|
vehicles, header, err := getVehicles()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
@@ -244,7 +229,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Header.Get("Accept") == "application/json" {
|
if mode == "json" || r.Header.Get("Accept") == "application/json" {
|
||||||
feed := feedifyVehicles(vehicles, header, routeTypeFilter)
|
feed := feedifyVehicles(vehicles, header, routeTypeFilter)
|
||||||
response, err := json.Marshal(&feed)
|
response, err := json.Marshal(&feed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -269,8 +254,28 @@ func main() {
|
|||||||
w.Header().Add("Content-Length", strconv.Itoa(len(b)))
|
w.Header().Add("Content-Length", strconv.Itoa(len(b)))
|
||||||
w.Write(b)
|
w.Write(b)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("Opening database...")
|
||||||
|
|
||||||
|
_db, err := sql.Open("sqlite3", "uta-gtfs.db")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduleDb = _db
|
||||||
|
|
||||||
|
http.Handle("/", http.FileServer(http.Dir("./static")))
|
||||||
|
|
||||||
|
http.HandleFunc("/schema.proto", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
http.ServeFile(w, r, "./proto/schema.proto")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
http.HandleFunc("/api", vehicleHandler(""))
|
||||||
|
http.HandleFunc("/api.json", vehicleHandler("json"))
|
||||||
|
|
||||||
port := "3000"
|
port := "3000"
|
||||||
if portEnv, ok := os.LookupEnv("PORT"); ok {
|
if portEnv, ok := os.LookupEnv("PORT"); ok {
|
||||||
port = portEnv
|
port = portEnv
|
||||||
|
|||||||
+33
-6
@@ -19,7 +19,7 @@
|
|||||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.leaflet-marker-icon:has(.vehicle) {
|
body:not(.skip-vehicle-animation) .leaflet-marker-icon:has(.vehicle) {
|
||||||
transition: transform 300ms linear;
|
transition: transform 300ms linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +71,28 @@
|
|||||||
background-image: linear-gradient(to bottom right, #2eb566 33%, #004a97 33%, #004a97 66%, #be2036 66%);
|
background-image: linear-gradient(to bottom right, #2eb566 33%, #004a97 33%, #004a97 66%, #be2036 66%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav {
|
||||||
|
grid-column: span 2;
|
||||||
|
background-color: #e5e7eb;
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav a {
|
||||||
|
display: block;
|
||||||
|
font-size: 30px;
|
||||||
|
padding: 0 20px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav__item--selected {
|
||||||
|
background-color: white;
|
||||||
|
border-bottom: 3px solid #93c5fd;
|
||||||
|
}
|
||||||
|
|
||||||
#banner {
|
#banner {
|
||||||
grid-column: span 2;
|
grid-column: span 2;
|
||||||
background-color: #ef4444;
|
background-color: #ef4444;
|
||||||
@@ -88,7 +110,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#map, #sidebar {
|
#map, #sidebar {
|
||||||
grid-row: 2 / 3;
|
grid-row: 3 / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sidebar label {
|
#sidebar label {
|
||||||
@@ -108,7 +130,7 @@
|
|||||||
|
|
||||||
#bottom-bar {
|
#bottom-bar {
|
||||||
display: none;
|
display: none;
|
||||||
grid-row: 3 / 4;
|
grid-row: 4 / 5;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
@@ -126,7 +148,7 @@
|
|||||||
#container {
|
#container {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: auto 300px;
|
grid-template-columns: auto 300px;
|
||||||
grid-template-rows: auto 1fr;
|
grid-template-rows: auto auto 1fr;
|
||||||
height: 100dvh;
|
height: 100dvh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +160,7 @@
|
|||||||
@media screen and (max-width: 800px) {
|
@media screen and (max-width: 800px) {
|
||||||
#container {
|
#container {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
grid-template-rows: auto 1fr auto;
|
grid-template-rows: auto auto 1fr auto;
|
||||||
}
|
}
|
||||||
#sidebar {
|
#sidebar {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -156,6 +178,11 @@
|
|||||||
There are currently no vehicles running. Either service has ended for
|
There are currently no vehicles running. Either service has ended for
|
||||||
the day, or UTA's tracker isn't working. Come back later!
|
the day, or UTA's tracker isn't working. Come back later!
|
||||||
</div>
|
</div>
|
||||||
|
<div class="nav">
|
||||||
|
<a title="UTA Vehicle Tracker" href="https://uta.clb.li" class="nav__item--selected">🚆</a>
|
||||||
|
<a title="TRAXcidents" href="https://traxcidents.clb.li">💥</a>
|
||||||
|
<a title="GreenBike Firehose" href="https://greenbike.clb.li">🚲</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="map"></div>
|
<div id="map"></div>
|
||||||
<div id="bottom-bar">
|
<div id="bottom-bar">
|
||||||
@@ -273,6 +300,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="module" src="/js/main.js?v=4"></script>
|
<script type="module" src="/js/main.js?v=5"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -36,6 +36,13 @@ L.tileLayer(
|
|||||||
}
|
}
|
||||||
).addTo(map);
|
).addTo(map);
|
||||||
|
|
||||||
|
map.on("zoomstart", () => {
|
||||||
|
document.body.classList.add("skip-vehicle-animation")
|
||||||
|
})
|
||||||
|
map.on("zoomend", () => {
|
||||||
|
document.body.classList.remove("skip-vehicle-animation")
|
||||||
|
})
|
||||||
|
|
||||||
const busLayer = L.layerGroup().addTo(map);
|
const busLayer = L.layerGroup().addTo(map);
|
||||||
const brtLayer = L.layerGroup().addTo(map);
|
const brtLayer = L.layerGroup().addTo(map);
|
||||||
const traxLayer = L.layerGroup().addTo(map);
|
const traxLayer = L.layerGroup().addTo(map);
|
||||||
|
|||||||
Reference in new issue
Block a user