diff --git a/server/images/gimp/Radar Basemap5.xcf b/server/images/gimp/Radar Basemap5.xcf new file mode 100644 index 0000000..ce6a126 Binary files /dev/null and b/server/images/gimp/Radar Basemap5.xcf differ diff --git a/server/images/maps/radar-tiles/00-00.webp b/server/images/maps/radar-tiles/00-00.webp new file mode 100644 index 0000000..c53189e Binary files /dev/null and b/server/images/maps/radar-tiles/00-00.webp differ diff --git a/server/images/maps/radar-tiles/00-01.webp b/server/images/maps/radar-tiles/00-01.webp new file mode 100644 index 0000000..98ba870 Binary files /dev/null and b/server/images/maps/radar-tiles/00-01.webp differ diff --git a/server/images/maps/radar-tiles/00-02.webp b/server/images/maps/radar-tiles/00-02.webp new file mode 100644 index 0000000..8ebf857 Binary files /dev/null and b/server/images/maps/radar-tiles/00-02.webp differ diff --git a/server/images/maps/radar-tiles/00-03.webp b/server/images/maps/radar-tiles/00-03.webp new file mode 100644 index 0000000..ce4aed1 Binary files /dev/null and b/server/images/maps/radar-tiles/00-03.webp differ diff --git a/server/images/maps/radar-tiles/00-04.webp b/server/images/maps/radar-tiles/00-04.webp new file mode 100644 index 0000000..e4bbebd Binary files /dev/null and b/server/images/maps/radar-tiles/00-04.webp differ diff --git a/server/images/maps/radar-tiles/00-05.webp b/server/images/maps/radar-tiles/00-05.webp new file mode 100644 index 0000000..14d9dd6 Binary files /dev/null and b/server/images/maps/radar-tiles/00-05.webp differ diff --git a/server/images/maps/radar-tiles/00-06.webp b/server/images/maps/radar-tiles/00-06.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/00-06.webp differ diff --git a/server/images/maps/radar-tiles/00-07.webp b/server/images/maps/radar-tiles/00-07.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/00-07.webp differ diff --git a/server/images/maps/radar-tiles/00-08.webp b/server/images/maps/radar-tiles/00-08.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/00-08.webp differ diff --git a/server/images/maps/radar-tiles/00-09.webp b/server/images/maps/radar-tiles/00-09.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/00-09.webp differ diff --git a/server/images/maps/radar-tiles/01-00.webp b/server/images/maps/radar-tiles/01-00.webp new file mode 100644 index 0000000..a92502d Binary files /dev/null and b/server/images/maps/radar-tiles/01-00.webp differ diff --git a/server/images/maps/radar-tiles/01-01.webp b/server/images/maps/radar-tiles/01-01.webp new file mode 100644 index 0000000..7921440 Binary files /dev/null and b/server/images/maps/radar-tiles/01-01.webp differ diff --git a/server/images/maps/radar-tiles/01-02.webp b/server/images/maps/radar-tiles/01-02.webp new file mode 100644 index 0000000..a16b558 Binary files /dev/null and b/server/images/maps/radar-tiles/01-02.webp differ diff --git a/server/images/maps/radar-tiles/01-03.webp b/server/images/maps/radar-tiles/01-03.webp new file mode 100644 index 0000000..0d18891 Binary files /dev/null and b/server/images/maps/radar-tiles/01-03.webp differ diff --git a/server/images/maps/radar-tiles/01-04.webp b/server/images/maps/radar-tiles/01-04.webp new file mode 100644 index 0000000..75f0bfe Binary files /dev/null and b/server/images/maps/radar-tiles/01-04.webp differ diff --git a/server/images/maps/radar-tiles/01-05.webp b/server/images/maps/radar-tiles/01-05.webp new file mode 100644 index 0000000..fe74abd Binary files /dev/null and b/server/images/maps/radar-tiles/01-05.webp differ diff --git a/server/images/maps/radar-tiles/01-06.webp b/server/images/maps/radar-tiles/01-06.webp new file mode 100644 index 0000000..3e54d71 Binary files /dev/null and b/server/images/maps/radar-tiles/01-06.webp differ diff --git a/server/images/maps/radar-tiles/01-07.webp b/server/images/maps/radar-tiles/01-07.webp new file mode 100644 index 0000000..9c750bf Binary files /dev/null and b/server/images/maps/radar-tiles/01-07.webp differ diff --git a/server/images/maps/radar-tiles/01-08.webp b/server/images/maps/radar-tiles/01-08.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/01-08.webp differ diff --git a/server/images/maps/radar-tiles/01-09.webp b/server/images/maps/radar-tiles/01-09.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/01-09.webp differ diff --git a/server/images/maps/radar-tiles/02-00.webp b/server/images/maps/radar-tiles/02-00.webp new file mode 100644 index 0000000..9ed6912 Binary files /dev/null and b/server/images/maps/radar-tiles/02-00.webp differ diff --git a/server/images/maps/radar-tiles/02-01.webp b/server/images/maps/radar-tiles/02-01.webp new file mode 100644 index 0000000..4d96160 Binary files /dev/null and b/server/images/maps/radar-tiles/02-01.webp differ diff --git a/server/images/maps/radar-tiles/02-02.webp b/server/images/maps/radar-tiles/02-02.webp new file mode 100644 index 0000000..99bbf98 Binary files /dev/null and b/server/images/maps/radar-tiles/02-02.webp differ diff --git a/server/images/maps/radar-tiles/02-03.webp b/server/images/maps/radar-tiles/02-03.webp new file mode 100644 index 0000000..e037b7b Binary files /dev/null and b/server/images/maps/radar-tiles/02-03.webp differ diff --git a/server/images/maps/radar-tiles/02-04.webp b/server/images/maps/radar-tiles/02-04.webp new file mode 100644 index 0000000..fab439c Binary files /dev/null and b/server/images/maps/radar-tiles/02-04.webp differ diff --git a/server/images/maps/radar-tiles/02-05.webp b/server/images/maps/radar-tiles/02-05.webp new file mode 100644 index 0000000..40d6328 Binary files /dev/null and b/server/images/maps/radar-tiles/02-05.webp differ diff --git a/server/images/maps/radar-tiles/02-06.webp b/server/images/maps/radar-tiles/02-06.webp new file mode 100644 index 0000000..097509b Binary files /dev/null and b/server/images/maps/radar-tiles/02-06.webp differ diff --git a/server/images/maps/radar-tiles/02-07.webp b/server/images/maps/radar-tiles/02-07.webp new file mode 100644 index 0000000..1ea29f2 Binary files /dev/null and b/server/images/maps/radar-tiles/02-07.webp differ diff --git a/server/images/maps/radar-tiles/02-08.webp b/server/images/maps/radar-tiles/02-08.webp new file mode 100644 index 0000000..302a13a Binary files /dev/null and b/server/images/maps/radar-tiles/02-08.webp differ diff --git a/server/images/maps/radar-tiles/02-09.webp b/server/images/maps/radar-tiles/02-09.webp new file mode 100644 index 0000000..9cc1633 Binary files /dev/null and b/server/images/maps/radar-tiles/02-09.webp differ diff --git a/server/images/maps/radar-tiles/03-00.webp b/server/images/maps/radar-tiles/03-00.webp new file mode 100644 index 0000000..7956d63 Binary files /dev/null and b/server/images/maps/radar-tiles/03-00.webp differ diff --git a/server/images/maps/radar-tiles/03-01.webp b/server/images/maps/radar-tiles/03-01.webp new file mode 100644 index 0000000..efdcd53 Binary files /dev/null and b/server/images/maps/radar-tiles/03-01.webp differ diff --git a/server/images/maps/radar-tiles/03-02.webp b/server/images/maps/radar-tiles/03-02.webp new file mode 100644 index 0000000..eb14fc1 Binary files /dev/null and b/server/images/maps/radar-tiles/03-02.webp differ diff --git a/server/images/maps/radar-tiles/03-03.webp b/server/images/maps/radar-tiles/03-03.webp new file mode 100644 index 0000000..28bb7f0 Binary files /dev/null and b/server/images/maps/radar-tiles/03-03.webp differ diff --git a/server/images/maps/radar-tiles/03-04.webp b/server/images/maps/radar-tiles/03-04.webp new file mode 100644 index 0000000..17e6649 Binary files /dev/null and b/server/images/maps/radar-tiles/03-04.webp differ diff --git a/server/images/maps/radar-tiles/03-05.webp b/server/images/maps/radar-tiles/03-05.webp new file mode 100644 index 0000000..1e7540d Binary files /dev/null and b/server/images/maps/radar-tiles/03-05.webp differ diff --git a/server/images/maps/radar-tiles/03-06.webp b/server/images/maps/radar-tiles/03-06.webp new file mode 100644 index 0000000..78a3862 Binary files /dev/null and b/server/images/maps/radar-tiles/03-06.webp differ diff --git a/server/images/maps/radar-tiles/03-07.webp b/server/images/maps/radar-tiles/03-07.webp new file mode 100644 index 0000000..84755aa Binary files /dev/null and b/server/images/maps/radar-tiles/03-07.webp differ diff --git a/server/images/maps/radar-tiles/03-08.webp b/server/images/maps/radar-tiles/03-08.webp new file mode 100644 index 0000000..a38a190 Binary files /dev/null and b/server/images/maps/radar-tiles/03-08.webp differ diff --git a/server/images/maps/radar-tiles/03-09.webp b/server/images/maps/radar-tiles/03-09.webp new file mode 100644 index 0000000..945c1b1 Binary files /dev/null and b/server/images/maps/radar-tiles/03-09.webp differ diff --git a/server/images/maps/radar-tiles/04-00.webp b/server/images/maps/radar-tiles/04-00.webp new file mode 100644 index 0000000..971d444 Binary files /dev/null and b/server/images/maps/radar-tiles/04-00.webp differ diff --git a/server/images/maps/radar-tiles/04-01.webp b/server/images/maps/radar-tiles/04-01.webp new file mode 100644 index 0000000..aa87222 Binary files /dev/null and b/server/images/maps/radar-tiles/04-01.webp differ diff --git a/server/images/maps/radar-tiles/04-02.webp b/server/images/maps/radar-tiles/04-02.webp new file mode 100644 index 0000000..5fd3b99 Binary files /dev/null and b/server/images/maps/radar-tiles/04-02.webp differ diff --git a/server/images/maps/radar-tiles/04-03.webp b/server/images/maps/radar-tiles/04-03.webp new file mode 100644 index 0000000..8d64f02 Binary files /dev/null and b/server/images/maps/radar-tiles/04-03.webp differ diff --git a/server/images/maps/radar-tiles/04-04.webp b/server/images/maps/radar-tiles/04-04.webp new file mode 100644 index 0000000..1e1ef18 Binary files /dev/null and b/server/images/maps/radar-tiles/04-04.webp differ diff --git a/server/images/maps/radar-tiles/04-05.webp b/server/images/maps/radar-tiles/04-05.webp new file mode 100644 index 0000000..5ec6255 Binary files /dev/null and b/server/images/maps/radar-tiles/04-05.webp differ diff --git a/server/images/maps/radar-tiles/04-06.webp b/server/images/maps/radar-tiles/04-06.webp new file mode 100644 index 0000000..3be080b Binary files /dev/null and b/server/images/maps/radar-tiles/04-06.webp differ diff --git a/server/images/maps/radar-tiles/04-07.webp b/server/images/maps/radar-tiles/04-07.webp new file mode 100644 index 0000000..e309259 Binary files /dev/null and b/server/images/maps/radar-tiles/04-07.webp differ diff --git a/server/images/maps/radar-tiles/04-08.webp b/server/images/maps/radar-tiles/04-08.webp new file mode 100644 index 0000000..7ff678d Binary files /dev/null and b/server/images/maps/radar-tiles/04-08.webp differ diff --git a/server/images/maps/radar-tiles/04-09.webp b/server/images/maps/radar-tiles/04-09.webp new file mode 100644 index 0000000..228e2d8 Binary files /dev/null and b/server/images/maps/radar-tiles/04-09.webp differ diff --git a/server/images/maps/radar-tiles/05-00.webp b/server/images/maps/radar-tiles/05-00.webp new file mode 100644 index 0000000..cc583be Binary files /dev/null and b/server/images/maps/radar-tiles/05-00.webp differ diff --git a/server/images/maps/radar-tiles/05-01.webp b/server/images/maps/radar-tiles/05-01.webp new file mode 100644 index 0000000..01b0f90 Binary files /dev/null and b/server/images/maps/radar-tiles/05-01.webp differ diff --git a/server/images/maps/radar-tiles/05-02.webp b/server/images/maps/radar-tiles/05-02.webp new file mode 100644 index 0000000..c7030b4 Binary files /dev/null and b/server/images/maps/radar-tiles/05-02.webp differ diff --git a/server/images/maps/radar-tiles/05-03.webp b/server/images/maps/radar-tiles/05-03.webp new file mode 100644 index 0000000..655944d Binary files /dev/null and b/server/images/maps/radar-tiles/05-03.webp differ diff --git a/server/images/maps/radar-tiles/05-04.webp b/server/images/maps/radar-tiles/05-04.webp new file mode 100644 index 0000000..f9550ae Binary files /dev/null and b/server/images/maps/radar-tiles/05-04.webp differ diff --git a/server/images/maps/radar-tiles/05-05.webp b/server/images/maps/radar-tiles/05-05.webp new file mode 100644 index 0000000..d9de285 Binary files /dev/null and b/server/images/maps/radar-tiles/05-05.webp differ diff --git a/server/images/maps/radar-tiles/05-06.webp b/server/images/maps/radar-tiles/05-06.webp new file mode 100644 index 0000000..bb6e4be Binary files /dev/null and b/server/images/maps/radar-tiles/05-06.webp differ diff --git a/server/images/maps/radar-tiles/05-07.webp b/server/images/maps/radar-tiles/05-07.webp new file mode 100644 index 0000000..a0c7f5f Binary files /dev/null and b/server/images/maps/radar-tiles/05-07.webp differ diff --git a/server/images/maps/radar-tiles/05-08.webp b/server/images/maps/radar-tiles/05-08.webp new file mode 100644 index 0000000..46d4fc9 Binary files /dev/null and b/server/images/maps/radar-tiles/05-08.webp differ diff --git a/server/images/maps/radar-tiles/05-09.webp b/server/images/maps/radar-tiles/05-09.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/05-09.webp differ diff --git a/server/images/maps/radar-tiles/06-00.webp b/server/images/maps/radar-tiles/06-00.webp new file mode 100644 index 0000000..8a4f9f2 Binary files /dev/null and b/server/images/maps/radar-tiles/06-00.webp differ diff --git a/server/images/maps/radar-tiles/06-01.webp b/server/images/maps/radar-tiles/06-01.webp new file mode 100644 index 0000000..b1e87fd Binary files /dev/null and b/server/images/maps/radar-tiles/06-01.webp differ diff --git a/server/images/maps/radar-tiles/06-02.webp b/server/images/maps/radar-tiles/06-02.webp new file mode 100644 index 0000000..83ecf9f Binary files /dev/null and b/server/images/maps/radar-tiles/06-02.webp differ diff --git a/server/images/maps/radar-tiles/06-03.webp b/server/images/maps/radar-tiles/06-03.webp new file mode 100644 index 0000000..862b9b5 Binary files /dev/null and b/server/images/maps/radar-tiles/06-03.webp differ diff --git a/server/images/maps/radar-tiles/06-04.webp b/server/images/maps/radar-tiles/06-04.webp new file mode 100644 index 0000000..b263c59 Binary files /dev/null and b/server/images/maps/radar-tiles/06-04.webp differ diff --git a/server/images/maps/radar-tiles/06-05.webp b/server/images/maps/radar-tiles/06-05.webp new file mode 100644 index 0000000..98f7c5d Binary files /dev/null and b/server/images/maps/radar-tiles/06-05.webp differ diff --git a/server/images/maps/radar-tiles/06-06.webp b/server/images/maps/radar-tiles/06-06.webp new file mode 100644 index 0000000..9d4cc55 Binary files /dev/null and b/server/images/maps/radar-tiles/06-06.webp differ diff --git a/server/images/maps/radar-tiles/06-07.webp b/server/images/maps/radar-tiles/06-07.webp new file mode 100644 index 0000000..0d9651a Binary files /dev/null and b/server/images/maps/radar-tiles/06-07.webp differ diff --git a/server/images/maps/radar-tiles/06-08.webp b/server/images/maps/radar-tiles/06-08.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/06-08.webp differ diff --git a/server/images/maps/radar-tiles/06-09.webp b/server/images/maps/radar-tiles/06-09.webp new file mode 100644 index 0000000..2065e6e Binary files /dev/null and b/server/images/maps/radar-tiles/06-09.webp differ diff --git a/server/images/maps/radar-tiles/07-00.webp b/server/images/maps/radar-tiles/07-00.webp new file mode 100644 index 0000000..b7d1541 Binary files /dev/null and b/server/images/maps/radar-tiles/07-00.webp differ diff --git a/server/images/maps/radar-tiles/07-01.webp b/server/images/maps/radar-tiles/07-01.webp new file mode 100644 index 0000000..8eedb58 Binary files /dev/null and b/server/images/maps/radar-tiles/07-01.webp differ diff --git a/server/images/maps/radar-tiles/07-02.webp b/server/images/maps/radar-tiles/07-02.webp new file mode 100644 index 0000000..be90052 Binary files /dev/null and b/server/images/maps/radar-tiles/07-02.webp differ diff --git a/server/images/maps/radar-tiles/07-03.webp b/server/images/maps/radar-tiles/07-03.webp new file mode 100644 index 0000000..56d6450 Binary files /dev/null and b/server/images/maps/radar-tiles/07-03.webp differ diff --git a/server/images/maps/radar-tiles/07-04.webp b/server/images/maps/radar-tiles/07-04.webp new file mode 100644 index 0000000..f1f20f6 Binary files /dev/null and b/server/images/maps/radar-tiles/07-04.webp differ diff --git a/server/images/maps/radar-tiles/07-05.webp b/server/images/maps/radar-tiles/07-05.webp new file mode 100644 index 0000000..450dc05 Binary files /dev/null and b/server/images/maps/radar-tiles/07-05.webp differ diff --git a/server/images/maps/radar-tiles/07-06.webp b/server/images/maps/radar-tiles/07-06.webp new file mode 100644 index 0000000..67777d0 Binary files /dev/null and b/server/images/maps/radar-tiles/07-06.webp differ diff --git a/server/images/maps/radar-tiles/07-07.webp b/server/images/maps/radar-tiles/07-07.webp new file mode 100644 index 0000000..3f87d3e Binary files /dev/null and b/server/images/maps/radar-tiles/07-07.webp differ diff --git a/server/images/maps/radar-tiles/07-08.webp b/server/images/maps/radar-tiles/07-08.webp new file mode 100644 index 0000000..5f1297f Binary files /dev/null and b/server/images/maps/radar-tiles/07-08.webp differ diff --git a/server/images/maps/radar-tiles/07-09.webp b/server/images/maps/radar-tiles/07-09.webp new file mode 100644 index 0000000..b50f6ce Binary files /dev/null and b/server/images/maps/radar-tiles/07-09.webp differ diff --git a/server/images/maps/radar-tiles/08-00.webp b/server/images/maps/radar-tiles/08-00.webp new file mode 100644 index 0000000..1c115ce Binary files /dev/null and b/server/images/maps/radar-tiles/08-00.webp differ diff --git a/server/images/maps/radar-tiles/08-01.webp b/server/images/maps/radar-tiles/08-01.webp new file mode 100644 index 0000000..0b49c97 Binary files /dev/null and b/server/images/maps/radar-tiles/08-01.webp differ diff --git a/server/images/maps/radar-tiles/08-02.webp b/server/images/maps/radar-tiles/08-02.webp new file mode 100644 index 0000000..0ead675 Binary files /dev/null and b/server/images/maps/radar-tiles/08-02.webp differ diff --git a/server/images/maps/radar-tiles/08-03.webp b/server/images/maps/radar-tiles/08-03.webp new file mode 100644 index 0000000..6aaf319 Binary files /dev/null and b/server/images/maps/radar-tiles/08-03.webp differ diff --git a/server/images/maps/radar-tiles/08-04.webp b/server/images/maps/radar-tiles/08-04.webp new file mode 100644 index 0000000..4ce3e1a Binary files /dev/null and b/server/images/maps/radar-tiles/08-04.webp differ diff --git a/server/images/maps/radar-tiles/08-05.webp b/server/images/maps/radar-tiles/08-05.webp new file mode 100644 index 0000000..6adb299 Binary files /dev/null and b/server/images/maps/radar-tiles/08-05.webp differ diff --git a/server/images/maps/radar-tiles/08-06.webp b/server/images/maps/radar-tiles/08-06.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/08-06.webp differ diff --git a/server/images/maps/radar-tiles/08-07.webp b/server/images/maps/radar-tiles/08-07.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/08-07.webp differ diff --git a/server/images/maps/radar-tiles/08-08.webp b/server/images/maps/radar-tiles/08-08.webp new file mode 100644 index 0000000..65029c1 Binary files /dev/null and b/server/images/maps/radar-tiles/08-08.webp differ diff --git a/server/images/maps/radar-tiles/08-09.webp b/server/images/maps/radar-tiles/08-09.webp new file mode 100644 index 0000000..be61737 Binary files /dev/null and b/server/images/maps/radar-tiles/08-09.webp differ diff --git a/server/images/maps/radar-tiles/09-00.webp b/server/images/maps/radar-tiles/09-00.webp new file mode 100644 index 0000000..3d52bfd Binary files /dev/null and b/server/images/maps/radar-tiles/09-00.webp differ diff --git a/server/images/maps/radar-tiles/09-01.webp b/server/images/maps/radar-tiles/09-01.webp new file mode 100644 index 0000000..801748f Binary files /dev/null and b/server/images/maps/radar-tiles/09-01.webp differ diff --git a/server/images/maps/radar-tiles/09-02.webp b/server/images/maps/radar-tiles/09-02.webp new file mode 100644 index 0000000..79e6920 Binary files /dev/null and b/server/images/maps/radar-tiles/09-02.webp differ diff --git a/server/images/maps/radar-tiles/09-03.webp b/server/images/maps/radar-tiles/09-03.webp new file mode 100644 index 0000000..2ef08b3 Binary files /dev/null and b/server/images/maps/radar-tiles/09-03.webp differ diff --git a/server/images/maps/radar-tiles/09-04.webp b/server/images/maps/radar-tiles/09-04.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/09-04.webp differ diff --git a/server/images/maps/radar-tiles/09-05.webp b/server/images/maps/radar-tiles/09-05.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/09-05.webp differ diff --git a/server/images/maps/radar-tiles/09-06.webp b/server/images/maps/radar-tiles/09-06.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/09-06.webp differ diff --git a/server/images/maps/radar-tiles/09-07.webp b/server/images/maps/radar-tiles/09-07.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/09-07.webp differ diff --git a/server/images/maps/radar-tiles/09-08.webp b/server/images/maps/radar-tiles/09-08.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/09-08.webp differ diff --git a/server/images/maps/radar-tiles/09-09.webp b/server/images/maps/radar-tiles/09-09.webp new file mode 100644 index 0000000..2a37b62 Binary files /dev/null and b/server/images/maps/radar-tiles/09-09.webp differ diff --git a/server/scripts/modules/radar-utils.mjs b/server/scripts/modules/radar-utils.mjs index d2b46a7..f45bd34 100644 --- a/server/scripts/modules/radar-utils.mjs +++ b/server/scripts/modules/radar-utils.mjs @@ -77,9 +77,9 @@ const removeDopplerRadarImageNoise = (RadarContext) => { // is this pixel the old rgb? if ((R === 0 && G === 0 && B === 0) - || (R === 0 && G === 236 && B === 236) - || (R === 1 && G === 160 && B === 246) - || (R === 0 && G === 0 && B === 246)) { + || (R === 0 && G === 236 && B === 236) + || (R === 1 && G === 160 && B === 246) + || (R === 0 && G === 0 && B === 246)) { // change to your new rgb // Transparent @@ -124,14 +124,14 @@ const removeDopplerRadarImageNoise = (RadarContext) => { B = 19; A = 255; } else if ((R === 214 && G === 0 && B === 0) - || (R === 255 && G === 0 && B === 0)) { + || (R === 255 && G === 0 && B === 0)) { // Red R = 171; G = 14; B = 14; A = 255; } else if ((R === 192 && G === 0 && B === 0) - || (R === 255 && G === 0 && B === 255)) { + || (R === 255 && G === 0 && B === 255)) { // Brown R = 115; G = 31; @@ -177,9 +177,44 @@ const mergeDopplerRadarImage = (mapContext, radarContext) => { mapContext.drawImage(radarContext.canvas, 0, 0); }; +const tileSize = { x: 510, y: 320 }; +const radarFullSize = { width: 2550, height: 1600 }; +const radarFinalSize = { width: 640, height: 367 }; +const radarSourceSize = { width: 480, height: 276 }; +const scaling = { + width: radarFinalSize.width / radarSourceSize.width, + height: radarFinalSize.height / radarSourceSize.height, +}; + +// convert a pixel location to a file/tile combination +const pixelToFile = (xPixel, yPixel) => { + const xTile = Math.floor(xPixel / tileSize.x); + const yTile = Math.floor(yPixel / tileSize.y); + if (xTile < 0 || xTile > 9 || yTile < 0 || yTile > 9) return false; + return `${xTile.toFixed(0).padStart(2, '0')}-${yTile.toFixed(0).padStart(2, '0')}`; +}; + +// convert a pixel location in the overall map to a pixel location on the tile +const modTile = (xPixel, yPixel) => { + const x = Math.round(xPixel) % tileSize.x; + const y = Math.round(yPixel) % tileSize.y; + return { x, y }; +}; + +const mapSizeToFinalSize = (x, y) => ({ + x: Math.round(x * scaling.height), + y: Math.round(y * scaling.width), +}); + export { getXYFromLatitudeLongitudeDoppler, getXYFromLatitudeLongitudeMap, removeDopplerRadarImageNoise, mergeDopplerRadarImage, + pixelToFile, + modTile, + mapSizeToFinalSize, + tileSize, + radarFinalSize, + radarFullSize, }; diff --git a/server/scripts/modules/radar-worker.mjs b/server/scripts/modules/radar-worker.mjs index 75cc6e9..289477e 100644 --- a/server/scripts/modules/radar-worker.mjs +++ b/server/scripts/modules/radar-worker.mjs @@ -1,15 +1,15 @@ -import * as utils from './radar-utils.mjs'; - -const radarFullSize = { width: 2550, height: 1600 }; -const radarFinalSize = { width: 640, height: 367 }; +import { + radarFinalSize, radarFullSize, pixelToFile, modTile, tileSize, removeDopplerRadarImageNoise, mapSizeToFinalSize, +} from './radar-utils.mjs'; const fetchAsBlob = async (url) => { const response = await fetch(url); return response.blob(); }; -const baseMapImages = new Promise((resolve) => { - fetchAsBlob('/images/maps/radar.webp').then((blob) => { +const baseMapImages = (tile) => new Promise((resolve) => { + if (tile === false) resolve(false); + fetchAsBlob(`/images/maps/radar-tiles/${tile}.webp`).then((blob) => { createImageBitmap(blob).then((imageBitmap) => { // extract the black pixels to overlay on to the final image (boundaries) const canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); @@ -28,13 +28,17 @@ const baseMapImages = new Promise((resolve) => { context.putImageData(imageData, 0, 0); resolve({ - fullMap: imageBitmap, + base: imageBitmap, overlay: canvas, }); }); }); }); +const drawOnBasemap = (baseContext, drawImage, positions) => { + baseContext.drawImage(drawImage, positions.sx, positions.sy, positions.sw, positions.sh, positions.dx, positions.dy, positions.dw, positions.dh); +}; + onmessage = async (e) => { const { url, RADAR_HOST, OVERRIDES, radarSourceXY, sourceXY, offsetX, offsetY, @@ -63,9 +67,93 @@ onmessage = async (e) => { const radarContext = radarCanvas.getContext('2d'); radarContext.imageSmoothingEnabled = false; - // get the base map - const baseMaps = await baseMapImages; - baseContext.drawImage(baseMaps.fullMap, sourceXY.x, sourceXY.y, offsetX * 2, offsetY * 2, 0, 0, radarFinalSize.width, radarFinalSize.height); + // determine the basemap images needed + const baseMapTiles = [ + pixelToFile(sourceXY.x, sourceXY.y), + pixelToFile(sourceXY.x + offsetX * 2, sourceXY.y), + pixelToFile(sourceXY.x, sourceXY.y + offsetY * 2), + pixelToFile(sourceXY.x + offsetX * 2, sourceXY.y + offsetY * 2), + ]; + + // get the base maps + const baseMapsPromise = Promise.allSettled(baseMapTiles.map(baseMapImages)); + + // do some more calculations for assembling the tiles + // the tiles are arranged as follows, with the horizontal axis as x, and correlating with the second set of digits in the image file number + // T[0] T[1] + // T[2] T[3] + // tile 0 gets special treatment, it's placement is the basis for all downstream calculations + const t0Source = modTile(sourceXY.x, sourceXY.y); + const t0Width = tileSize.x - t0Source.x; + const t0Height = tileSize.y - t0Source.y; + const t0FinalSize = mapSizeToFinalSize(t0Width, t0Height); + + // these will all be used again for the overlay, calculate them once here + const mapCoordinates = []; + // t[0] + mapCoordinates.push({ + sx: t0Source.x, + sw: t0Width, + dx: 0, + dw: t0FinalSize.x, + + sy: t0Source.y, + sh: t0Height, + dy: 0, + dh: t0FinalSize.y, + }); + // t[1] + mapCoordinates.push({ + sx: 0, + sw: tileSize.x - t0Width, + dx: t0FinalSize.x, + dw: mapSizeToFinalSize(tileSize.x - t0Width, 0).x, + + sy: t0Source.y, + sh: t0Height, + dy: 0, + dh: t0FinalSize.y, + }); + // t[2] + mapCoordinates.push({ + sx: t0Source.x, + sw: t0Width, + dx: 0, + dw: t0FinalSize.x, + + sy: 0, + sh: tileSize.y - t0Height, + dy: t0FinalSize.y, + dh: mapSizeToFinalSize(0, tileSize.y - t0Height).y, + }); + // t[3] + mapCoordinates.push({ + sx: 0, + sw: tileSize.x - t0Width, + dx: t0FinalSize.x, + dw: mapSizeToFinalSize(tileSize.x - t0Width, 0).x, + + sy: 0, + sh: tileSize.y - t0Height, + dy: t0FinalSize.y, + dh: mapSizeToFinalSize(0, tileSize.y - t0Height).y, + }); + + // wait for the basemaps to arrive + const baseMaps = (await baseMapsPromise).map((map) => map.value ?? false); + + // draw each tile if needed + drawOnBasemap(baseContext, baseMaps[0].base, mapCoordinates[0]); + if (mapCoordinates[1].dx < radarFinalSize.width && baseMaps[1]) { + drawOnBasemap(baseContext, baseMaps[1].base, mapCoordinates[1]); + } + if (mapCoordinates[2].dy < radarFinalSize.height && baseMaps[2]) { + drawOnBasemap(baseContext, baseMaps[2].base, mapCoordinates[2]); + if (mapCoordinates[1].dx < radarFinalSize.width && baseMaps[3]) { + drawOnBasemap(baseContext, baseMaps[3].base, mapCoordinates[3]); + } + } + // baseContext.drawImage(baseMaps.fullMap, sourceXY.x, sourceXY.y, offsetX * 2, offsetY * 2, 0, 0, radarFinalSize.width, radarFinalSize.height); // test response const radarResponse = await radarResponsePromise; @@ -87,7 +175,7 @@ onmessage = async (e) => { croppedRadarContext.drawImage(radarCanvas, radarSource.x, radarSource.y, croppedRadarCanvas.width, croppedRadarCanvas.height, 0, 0, croppedRadarCanvas.width, croppedRadarCanvas.height); // clean the image - utils.removeDopplerRadarImageNoise(croppedRadarContext); + removeDopplerRadarImageNoise(croppedRadarContext); // stretch the radar image const stretchCanvas = new OffscreenCanvas(radarFinalSize.width, radarFinalSize.height); @@ -97,8 +185,17 @@ onmessage = async (e) => { // put the radar on the base map baseContext.drawImage(stretchCanvas, 0, 0); - // put the road/boundaries overlay on the map - baseContext.drawImage(baseMaps.overlay, sourceXY.x, sourceXY.y, offsetX * 2, offsetY * 2, 0, 0, radarFinalSize.width, radarFinalSize.height); + // put the road/boundaries overlay on the map as needed + drawOnBasemap(baseContext, baseMaps[0].overlay, mapCoordinates[0]); + if (mapCoordinates[1].dx < radarFinalSize.width && baseMaps[1]) { + drawOnBasemap(baseContext, baseMaps[1].overlay, mapCoordinates[1]); + } + if (mapCoordinates[2].dy < radarFinalSize.height && baseMaps[2]) { + drawOnBasemap(baseContext, baseMaps[2].overlay, mapCoordinates[2]); + if (mapCoordinates[1].dx < radarFinalSize.width && baseMaps[3]) { + drawOnBasemap(baseContext, baseMaps[3].overlay, mapCoordinates[3]); + } + } const processedRadar = baseCanvas.transferToImageBitmap();