diff --git a/gpxsee.qrc b/gpxsee.qrc
index 9c52a432..cca66769 100644
--- a/gpxsee.qrc
+++ b/gpxsee.qrc
@@ -1,5 +1,6 @@
+
icons/gpxsee.png
icons/gpxsee@2x.png
icons/GUI/dialog-close.png
@@ -42,5 +43,83 @@
icons/GUI/view-filter@2x.png
icons/GUI/applications-internet_32.png
icons/GUI/applications-internet_32@2x.png
+
+
+ icons/POI/airfield-11.png
+ icons/POI/airport-11.png
+ icons/POI/amusement-park-11.png
+ icons/POI/bakery-11.png
+ icons/POI/bank-11.png
+ icons/POI/bar-11.png
+ icons/POI/bbq-11.png
+ icons/POI/beach-11.png
+ icons/POI/bowling-alley-11.png
+ icons/POI/building-alt1-11.png
+ icons/POI/bridge-11.png
+ icons/POI/bus-11.png
+ icons/POI/cafe-11.png
+ icons/POI/campsite-11.png
+ icons/POI/car-11.png
+ icons/POI/car-rental-11.png
+ icons/POI/car-repair-11.png
+ icons/POI/casino-11.png
+ icons/POI/cemetery-11.png
+ icons/POI/cinema-11.png
+ icons/POI/clothing-store-11.png
+ icons/POI/communications-tower-11.png
+ icons/POI/dam-11.png
+ icons/POI/danger-11.png
+ icons/POI/drinking-water-11.png
+ icons/POI/fast-food-11.png
+ icons/POI/fire-station-11.png
+ icons/POI/fitness-centre-11.png
+ icons/POI/fuel-11.png
+ icons/POI/furniture-11.png
+ icons/POI/garden-11.png
+ icons/POI/garden-centre-11.png
+ icons/POI/golf-11.png
+ icons/POI/grocery-11.png
+ icons/POI/hairdresser-11.png
+ icons/POI/harbor-11.png
+ icons/POI/hardware-11.png
+ icons/POI/heliport-11.png
+ icons/POI/hospital-11.png
+ icons/POI/information-11.png
+ icons/POI/landmark-11.png
+ icons/POI/library-11.png
+ icons/POI/lodging-11.png
+ icons/POI/mountain-11.png
+ icons/POI/museum-11.png
+ icons/POI/park-11.png
+ icons/POI/parking-11.png
+ icons/POI/pharmacy-11.png
+ icons/POI/picnic-site-11.png
+ icons/POI/place-of-worship-11.png
+ icons/POI/police-11.png
+ icons/POI/post-11.png
+ icons/POI/prison-11.png
+ icons/POI/religious-christian-11.png
+ icons/POI/religious-jewish-11.png
+ icons/POI/religious-muslim-11.png
+ icons/POI/restaurant-11.png
+ icons/POI/restaurant-noodle-11.png
+ icons/POI/restaurant-pizza-11.png
+ icons/POI/restaurant-seafood-11.png
+ icons/POI/roadblock-11.png
+ icons/POI/school-11.png
+ icons/POI/shelter-11.png
+ icons/POI/shop-11.png
+ icons/POI/skiing-11.png
+ icons/POI/soccer-11.png
+ icons/POI/swimming-11.png
+ icons/POI/theatre-11.png
+ icons/POI/telephone-11.png
+ icons/POI/toilet-11.png
+ icons/POI/town-hall-11.png
+ icons/POI/viewpoint-11.png
+ icons/POI/village-11.png
+ icons/POI/waterfall-11.png
+ icons/POI/wetland-11.png
+ icons/POI/zoo-11.png
diff --git a/icons/POI/airfield-11.png b/icons/POI/airfield-11.png
new file mode 100644
index 00000000..c9d4da8d
Binary files /dev/null and b/icons/POI/airfield-11.png differ
diff --git a/icons/POI/airport-11.png b/icons/POI/airport-11.png
new file mode 100644
index 00000000..69ed65f1
Binary files /dev/null and b/icons/POI/airport-11.png differ
diff --git a/icons/POI/amusement-park-11.png b/icons/POI/amusement-park-11.png
new file mode 100644
index 00000000..485fc601
Binary files /dev/null and b/icons/POI/amusement-park-11.png differ
diff --git a/icons/POI/bakery-11.png b/icons/POI/bakery-11.png
new file mode 100644
index 00000000..c9c3178b
Binary files /dev/null and b/icons/POI/bakery-11.png differ
diff --git a/icons/POI/bank-11.png b/icons/POI/bank-11.png
new file mode 100644
index 00000000..d40cd0ef
Binary files /dev/null and b/icons/POI/bank-11.png differ
diff --git a/icons/POI/bar-11.png b/icons/POI/bar-11.png
new file mode 100644
index 00000000..b28300b0
Binary files /dev/null and b/icons/POI/bar-11.png differ
diff --git a/icons/POI/bbq-11.png b/icons/POI/bbq-11.png
new file mode 100644
index 00000000..f1f24b6c
Binary files /dev/null and b/icons/POI/bbq-11.png differ
diff --git a/icons/POI/beach-11.png b/icons/POI/beach-11.png
new file mode 100644
index 00000000..0a8cc59c
Binary files /dev/null and b/icons/POI/beach-11.png differ
diff --git a/icons/POI/bowling-alley-11.png b/icons/POI/bowling-alley-11.png
new file mode 100644
index 00000000..efab183d
Binary files /dev/null and b/icons/POI/bowling-alley-11.png differ
diff --git a/icons/POI/bridge-11.png b/icons/POI/bridge-11.png
new file mode 100644
index 00000000..0f811d63
Binary files /dev/null and b/icons/POI/bridge-11.png differ
diff --git a/icons/POI/building-alt1-11.png b/icons/POI/building-alt1-11.png
new file mode 100644
index 00000000..bf64c08f
Binary files /dev/null and b/icons/POI/building-alt1-11.png differ
diff --git a/icons/POI/bus-11.png b/icons/POI/bus-11.png
new file mode 100644
index 00000000..7b024d81
Binary files /dev/null and b/icons/POI/bus-11.png differ
diff --git a/icons/POI/cafe-11.png b/icons/POI/cafe-11.png
new file mode 100644
index 00000000..53dc4937
Binary files /dev/null and b/icons/POI/cafe-11.png differ
diff --git a/icons/POI/campsite-11.png b/icons/POI/campsite-11.png
new file mode 100644
index 00000000..01ccf452
Binary files /dev/null and b/icons/POI/campsite-11.png differ
diff --git a/icons/POI/car-11.png b/icons/POI/car-11.png
new file mode 100644
index 00000000..bb318f1d
Binary files /dev/null and b/icons/POI/car-11.png differ
diff --git a/icons/POI/car-rental-11.png b/icons/POI/car-rental-11.png
new file mode 100644
index 00000000..e6f8cc3c
Binary files /dev/null and b/icons/POI/car-rental-11.png differ
diff --git a/icons/POI/car-repair-11.png b/icons/POI/car-repair-11.png
new file mode 100644
index 00000000..728edb37
Binary files /dev/null and b/icons/POI/car-repair-11.png differ
diff --git a/icons/POI/casino-11.png b/icons/POI/casino-11.png
new file mode 100644
index 00000000..aa3a1d1b
Binary files /dev/null and b/icons/POI/casino-11.png differ
diff --git a/icons/POI/cemetery-11.png b/icons/POI/cemetery-11.png
new file mode 100644
index 00000000..b8d5128b
Binary files /dev/null and b/icons/POI/cemetery-11.png differ
diff --git a/icons/POI/cinema-11.png b/icons/POI/cinema-11.png
new file mode 100644
index 00000000..ce13da28
Binary files /dev/null and b/icons/POI/cinema-11.png differ
diff --git a/icons/POI/clothing-store-11.png b/icons/POI/clothing-store-11.png
new file mode 100644
index 00000000..2e8032d1
Binary files /dev/null and b/icons/POI/clothing-store-11.png differ
diff --git a/icons/POI/communications-tower-11.png b/icons/POI/communications-tower-11.png
new file mode 100644
index 00000000..d0f24a28
Binary files /dev/null and b/icons/POI/communications-tower-11.png differ
diff --git a/icons/POI/dam-11.png b/icons/POI/dam-11.png
new file mode 100644
index 00000000..4a85c69b
Binary files /dev/null and b/icons/POI/dam-11.png differ
diff --git a/icons/POI/danger-11.png b/icons/POI/danger-11.png
new file mode 100644
index 00000000..18af2152
Binary files /dev/null and b/icons/POI/danger-11.png differ
diff --git a/icons/POI/drinking-water-11.png b/icons/POI/drinking-water-11.png
new file mode 100644
index 00000000..ff78b6a0
Binary files /dev/null and b/icons/POI/drinking-water-11.png differ
diff --git a/icons/POI/fast-food-11.png b/icons/POI/fast-food-11.png
new file mode 100644
index 00000000..9459dcf0
Binary files /dev/null and b/icons/POI/fast-food-11.png differ
diff --git a/icons/POI/fire-station-11.png b/icons/POI/fire-station-11.png
new file mode 100644
index 00000000..b52d311a
Binary files /dev/null and b/icons/POI/fire-station-11.png differ
diff --git a/icons/POI/fitness-centre-11.png b/icons/POI/fitness-centre-11.png
new file mode 100644
index 00000000..5c7f00ca
Binary files /dev/null and b/icons/POI/fitness-centre-11.png differ
diff --git a/icons/POI/fuel-11.png b/icons/POI/fuel-11.png
new file mode 100644
index 00000000..2b1aed56
Binary files /dev/null and b/icons/POI/fuel-11.png differ
diff --git a/icons/POI/furniture-11.png b/icons/POI/furniture-11.png
new file mode 100644
index 00000000..7960fa24
Binary files /dev/null and b/icons/POI/furniture-11.png differ
diff --git a/icons/POI/garden-11.png b/icons/POI/garden-11.png
new file mode 100644
index 00000000..ba931bc7
Binary files /dev/null and b/icons/POI/garden-11.png differ
diff --git a/icons/POI/garden-centre-11.png b/icons/POI/garden-centre-11.png
new file mode 100644
index 00000000..d1e061e5
Binary files /dev/null and b/icons/POI/garden-centre-11.png differ
diff --git a/icons/POI/golf-11.png b/icons/POI/golf-11.png
new file mode 100644
index 00000000..2f710a4f
Binary files /dev/null and b/icons/POI/golf-11.png differ
diff --git a/icons/POI/grocery-11.png b/icons/POI/grocery-11.png
new file mode 100644
index 00000000..49a3d912
Binary files /dev/null and b/icons/POI/grocery-11.png differ
diff --git a/icons/POI/hairdresser-11.png b/icons/POI/hairdresser-11.png
new file mode 100644
index 00000000..a647aa0f
Binary files /dev/null and b/icons/POI/hairdresser-11.png differ
diff --git a/icons/POI/harbor-11.png b/icons/POI/harbor-11.png
new file mode 100644
index 00000000..c2bce4fa
Binary files /dev/null and b/icons/POI/harbor-11.png differ
diff --git a/icons/POI/hardware-11.png b/icons/POI/hardware-11.png
new file mode 100644
index 00000000..d24b4340
Binary files /dev/null and b/icons/POI/hardware-11.png differ
diff --git a/icons/POI/heliport-11.png b/icons/POI/heliport-11.png
new file mode 100644
index 00000000..92fa1213
Binary files /dev/null and b/icons/POI/heliport-11.png differ
diff --git a/icons/POI/hospital-11.png b/icons/POI/hospital-11.png
new file mode 100644
index 00000000..e71694e3
Binary files /dev/null and b/icons/POI/hospital-11.png differ
diff --git a/icons/POI/information-11.png b/icons/POI/information-11.png
new file mode 100644
index 00000000..c171967a
Binary files /dev/null and b/icons/POI/information-11.png differ
diff --git a/icons/POI/landmark-11.png b/icons/POI/landmark-11.png
new file mode 100644
index 00000000..e409faaf
Binary files /dev/null and b/icons/POI/landmark-11.png differ
diff --git a/icons/POI/library-11.png b/icons/POI/library-11.png
new file mode 100644
index 00000000..7e1ac37b
Binary files /dev/null and b/icons/POI/library-11.png differ
diff --git a/icons/POI/licence.txt b/icons/POI/licence.txt
new file mode 100644
index 00000000..73caf1b7
--- /dev/null
+++ b/icons/POI/licence.txt
@@ -0,0 +1,126 @@
+The POI icons are Mapbox Maki icons (https://labs.mapbox.com/maki-icons/)
+licensed under CC0.
+
+-----
+
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/icons/POI/lodging-11.png b/icons/POI/lodging-11.png
new file mode 100644
index 00000000..a5603a0f
Binary files /dev/null and b/icons/POI/lodging-11.png differ
diff --git a/icons/POI/mountain-11.png b/icons/POI/mountain-11.png
new file mode 100644
index 00000000..089094f3
Binary files /dev/null and b/icons/POI/mountain-11.png differ
diff --git a/icons/POI/museum-11.png b/icons/POI/museum-11.png
new file mode 100644
index 00000000..736a3078
Binary files /dev/null and b/icons/POI/museum-11.png differ
diff --git a/icons/POI/park-11.png b/icons/POI/park-11.png
new file mode 100644
index 00000000..bd719557
Binary files /dev/null and b/icons/POI/park-11.png differ
diff --git a/icons/POI/parking-11.png b/icons/POI/parking-11.png
new file mode 100644
index 00000000..457de25c
Binary files /dev/null and b/icons/POI/parking-11.png differ
diff --git a/icons/POI/pharmacy-11.png b/icons/POI/pharmacy-11.png
new file mode 100644
index 00000000..18346a54
Binary files /dev/null and b/icons/POI/pharmacy-11.png differ
diff --git a/icons/POI/picnic-site-11.png b/icons/POI/picnic-site-11.png
new file mode 100644
index 00000000..1729899e
Binary files /dev/null and b/icons/POI/picnic-site-11.png differ
diff --git a/icons/POI/place-of-worship-11.png b/icons/POI/place-of-worship-11.png
new file mode 100644
index 00000000..cfabfebf
Binary files /dev/null and b/icons/POI/place-of-worship-11.png differ
diff --git a/icons/POI/police-11.png b/icons/POI/police-11.png
new file mode 100644
index 00000000..a39c936c
Binary files /dev/null and b/icons/POI/police-11.png differ
diff --git a/icons/POI/post-11.png b/icons/POI/post-11.png
new file mode 100644
index 00000000..5a728a01
Binary files /dev/null and b/icons/POI/post-11.png differ
diff --git a/icons/POI/prison-11.png b/icons/POI/prison-11.png
new file mode 100644
index 00000000..74601c36
Binary files /dev/null and b/icons/POI/prison-11.png differ
diff --git a/icons/POI/religious-christian-11.png b/icons/POI/religious-christian-11.png
new file mode 100644
index 00000000..8a8d21eb
Binary files /dev/null and b/icons/POI/religious-christian-11.png differ
diff --git a/icons/POI/religious-jewish-11.png b/icons/POI/religious-jewish-11.png
new file mode 100644
index 00000000..75621596
Binary files /dev/null and b/icons/POI/religious-jewish-11.png differ
diff --git a/icons/POI/religious-muslim-11.png b/icons/POI/religious-muslim-11.png
new file mode 100644
index 00000000..6c17baf8
Binary files /dev/null and b/icons/POI/religious-muslim-11.png differ
diff --git a/icons/POI/restaurant-11.png b/icons/POI/restaurant-11.png
new file mode 100644
index 00000000..e3ad0d64
Binary files /dev/null and b/icons/POI/restaurant-11.png differ
diff --git a/icons/POI/restaurant-noodle-11.png b/icons/POI/restaurant-noodle-11.png
new file mode 100644
index 00000000..42cb11f2
Binary files /dev/null and b/icons/POI/restaurant-noodle-11.png differ
diff --git a/icons/POI/restaurant-pizza-11.png b/icons/POI/restaurant-pizza-11.png
new file mode 100644
index 00000000..b1471fa3
Binary files /dev/null and b/icons/POI/restaurant-pizza-11.png differ
diff --git a/icons/POI/restaurant-seafood-11.png b/icons/POI/restaurant-seafood-11.png
new file mode 100644
index 00000000..f59d10ec
Binary files /dev/null and b/icons/POI/restaurant-seafood-11.png differ
diff --git a/icons/POI/roadblock-11.png b/icons/POI/roadblock-11.png
new file mode 100644
index 00000000..931cd005
Binary files /dev/null and b/icons/POI/roadblock-11.png differ
diff --git a/icons/POI/school-11.png b/icons/POI/school-11.png
new file mode 100644
index 00000000..757f8f15
Binary files /dev/null and b/icons/POI/school-11.png differ
diff --git a/icons/POI/shelter-11.png b/icons/POI/shelter-11.png
new file mode 100644
index 00000000..07205ee9
Binary files /dev/null and b/icons/POI/shelter-11.png differ
diff --git a/icons/POI/shop-11.png b/icons/POI/shop-11.png
new file mode 100644
index 00000000..3c1b14c8
Binary files /dev/null and b/icons/POI/shop-11.png differ
diff --git a/icons/POI/skiing-11.png b/icons/POI/skiing-11.png
new file mode 100644
index 00000000..8394a2bf
Binary files /dev/null and b/icons/POI/skiing-11.png differ
diff --git a/icons/POI/soccer-11.png b/icons/POI/soccer-11.png
new file mode 100644
index 00000000..6d0f1eec
Binary files /dev/null and b/icons/POI/soccer-11.png differ
diff --git a/icons/POI/swimming-11.png b/icons/POI/swimming-11.png
new file mode 100644
index 00000000..183af715
Binary files /dev/null and b/icons/POI/swimming-11.png differ
diff --git a/icons/POI/telephone-11.png b/icons/POI/telephone-11.png
new file mode 100644
index 00000000..292d492f
Binary files /dev/null and b/icons/POI/telephone-11.png differ
diff --git a/icons/POI/theatre-11.png b/icons/POI/theatre-11.png
new file mode 100644
index 00000000..de4a10fa
Binary files /dev/null and b/icons/POI/theatre-11.png differ
diff --git a/icons/POI/toilet-11.png b/icons/POI/toilet-11.png
new file mode 100644
index 00000000..90dd8dc9
Binary files /dev/null and b/icons/POI/toilet-11.png differ
diff --git a/icons/POI/town-hall-11.png b/icons/POI/town-hall-11.png
new file mode 100644
index 00000000..5e8207ac
Binary files /dev/null and b/icons/POI/town-hall-11.png differ
diff --git a/icons/POI/viewpoint-11.png b/icons/POI/viewpoint-11.png
new file mode 100644
index 00000000..4e0c948b
Binary files /dev/null and b/icons/POI/viewpoint-11.png differ
diff --git a/icons/POI/village-11.png b/icons/POI/village-11.png
new file mode 100644
index 00000000..ebb88fb9
Binary files /dev/null and b/icons/POI/village-11.png differ
diff --git a/icons/POI/waterfall-11.png b/icons/POI/waterfall-11.png
new file mode 100644
index 00000000..044909e0
Binary files /dev/null and b/icons/POI/waterfall-11.png differ
diff --git a/icons/POI/wetland-11.png b/icons/POI/wetland-11.png
new file mode 100644
index 00000000..06e7c3e7
Binary files /dev/null and b/icons/POI/wetland-11.png differ
diff --git a/icons/POI/zoo-11.png b/icons/POI/zoo-11.png
new file mode 100644
index 00000000..8dbda792
Binary files /dev/null and b/icons/POI/zoo-11.png differ
diff --git a/src/map/IMG/img.cpp b/src/map/IMG/img.cpp
index 045db113..9fda3e9a 100644
--- a/src/map/IMG/img.cpp
+++ b/src/map/IMG/img.cpp
@@ -255,3 +255,18 @@ bool IMG::readBlock(int blockNum, QByteArray &data)
return true;
}
+
+#ifndef QT_NO_DEBUG
+QDebug operator<<(QDebug dbg, const IMG::Point &point)
+{
+ dbg.nospace() << "Point(" << hex << point.type << ", " << point.label
+ << ", " << point.poi << ")";
+ return dbg.space();
+}
+
+QDebug operator<<(QDebug dbg, const IMG::Poly &poly)
+{
+ dbg.nospace() << "Poly(" << hex << poly.type << ", " << poly.label << ")";
+ return dbg.space();
+}
+#endif // QT_NO_DEBUG
diff --git a/src/map/IMG/img.h b/src/map/IMG/img.h
index cef4fb6c..8e0dab29 100644
--- a/src/map/IMG/img.h
+++ b/src/map/IMG/img.h
@@ -40,7 +40,7 @@ public:
quint64 id;
bool operator<(const Point &other) const
- {return id < other.id;}
+ {return id > other.id;}
};
@@ -84,4 +84,9 @@ private:
QString _errorString;
};
+#ifndef QT_NO_DEBUG
+QDebug operator<<(QDebug dbg, const IMG::Point &point);
+QDebug operator<<(QDebug dbg, const IMG::Poly &poly);
+#endif // QT_NO_DEBUG
+
#endif // IMG_H
diff --git a/src/map/IMG/rgnfile.cpp b/src/map/IMG/rgnfile.cpp
index c8dc7185..f8586f38 100644
--- a/src/map/IMG/rgnfile.cpp
+++ b/src/map/IMG/rgnfile.cpp
@@ -338,7 +338,8 @@ bool RGNFile::pointObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
point.poi = labelPtr & 0x400000;
if (lbl && (labelPtr & 0x3FFFFF)) {
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi);
- point.id = ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF);
+ point.id = ((quint64)point.type)<<40 | ((quint64)lbl->offset())<<24
+ | (labelPtr & 0x3FFFFF);
}
points->append(point);
@@ -383,7 +384,8 @@ bool RGNFile::extPointObjects(const RectC &rect, Handle &hdl,
point.poi = labelPtr & 0x400000;
if (lbl && (labelPtr & 0x3FFFFF)) {
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi);
- point.id = ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF);
+ point.id = ((quint64)point.type)<<40
+ | ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF);
}
}
diff --git a/src/map/IMG/style.cpp b/src/map/IMG/style.cpp
index d0f3560b..ecc2bd8d 100644
--- a/src/map/IMG/style.cpp
+++ b/src/map/IMG/style.cpp
@@ -147,6 +147,137 @@ void Style::defaultLineStyle()
_lines[TYPE(0x29)].setTextFontSize(Style::None);
}
+void Style::defaultPOIStyle()
+{
+ _points[0x2a00] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a01] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a02] = Point(QImage(":/restaurant-noodle-11.png"));
+ _points[0x2a03] = Point(QImage(":/bbq-11.png"));
+ _points[0x2a04] = Point(QImage(":/restaurant-noodle-11.png"));
+ _points[0x2a05] = Point(QImage(":/bakery-11.png"));
+ _points[0x2a06] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a07] = Point(QImage(":/fast-food-11.png"));
+ _points[0x2a08] = Point(QImage(":/restaurant-pizza-11.png"));
+ _points[0x2a09] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a0a] = Point(QImage(":/restaurant-pizza-11.png"));
+ _points[0x2a0b] = Point(QImage(":/restaurant-seafood-11.png"));
+ _points[0x2a0c] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a0d] = Point(QImage(":/bakery-11.png"));
+ _points[0x2a0e] = Point(QImage(":/cafe-11.png"));
+ _points[0x2a0f] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a10] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a11] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a12] = Point(QImage(":/restaurant-11.png"));
+ _points[0x2a13] = Point(QImage(":/restaurant-11.png"));
+
+ _points[0x2b01] = Point(QImage(":/lodging-11.png"));
+ _points[0x2b02] = Point(QImage(":/lodging-11.png"));
+ _points[0x2b03] = Point(QImage(":/campsite-11.png"));
+ _points[0x2b04] = Point(QImage(":/village-11.png"));
+ _points[0x2b06] = Point(QImage(":/shelter-11.png"));
+
+ _points[0x2c01] = Point(QImage(":/amusement-park-11.png"));
+ _points[0x2c02] = Point(QImage(":/museum-11.png"));
+ _points[0x2c03] = Point(QImage(":/library-11.png"));
+ _points[0x2c04] = Point(QImage(":/landmark-11.png"));
+ _points[0x2c05] = Point(QImage(":/school-11.png"));
+ _points[0x2c06] = Point(QImage(":/garden-11.png"));
+ _points[0x2c07] = Point(QImage(":/zoo-11.png"));
+ _points[0x2c08] = Point(QImage(":/soccer-11.png"));
+ _points[0x2c0a] = Point(QImage(":/bar-11.png"));
+ _points[0x2c0b] = Point(QImage(":/place-of-worship-11.png"));
+ _points[0x2c0d] = Point(QImage(":/religious-muslim-11.png"));
+ _points[0x2c0e] = Point(QImage(":/religious-christian-11.png"));
+ _points[0x2c10] = Point(QImage(":/religious-jewish-11.png"));
+ _points[0x2d01] = Point(QImage(":/theatre-11.png"));
+ _points[0x2d02] = Point(QImage(":/bar-11.png"));
+ _points[0x2d03] = Point(QImage(":/cinema-11.png"));
+ _points[0x2d04] = Point(QImage(":/casino-11.png"));
+ _points[0x2d05] = Point(QImage(":/golf-11.png"));
+ _points[0x2d06] = Point(QImage(":/skiing-11.png"));
+ _points[0x2d07] = Point(QImage(":/bowling-alley-11.png"));
+ _points[0x2d09] = Point(QImage(":/swimming-11.png"));
+ _points[0x2d0a] = Point(QImage(":/fitness-centre-11.png"));
+ _points[0x2d0b] = Point(QImage(":/airfield-11.png"));
+
+ _points[0x2e02] = Point(QImage(":/grocery-11.png"));
+ _points[0x2e05] = Point(QImage(":/pharmacy-11.png"));
+ _points[0x2e07] = Point(QImage(":/clothing-store-11.png"));
+ _points[0x2e08] = Point(QImage(":/garden-centre-11.png"));
+ _points[0x2e09] = Point(QImage(":/furniture-11.png"));
+ _points[0x2e0c] = Point(QImage(":/shop-11.png"));
+
+ _points[0x2f01] = Point(QImage(":/fuel-11.png"));
+ _points[0x2f02] = Point(QImage(":/car-rental-11.png"));
+ _points[0x2f03] = Point(QImage(":/car-repair-11.png"));
+ _points[0x2f04] = Point(QImage(":/airport-11.png"));
+ _points[0x2f05] = Point(QImage(":/post-11.png"));
+ _points[0x2f06] = Point(QImage(":/bank-11.png"));
+ _points[0x2f07] = Point(QImage(":/car-11.png"));
+ _points[0x2f08] = Point(QImage(":/bus-11.png"));
+ _points[0x2f09] = Point(QImage(":/harbor-11.png"));
+ _points[0x2f0b] = Point(QImage(":/parking-11.png"));
+ _points[0x2f0b].setTextFontSize(None);
+ _points[0x2f0c] = Point(QImage(":/toilet-11.png"));
+ _points[0x2f0c].setTextFontSize(None);
+ _points[0x2f10] = Point(QImage(":/hairdresser-11.png"));
+ _points[0x2f12].setTextFontSize(None);
+ _points[0x2f13] = Point(QImage(":/hardware-11.png"));
+ _points[0x2f17] = Point(QImage(":/bus-11.png"));
+
+ _points[0x3001] = Point(QImage(":/police-11.png"));
+ _points[0x3002] = Point(QImage(":/hospital-11.png"));
+ _points[0x3003] = Point(QImage(":/town-hall-11.png"));
+ _points[0x3007] = Point(QImage(":/prison-11.png"));
+ _points[0x3008] = Point(QImage(":/fire-station-11.png"));
+
+ _points[0x4000] = Point(QImage(":/golf-11.png"));
+ _points[0x4300] = Point(QImage(":/harbor-11.png"));
+ _points[0x4400] = Point(QImage(":/fuel-11.png"));
+ _points[0x4500] = Point(QImage(":/restaurant-11.png"));
+ _points[0x4600] = Point(QImage(":/bar-11.png"));
+ _points[0x4900] = Point(QImage(":/park-11.png"));
+ _points[0x4a00] = Point(QImage(":/picnic-site-11.png"));
+ _points[0x4c00] = Point(QImage(":/information-11.png"));
+ _points[0x4800] = Point(QImage(":/campsite-11.png"));
+ _points[0x4a00] = Point(QImage(":/picnic-site-11.png"));
+ _points[0x4b00] = Point(QImage(":/hospital-11.png"));
+ _points[0x4c00] = Point(QImage(":/information-11.png"));
+ _points[0x4d00] = Point(QImage(":/parking-11.png"));
+ _points[0x4d00].setTextFontSize(None);
+ _points[0x4e00] = Point(QImage(":/toilet-11.png"));
+ _points[0x4e00].setTextFontSize(None);
+ _points[0x5000] = Point(QImage(":/drinking-water-11.png"));
+ _points[0x5000].setTextFontSize(None);
+ _points[0x5100] = Point(QImage(":/telephone-11.png"));
+ _points[0x5200] = Point(QImage(":/viewpoint-11.png"));
+ _points[0x5300] = Point(QImage(":/skiing-11.png"));
+ _points[0x5400] = Point(QImage(":/swimming-11.png"));
+ _points[0x5500] = Point(QImage(":/dam-11.png"));
+ _points[0x5700] = Point(QImage(":/danger-11.png"));
+ _points[0x5800] = Point(QImage(":/roadblock-11.png"));
+ _points[0x5900] = Point(QImage(":/airport-11.png"));
+ _points[0x5901] = Point(QImage(":/airport-11.png"));
+ _points[0x5904] = Point(QImage(":/heliport-11.png"));
+
+ _points[0x6401] = Point(QImage(":/bridge-11.png"));
+ _points[0x6402] = Point(QImage(":/building-alt1-11.png"));
+ _points[0x6403] = Point(QImage(":/cemetery-11.png"));
+ _points[0x6404] = Point(QImage(":/religious-christian-11.png"));
+ _points[0x6407] = Point(QImage(":/dam-11.png"));
+ _points[0x6408] = Point(QImage(":/hospital-11.png"));
+ _points[0x6409] = Point(QImage(":/dam-11.png"));
+ _points[0x640d] = Point(QImage(":/communications-tower-11.png"));
+ _points[0x640e] = Point(QImage(":/park-11.png"));
+ _points[0x640f] = Point(QImage(":/post-11.png"));
+ _points[0x6411] = Point(QImage(":/communications-tower-11.png"));
+
+ _points[0x6508] = Point(QImage(":/waterfall-11.png"));
+ _points[0x6513] = Point(QImage(":/wetland-11.png"));
+ _points[0x6604] = Point(QImage(":/beach-11.png"));
+ _points[0x6616] = Point(QImage(":/mountain-11.png"));
+}
+
static bool readBitmap(SubFile *file, SubFile::Handle &hdl, QImage &img,
int bpp)
{
@@ -790,6 +921,7 @@ Style::Style(SubFile *typ)
{
defaultLineStyle();
defaultPolygonStyle();
+ defaultPOIStyle();
if (typ && typ->isValid())
parseTYPFile(typ);
@@ -830,6 +962,32 @@ bool Style::isSpot(quint32 type)
return (type == TYPE(0x62) || type == TYPE(0x63));
}
+Style::POIClass Style::poiClass(quint32 type)
+{
+ if ((type >= 0x2a00 && type < 0x2b00) || type == 0x2c0a || type == 0x2d02)
+ return Food;
+ else if (type >= 0x2b00 && type < 0x2c00)
+ return Accommodation;
+ else if (type >= 0x2c00 && type < 0x2e00)
+ return Recreation;
+ else if (type >= 0x2e00 && type < 0x2f00)
+ return Shopping;
+ else if (type >= 0x2f00 && type < 0x2f0f)
+ return Transport;
+ else if (type >= 0x2f0f && type < 0x3000)
+ return Services;
+ else if (type >= 0x3000 && type < 0x3100)
+ return Community;
+ else if (type >= 0x4000 && type < 0x6000)
+ return Elementary;
+ else if (type >= 0x6400 && type < 0x6500)
+ return ManmadePlaces;
+ else if (type >= 0x6500 && type < 0x6700)
+ return NaturePlaces;
+ else
+ return Unknown;
+}
+
#ifndef QT_NO_DEBUG
static QString penColor(const QPen &pen)
{
diff --git a/src/map/IMG/style.h b/src/map/IMG/style.h
index cf36ff23..1091416a 100644
--- a/src/map/IMG/style.h
+++ b/src/map/IMG/style.h
@@ -18,6 +18,20 @@ public:
Large = 4
};
+ enum POIClass {
+ Unknown,
+ Food,
+ Accommodation,
+ Recreation,
+ Shopping,
+ Transport,
+ Services,
+ Community,
+ Elementary,
+ ManmadePlaces,
+ NaturePlaces
+ };
+
class Polygon {
public:
Polygon() : _brush(Qt::NoBrush), _pen(Qt::NoPen) {}
@@ -91,6 +105,7 @@ public:
static bool isContourLine(quint32 type);
static bool isSpot(quint32 type);
+ static POIClass poiClass(quint32 type);
private:
struct Section {
@@ -121,6 +136,7 @@ private:
const Section §ion, ItemInfo &info);
void defaultPolygonStyle();
void defaultLineStyle();
+ void defaultPOIStyle();
QMap _lines;
QMap _polygons;
diff --git a/src/map/imgmap.cpp b/src/map/imgmap.cpp
index a16405b1..9ba184b1 100644
--- a/src/map/imgmap.cpp
+++ b/src/map/imgmap.cpp
@@ -25,8 +25,6 @@
#define POI_FONT_SIZE 9
#define LINE_TEXT_MIN_ZOOM 23
-#define POI_MIN_ZOOM 25
-#define POI_TEXT_MIN_ZOOM 26
class RasterTile
{
@@ -76,6 +74,26 @@ static void convertUnits(QString &str)
str = QString::number(qRound(number * 0.3048));
}
+static int minPOIZoom(Style::POIClass cl)
+{
+ switch (cl) {
+ case Style::Food:
+ case Style::Shopping:
+ case Style::Services:
+ return 27;
+ case Style::Accommodation:
+ case Style::Recreation:
+ return 25;
+ case Style::ManmadePlaces:
+ case Style::NaturePlaces:
+ case Style::Transport:
+ case Style::Community:
+ case Style::Elementary:
+ return 23;
+ default:
+ return 0;
+ }
+}
IMGMap::IMGMap(const QString &fileName, QObject *parent)
: Map(parent), _fileName(fileName), _img(fileName),
@@ -280,17 +298,20 @@ void IMGMap::drawPoints(QPainter *painter, QList &points)
for (int i = 0; i < points.size(); i++) {
IMG::Point &point = points[i];
const Style::Point &style = _img.style().point(point.type);
+ int mz = minPOIZoom(Style::poiClass(point.type));
- if (point.poi && _zoom < POI_MIN_ZOOM)
+ if (point.poi && _zoom < mz)
continue;
- const QString *label = ((point.poi && _zoom < POI_TEXT_MIN_ZOOM)
- || point.label.isEmpty()) ? 0 : &(point.label);
+ const QString *label = point.label.isEmpty() ? 0 : &(point.label);
const QImage *img = style.img().isNull() ? 0 : &style.img();
const QFont *font = 0;
- if (point.poi)
- font = &_poiFont;
- else {
+ if (point.poi) {
+ if (style.textFontSize() == Style::None)
+ label = 0;
+ else
+ font = &_poiFont;
+ } else {
switch (style.textFontSize()) {
case Style::None:
label = 0;