Compare commits
79 Commits
13.29
...
67b91f62a0
Author | SHA1 | Date | |
---|---|---|---|
67b91f62a0 | |||
0ab6e02e6c | |||
7f20e2e307 | |||
68f1f1fc3f | |||
a4449897a7 | |||
80a8ac260d | |||
6673281e1c | |||
30157f8e4a | |||
12e3bbc988 | |||
9d5ac81f2f | |||
c0f97ddbd4 | |||
d7d193871a | |||
4b9bb04cec | |||
d3889b6dfe | |||
240ddaf39c | |||
53685253d7 | |||
38486e594b | |||
47dd212f47 | |||
a11ba0487c | |||
c014526bd9 | |||
f620bbc383 | |||
9ac10e2909 | |||
5f623975f9 | |||
bd266ea73c | |||
6774e29d3f | |||
a02f157bd8 | |||
4bad7c9b46 | |||
93402dd4cd | |||
f6dcf43c1a | |||
7452650999 | |||
863f6ac58f | |||
a57b50e07c | |||
450b8aad59 | |||
2fcee5aae0 | |||
2fefd3ec55 | |||
8a3808248a | |||
7d2bbfe12a | |||
929035eee9 | |||
cccda7395e | |||
93775a5adf | |||
f5b0c3f041 | |||
c1eca4eacf | |||
6b0a08ae91 | |||
81751a2564 | |||
4281e809be | |||
67820d7c4d | |||
2a16a1f34c | |||
a086c13648 | |||
85fd574b38 | |||
62ae50ecda | |||
b969eef432 | |||
cd44f350e1 | |||
90534c991c | |||
071b16f76d | |||
6d450023b0 | |||
890985bacd | |||
496065b549 | |||
33b9354212 | |||
cee20e2e9f | |||
e10c6547ac | |||
2c1d340a44 | |||
848bde0f80 | |||
5d3d2d7571 | |||
72ae27f724 | |||
a433ca3e1d | |||
26c99af3dc | |||
47b936dede | |||
e8c8b86b81 | |||
62651666e1 | |||
7c59998f96 | |||
d577eab66e | |||
c4de36c7e4 | |||
bf68ac8145 | |||
6169bcc67a | |||
94d62ab2b8 | |||
3658c09403 | |||
07085983ee | |||
0e1244da6d | |||
4a6deeaa16 |
@ -1,4 +1,4 @@
|
||||
version: 13.29.{build}
|
||||
version: 13.34.{build}
|
||||
|
||||
configuration:
|
||||
- Release
|
||||
@ -12,7 +12,7 @@ environment:
|
||||
- QTDIR: C:\Qt\5.15\msvc2019_64
|
||||
OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
|
||||
NSISDEF: /DOPENSSL /DANGLE
|
||||
- QTDIR: C:\Qt\6.7\msvc2019_64
|
||||
- QTDIR: C:\Qt\6.8\msvc2019_64
|
||||
OPENSSLDIR: C:\OpenSSL-v33-Win64\bin
|
||||
NSISDEF: /DQT6 /DOPENSSL
|
||||
|
||||
|
32
.github/workflows/osx.yml
vendored
@ -6,32 +6,8 @@ on:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
qt5:
|
||||
name: GPXSee Qt5 build
|
||||
runs-on: macos-12
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v4
|
||||
with:
|
||||
version: '5.15.2'
|
||||
- name: Create localization
|
||||
run: lrelease gpxsee.pro
|
||||
- name: Configure build
|
||||
run: qmake gpxsee.pro
|
||||
- name: Build project
|
||||
run: make -j3
|
||||
- name: Create DMG
|
||||
run: macdeployqt GPXSee.app -dmg -appstore-compliant
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: GPXSee-qt5.dmg
|
||||
path: GPXSee.dmg
|
||||
|
||||
qt6:
|
||||
name: GPXSee Qt6 build
|
||||
build:
|
||||
name: GPXSee
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -39,7 +15,7 @@ jobs:
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v4
|
||||
with:
|
||||
version: '6.7.2'
|
||||
version: '6.8.0'
|
||||
modules: qtpositioning qtserialport qtimageformats
|
||||
- name: Create localization
|
||||
run: lrelease gpxsee.pro
|
||||
@ -52,5 +28,5 @@ jobs:
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: GPXSee-qt6.dmg
|
||||
path: GPXSee.dmg
|
||||
name: GPXSee.dmg
|
||||
|
@ -21,9 +21,9 @@
|
||||
</rule>
|
||||
|
||||
<rule e="way" closed="yes" k="natural" v="rock|stone|bare_rock|bedrock" zoom-min="14">
|
||||
<area fill="#60000000"/>
|
||||
<area fill="#96968f"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="natural" v="glacier" zoom-min="12">
|
||||
<rule e="way" closed="yes" k="natural" v="glacier" zoom-min="10">
|
||||
<area fill="#ddf1fd"/>
|
||||
</rule>
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
<area fill="#e4efcf"/>
|
||||
</rule>
|
||||
|
||||
<rule e="way" closed="yes" k="landuse" v="construction|quarry|landfill|industrial|farm|farmyard" zoom-min="10">
|
||||
<rule e="way" closed="yes" k="landuse" v="construction|quarry|landfill|industrial|farm|farmyard|railway" zoom-min="10">
|
||||
<area fill="#d6d4ce"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="landuse" v="allotments" zoom-min="10">
|
||||
@ -82,34 +82,39 @@
|
||||
<!-- Water -->
|
||||
<rule e="way" closed="yes" k="natural" v="water">
|
||||
<area fill="#9fc4e1"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="11" zoom-max="13">
|
||||
<caption fill="#9fc4e1" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<rule e="way" k="bBoxWeight" v="~|mid|large|xlarge|xxlarge|xxxlarge" zoom-min="14" zoom-max="15">
|
||||
<caption fill="#ffffff" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#9fc4e1" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="way" k="*" v="*" zoom-min="14" zoom-max="19">
|
||||
<caption fill="#9fc4e1" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<rule e="way" k="bBoxWeight" v="~|xsmall|small|mid|large|xlarge|xxlarge|xxxlarge" zoom-min="16" zoom-max="16">
|
||||
<caption fill="#ffffff" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#9fc4e1" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="way" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#ffffff" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#9fc4e1" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="natural" v="marsh|wetland|mud" zoom-min="13">
|
||||
<rule e="way" closed="yes" k="natural" v="marsh|wetland|mud" zoom-min="12">
|
||||
<area src=":/patterns/wetland.svg" symbol-height="4"/>
|
||||
</rule>
|
||||
|
||||
<rule e="way" k="waterway" v="river" zoom-min="8">
|
||||
<line stroke="#9fc4e1" stroke-width="1.2"/>
|
||||
<pathText fill="#9fc4e1" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="12">
|
||||
<rule e="way" k="*" v="*" zoom-min="10" zoom-max="13">
|
||||
<pathText fill="#ffffff" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#9fc4e1" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="way" k="*" v="*" zoom-min="14">
|
||||
<lineSymbol src=":/symbols/flow.svg" symbol-width="16" symbol-height="8"/>
|
||||
<pathText fill="#ffffff" font-size="14" font-family="serif" font-style="italic" k="name" stroke="#9fc4e1" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="waterway" v="stream|drain|ditch">
|
||||
<rule e="way" k="waterway" v="stream|drain|ditch" zoom-min="10">
|
||||
<rule e="way" k="intermittent" v="~|no">
|
||||
<rule e="way" k="*" v="*" zoom-min="10" zoom-max="13">
|
||||
<rule e="way" k="*" v="*" zoom-max="13">
|
||||
<line stroke="#9fc4e1" stroke-width="1"/>
|
||||
<pathText fill="#9fc4e1" font-size="11" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
</rule>
|
||||
<rule e="way" k="*" v="*" zoom-min="14">
|
||||
<line stroke="#9fc4e1" stroke-width="0.6"/>
|
||||
<pathText fill="#9fc4e1" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<rule e="way" k="name" v="*">
|
||||
<pathText fill="#ffffff" font-size="12" font-family="serif" font-style="italic" k="name" stroke="#9fc4e1" stroke-width="2"/>
|
||||
<rule e="way" k="name" v="*" zoom-min="16">
|
||||
<lineSymbol src=":/symbols/flow.svg" symbol-width="16" symbol-height="8"/>
|
||||
</rule>
|
||||
</rule>
|
||||
@ -127,9 +132,12 @@
|
||||
<rule e="way" closed="yes" k="waterway" v="dam" zoom-min="10">
|
||||
<area fill="#bbbbbb"/>
|
||||
</rule>
|
||||
<rule e="way" k="waterway" v="lock_gate" zoom-min="10">
|
||||
<line stroke="#000000" stroke-width="0.1"/>
|
||||
</rule>
|
||||
<rule e="way" k="waterway" v="weir" zoom-min="10">
|
||||
<lineSymbol src=":/symbols/cliff.svg" repeat="true" display="always" repeat-gap="0" repeat-start="0" symbol-width="4" symbol-height="5"/>
|
||||
<pathText fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<pathText fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="way" k="man_made" v="pier" zoom-min="10">
|
||||
<line stroke="#ededed" stroke-width="0.5" stroke-linecap="butt"/>
|
||||
@ -154,44 +162,53 @@
|
||||
<rule e="way" closed="yes" k="landuse" v="cemetery">
|
||||
<area src=":/patterns/cemetery.svg" symbol-width="6" symbol-height="7"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="15">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="amenity" v="grave_yard">
|
||||
<area src=":/patterns/cemetery.svg" symbol-width="30" symbol-height="28"/>
|
||||
<area src=":/patterns/cemetery.svg" symbol-width="6" symbol-height="7"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="bridge" v="yes|true|viaduct|aqueduct|suspension|culvert|swing" zoom-min="10">
|
||||
<area fill="#ffffff"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="amenity" v="parking" zoom-min="10">
|
||||
<area fill="#ffffff" stroke="#d5cdc0" stroke-width="0.1"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="16">
|
||||
<rule e="way" k="parking" v="~|surface|street_side|lane" zoom-min="17">
|
||||
<symbol id="parking" src=":/POI/parking-11.svg" symbol-width="11"/>
|
||||
</rule>
|
||||
<rule e="way" k="parking" v="underground|multi-storey" zoom-min="17">
|
||||
<symbol id="garage" src=":/POI/parking-garage-11.svg" symbol-width="11"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="highway" v="pedestrian" zoom-min="10">
|
||||
<area fill="#ffffff"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="leisure" v="pitch|playground|track" zoom-min="10">
|
||||
<rule e="way" closed="yes" k="leisure" v="pitch|playground|track|ls_track" zoom-min="10">
|
||||
<area fill="#e3edc6" stroke="#c9d3a5" stroke-width="1" scale="none"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="leisure" v="swimming_pool" zoom-min="10">
|
||||
<rule e="way" closed="no" k="leisure" v="track|ls_track" zoom-min="10">
|
||||
<line stroke="#c9d3a5" stroke-width="0.3"/>
|
||||
<line stroke="#e3edc6" stroke-width="0.2"/>
|
||||
</rule>
|
||||
<rule e="way" closed="yes" k="leisure" v="swimming_pool" zoom-min="12">
|
||||
<area fill="#9fc4e1" stroke="#4398d9" stroke-width="1" scale="none"/>
|
||||
</rule>
|
||||
<rule e="way" k="leisure" v="track" zoom-min="10">
|
||||
<line stroke="#e3edc6" stroke-width="1"/>
|
||||
<rule e="way" closed="yes" k="amenity" v="fountain" zoom-min="12">
|
||||
<area fill="#9fc4e1"/>
|
||||
</rule>
|
||||
|
||||
<!-- Area overlays -->
|
||||
<rule e="way" k="landuse" v="military" zoom-min="10">
|
||||
<area src=":/patterns/military-area.svg" symbol-height="4"/>
|
||||
<caption fill="#ff4040" font-size="10" font-style="italic" text-transform="uppercase" k="name" stroke="#ffffff" stroke-width="1"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#ff4040" font-size="10" font-style="italic" text-transform="uppercase" k="name" stroke="#ffffff" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="boundary" v="protected_area|national_park" zoom-min="10" zoom-max="14">
|
||||
<rule e="way" k="protect_class" v="pr_2">
|
||||
<area src=":/patterns/nature-reserve.svg" symbol-height="4"/>
|
||||
<rule e="way" k="*" v="*" zoom-max="12">
|
||||
<caption fill="#9ac269" font-size="10" font-style="italic" text-transform="uppercase" k="name" stroke="#ffffff" stroke-width="1"/>
|
||||
<rule e="way" k="*" v="*" zoom-max="11">
|
||||
<caption fill="#9ac269" font-size="10" font-style="italic" text-transform="uppercase" k="name" stroke="#ffffff" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
@ -203,13 +220,13 @@
|
||||
<rule e="way" k="building" v="civic">
|
||||
<area fill="#cfc4b3" stroke="#cdccc4" stroke-width="0.1"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" priority="-10"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" priority="-10"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="building" v="cathedral|church|basilica">
|
||||
<area fill="#a19d96" stroke="#cdccc4" stroke-width="0.1"/>
|
||||
<rule e="way" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
@ -346,7 +363,7 @@
|
||||
<line stroke="#ffffff" stroke-width="0.4"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="highway" v="tertiary|tertiary_link|residential|living_street">
|
||||
<rule e="way" k="highway" v="tertiary|tertiary_link|residential|living_street|raceway">
|
||||
<rule e="way" k="*" v="*" zoom-min="13" zoom-max="13">
|
||||
<line stroke="#d5cdc0" stroke-width="1.5"/>
|
||||
<line stroke="#ffffff" stroke-width="0.75"/>
|
||||
@ -356,7 +373,7 @@
|
||||
<line stroke="#ffffff" stroke-width="0.75"/>
|
||||
</rule>
|
||||
<rule e="way" k="*" v="*" zoom-min="15">
|
||||
<pathText fill="#000000" font-size="10" k="name" priority="-7" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<pathText fill="#000000" font-size="10" k="name" priority="-7" stroke="#FFFFFF" stroke-width="2"/>
|
||||
<rule e="way" k="oneway" v="yes|true|1" zoom-min="16">
|
||||
<lineSymbol priority="-50" src=":/symbols/oneway.svg" symbol-width="16" symbol-height="8"/>
|
||||
</rule>
|
||||
@ -384,7 +401,7 @@
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="*" v="*" zoom-min="14">
|
||||
<pathText fill="#000000" font-size="10" k="name" priority="-5" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<pathText fill="#000000" font-size="10" k="name" priority="-5" stroke="#FFFFFF" stroke-width="2"/>
|
||||
<rule e="way" k="oneway" v="yes|true|1" zoom-min="16">
|
||||
<lineSymbol priority="-50" src=":/symbols/arrow.svg" symbol-width="16" symbol-height="8"/>
|
||||
</rule>
|
||||
@ -436,16 +453,16 @@
|
||||
</rule>
|
||||
|
||||
<rule e="way" k="highway" v="motorway" zoom-min="14">
|
||||
<pathText fill="#FFFFFF" font-size="10" k="ref" stroke="#dd3e3e" stroke-width="1" text-orientation="auto_down"/>
|
||||
<pathText fill="#FFFFFF" font-size="10" k="ref" stroke="#dd3e3e" stroke-width="2" text-orientation="auto_down"/>
|
||||
</rule>
|
||||
<rule e="node" k="highway" v="motorway_junction" zoom-min="16">
|
||||
<symbol id="exit" src=":/symbols/exit.svg" symbol-width="15" symbol-height="11" priority="100"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="exit"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="exit"/>
|
||||
</rule>
|
||||
|
||||
<!-- Railways -->
|
||||
<rule e="way" k="tunnel" v="~|false|no">
|
||||
<rule e="way" k="railway" v="rail">
|
||||
<rule e="way" k="railway" v="rail|preserved|disused">
|
||||
<rule e="way" k="*" v="*" zoom-min="10" zoom-max="12">
|
||||
<line stroke="#717171" stroke-width="1" stroke-linecap="butt"/>
|
||||
</rule>
|
||||
@ -462,12 +479,15 @@
|
||||
<line stroke="#ffffff" stroke-width="0.4608" stroke-dasharray="2,2" stroke-linecap="butt" scale="all"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="railway" v="narrow_gauge|light_rail|funicular" zoom-min="14">
|
||||
<line stroke="#414141" stroke-width="0.2" stroke-linecap="butt"/>
|
||||
</rule>
|
||||
<rule e="way" k="railway" v="tram" zoom-min="15">
|
||||
<line stroke="#717171" stroke-width="0.2" stroke-linecap="butt"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="tunnel" v="yes|true">
|
||||
<rule e="way" k="railway" v="rail">
|
||||
<rule e="way" k="railway" v="rail|preserved|disused">
|
||||
<rule e="way" k="*" v="*" zoom-min="10" zoom-max="12">
|
||||
<line stroke="#717171" stroke-width="1" stroke-linecap="butt" stroke-dasharray="10,8"/>
|
||||
</rule>
|
||||
@ -481,6 +501,9 @@
|
||||
<line stroke="#878787" stroke-width="0.4144" stroke-linecap="butt" stroke-dasharray="2,1" scale="all"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="way" k="railway" v="narrow_gauge|light_rail|funicular" zoom-min="14">
|
||||
<line stroke="#414141" stroke-width="0.2" stroke-linecap="butt" stroke-dasharray="12,4"/>
|
||||
</rule>
|
||||
<rule e="way" k="railway" v="tram" zoom-min="15">
|
||||
<line stroke="#717171" stroke-width="0.2" stroke-linecap="butt" stroke-dasharray="12,4"/>
|
||||
</rule>
|
||||
@ -507,7 +530,7 @@
|
||||
<rule e="way" closed="no" k="aerialway" v="*">
|
||||
<line stroke="#202020" stroke-linecap="butt" stroke-width="0.3"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="15">
|
||||
<pathText fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<pathText fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
@ -523,63 +546,123 @@
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<!-- Town & vilage names -->
|
||||
<rule e="node" k="place" v="locality" zoom-min="14">
|
||||
<caption fill="#000000" font-size="10" k="name" priority="10" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<!-- Town & village names -->
|
||||
<rule e="node" k="place" v="locality|isolated_dwelling|farm" zoom-min="14">
|
||||
<caption fill="#000000" font-size="10" k="name" priority="10" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="hamlet" zoom-min="12">
|
||||
<caption fill="#000000" font-size="12" k="name" priority="20" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<caption fill="#000000" font-size="14" k="name" priority="20" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="village" zoom-min="11">
|
||||
<caption fill="#000000" font-size="12" k="name" priority="20" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<caption fill="#000000" font-size="14" k="name" priority="20" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="town" zoom-min="9">
|
||||
<caption fill="#000000" font-size="14" k="name" priority="30" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<rule e="node" k="place" v="town" zoom-min="9" zoom-max="14">
|
||||
<rule e="node" k="*" v="*" zoom-max="10">
|
||||
<caption fill="#000000" font-size="14" k="name" priority="30" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="node" k="*" v="*" zoom-min="11">
|
||||
<caption fill="#000000" font-size="16" k="name" font-style="bold" priority="30" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="city">
|
||||
<rule e="node" k="capital" v="yes|1|2">
|
||||
<caption fill="#000000" font-size="16" font-style="bold" k="name" priority="40" stroke="#FFFFFF" stroke-width="1" text-transform="uppercase"/>
|
||||
<rule e="node" k="*" v="*" zoom-max="10">
|
||||
<rule e="node" k="capital" v="2">
|
||||
<caption fill="#000000" font-size="18" font-style="bold" k="name" priority="40" stroke="#FFFFFF" stroke-width="2" text-transform="uppercase"/>
|
||||
</rule>
|
||||
<rule e="node" k="capital" v="4|~">
|
||||
<caption fill="#000000" font-size="18" font-style="bold" k="name" priority="35" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="capital" v="no|~">
|
||||
<caption fill="#000000" font-size="16" font-style="bold" k="name" priority="35" stroke="#FFFFFF" stroke-width="1"/>
|
||||
<rule e="node" k="*" v="*" zoom-min="11" zoom-max="14">
|
||||
<rule e="node" k="capital" v="2">
|
||||
<caption fill="#000000" font-size="22" font-style="bold" k="name" priority="40" stroke="#FFFFFF" stroke-width="2" text-transform="uppercase"/>
|
||||
</rule>
|
||||
<rule e="node" k="capital" v="4|~">
|
||||
<caption fill="#000000" font-size="22" font-style="bold" k="name" priority="35" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="suburb">
|
||||
<rule e="node" k="*" v="*" zoom-min="12" zoom-max="13">
|
||||
<caption fill="#000000" font-size="14" k="name" priority="25" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="node" k="*" v="*" zoom-min="14" zoom-max="17">
|
||||
<caption fill="#000000" font-size="16" k="name" priority="25" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="quarter" zoom-min="14" zoom-max="17">
|
||||
<caption fill="#000000" font-size="14" k="name" priority="20" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
<rule e="node" k="place" v="neighbourhood" zoom-min="15" zoom-max="17">
|
||||
<caption fill="#000000" font-size="12" k="name" priority="15" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
|
||||
<!-- Nature POIs -->
|
||||
<rule e="node" k="natural" v="peak" zoom-min="13">
|
||||
<rule e="node" k="ele" v="*">
|
||||
<rule e="node" k="name" v="*">
|
||||
<symbol id="peak" src=":/POI/triangle-11.svg" symbol-width="11" priority="10"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="peak"/>
|
||||
<rule e="node" k="*" v="*" zoom-min="14">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="ele" stroke="#FFFFFF" stroke-width="2" symbol-id="peak" priority="-1"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="ele" v="~" zoom-min="15">
|
||||
<rule e="node" k="name" v="*">
|
||||
<symbol id="peak-minor" src=":/POI/triangle-stroked-11.svg" symbol-width="11" priority="5"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="peak-minor"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="natural" v="saddle" zoom-min="13">
|
||||
<rule e="node" k="name" v="*">
|
||||
<symbol id="peak" src=":/POI/mountain-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" priority="10" stroke="#FFFFFF" stroke-width="1" symbol-id="peak"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="ele" priority="9" stroke="#FFFFFF" stroke-width="1" symbol-id="peak"/>
|
||||
<symbol id="saddle" src=":/symbols/saddle.svg" symbol-width="9" symbol-height="11" priority="9"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="saddle"/>
|
||||
<rule e="node" k="*" v="*" zoom-min="14">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="ele" stroke="#FFFFFF" stroke-width="2" symbol-id="saddle" priority="-1"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="natural" v="volcano" zoom-min="13">
|
||||
<symbol id="volcano" src=":/POI/volcano-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" priority="10" stroke="#FFFFFF" stroke-width="1" symbol-id="volcano"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="ele" priority="9" stroke="#FFFFFF" stroke-width="1" symbol-id="volcano"/>
|
||||
<rule e="node" k="name" v="*">
|
||||
<symbol id="volcano" src=":/POI/volcano-11.svg" symbol-width="11" priority="10"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="volcano"/>
|
||||
<rule e="node" k="*" v="*" zoom-min="14">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="ele" stroke="#FFFFFF" stroke-width="2" symbol-id="volcano" priority="-1"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="waterway" v="waterfall" zoom-min="15">
|
||||
<symbol id="waterfall" src=":/POI/waterfall-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" priority="10" stroke="#FFFFFF" stroke-width="1" symbol-id="waterfall"/>
|
||||
<rule e="any" k="name" v="*">
|
||||
<symbol id="waterfall" src=":/POI/waterfall-11.svg" symbol-width="11" priority="8"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="waterfall"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="natural" v="spring" zoom-min="15">
|
||||
<rule e="any" k="name" v="*">
|
||||
<symbol id="spring" src=":/POI/water-11.svg" symbol-width="11"/>
|
||||
<symbol id="spring" src=":/POI/water-11.svg" symbol-width="11" priority="7"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" priority="10" stroke="#FFFFFF" stroke-width="1" symbol-id="spring"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="spring"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="natural" v="hot_spring|geyser" zoom-min="15">
|
||||
<rule e="any" k="name" v="*">
|
||||
<symbol id="hot-spring" src=":/POI/hot-spring.svg" symbol-width="11" priority="7"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="hot-spring"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="tourism" v="viewpoint" zoom-min="15">
|
||||
<rule e="node" k="name" v="*">
|
||||
<symbol id="viewpoint" src=":/POI/viewpoint-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="viewpoint"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-family="serif" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="viewpoint"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
@ -588,156 +671,192 @@
|
||||
<rule e="any" k="name" v="*">
|
||||
<symbol id="hospital" src=":/POI/hospital-11.svg" symbol-width="11" priority="20"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="hospital"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="hospital"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="doctors" zoom-min="16">
|
||||
<symbol id="doctor" src=":/POI/doctor-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="doctor"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="doctor"/>
|
||||
</rule>
|
||||
<rule e="any" k="amenity|building" v="police" zoom-min="15">
|
||||
<symbol id="police" src=":/POI/police-11.svg" symbol-width="11" priority="19"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="police"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="police"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity|building" v="fire_station" zoom-min="15">
|
||||
<symbol id="fire-station" src=":/POI/fire-station-11.svg" symbol-width="11" priority="18"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="fire-station"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="fire-station"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="barrier" v="border_control|checkpoint" zoom-min="15">
|
||||
<symbol id="checkpoint" src=":/POI/entrance-alt1-11.svg" symbol-width="11" priority="20"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="checkpoint"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="checkpoint"/>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="aeroway" v="helipad" zoom-min="14">
|
||||
<symbol id="heliport" src=":/POI/heliport-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="heliport"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="heliport"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="aeroway" v="aerodrome" zoom-min="12">
|
||||
<symbol id="airport" src=":/POI/airport-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="airport"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="airport"/>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="railway" v="station|halt">
|
||||
<rule e="any" k="station" v="~" zoom-min="14">
|
||||
<symbol id="train-station" src=":/POI/rail-11.svg" symbol-width="13" priority="20"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="train-station"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="train-station"/>
|
||||
</rule>
|
||||
<rule e="any" k="station" v="subway" zoom-min="15">
|
||||
<symbol id="metro-station" src=":/POI/rail-metro-11.svg" symbol-width="11" priority="20"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="metro-station"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="metro-station"/>
|
||||
</rule>
|
||||
<rule e="any" k="station" v="light_rail" zoom-min="15">
|
||||
<symbol id="light-rail-station" src=":/POI/rail-light-11.svg" symbol-width="11" priority="20"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="light-rail-station"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="light-rail-station"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="node" k="railway" v="tram_stop" zoom-min="16">
|
||||
<symbol id="tram-stop" src=":/POI/rail-light-11.svg" symbol-width="11" priority="10"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="tram-stop"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="tram-stop"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="amenity" v="bus_station" zoom-min="16">
|
||||
<symbol id="bus-station" src=":/POI/bus-11.svg" symbol-width="11" priority="10"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="bus-station"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bus-station"/>
|
||||
</rule>
|
||||
<rule e="any" k="highway" v="bus_stop" zoom-min="16">
|
||||
<symbol id="bus-stop" src=":/POI/bus-11.svg" symbol-width="11" priority="5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="bus-stop"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bus-stop"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="amenity" v="ferry_terminal" zoom-min="16">
|
||||
<symbol id="ferry" src=":/POI/ferry-11.svg" symbol-width="11" priority="10"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="ferry"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="ferry"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="amenity" v="fuel" zoom-min="15">
|
||||
<symbol id="fuel" src=":/POI/fuel-11.svg" symbol-width="11" priority="15"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="fuel"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="fuel"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="amenity" v="shelter" zoom-min="16">
|
||||
<symbol id="shelter" src=":/POI/shelter-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="shelter"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="shelter"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tourism|building" v="alpine_hut|hotel|hostel|guest_house|chalet|motel" zoom-min="16">
|
||||
<rule e="any" k="tourism|building" v="alpine_hut" zoom-min="15">
|
||||
<symbol id="alpine_hut" src=":/POI/home-11.svg" symbol-width="11" priority="5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="16">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="alpine_hut"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tourism|building" v="hotel|hostel|guest_house|chalet|motel" zoom-min="17">
|
||||
<symbol id="lodging" src=":/POI/lodging-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="lodging"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="lodging"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tourism|accommodation" v="camp_site|caravan_site" zoom-min="16">
|
||||
<symbol id="camp" src=":/POI/campsite-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="camp"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="camp"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="man_made" v="lighthouse" zoom-min="16">
|
||||
<rule e="any" k="man_made" v="lighthouse" zoom-min="15">
|
||||
<symbol id="lighthouse" src=":/POI/lighthouse-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="lighthouse"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="lighthouse"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tower" v="communication" zoom-min="16">
|
||||
<symbol id="com-tower" src=":/POI/communications-tower-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="com-tower"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="com-tower"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tower" v="observation" zoom-min="16">
|
||||
<symbol id="obs-tower" src=":/POI/observation-tower.svg" symbol-width="11" priority="5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="obs-tower"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="power" v="generator" zoom-min="16">
|
||||
<rule e="any" k="generator:source" v="wind">
|
||||
<symbol id="wind-turbine" src=":/POI/cross-11.svg" symbol-width="11" priority="5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="wind-turbine"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="man_made" v="watermill" zoom-min="16">
|
||||
<symbol id="watermill" src=":/POI/watermill-11.svg" symbol-width="11" priority="5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="watermill"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="man_made|tower" v="windmill" zoom-min="16">
|
||||
<symbol id="windmill" src=":/POI/windmill-11.svg" symbol-width="11" priority="5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="windmill"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="amenity" v="theatre" zoom-min="16">
|
||||
<symbol id="theatre" src=":/POI/theatre-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="theatre"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="theatre"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="cinema" zoom-min="16">
|
||||
<symbol id="cinema" src=":/POI/cinema-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="cinema"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="cinema"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tourism" v="museum" zoom-min="16">
|
||||
<symbol id="museum" src=":/POI/museum-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="museum"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="museum"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity|building" v="library" zoom-min="16">
|
||||
<symbol id="library" src=":/POI/library-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="library"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="library"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="post_office" zoom-min="16">
|
||||
<symbol id="post" src=":/POI/post-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="post"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="post"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="historic" v="memorial" zoom-min="17">
|
||||
<rule e="any" k="historic" v="memorial|monument" zoom-min="17">
|
||||
<symbol id="memorial" src=":/POI/monument-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="memorial"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="memorial"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="bank" zoom-min="16">
|
||||
<rule e="any" k="amenity" v="bank" zoom-min="17">
|
||||
<symbol id="bank" src=":/POI/bank-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="bank"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bank"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="toilets" zoom-min="16">
|
||||
@ -746,139 +865,266 @@
|
||||
<rule e="any" k="information" v="visitor_centre|office" zoom-min="16">
|
||||
<symbol id="information" src=":/POI/information-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="information"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="information"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="historic" v="castle" zoom-min="16">
|
||||
<symbol id="castle" src=":/POI/castle-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="castle"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="castle"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="townhall" zoom-min="16">
|
||||
<symbol id="townhall" src=":/POI/town-hall-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="townhall"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="townhall"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="school|university" zoom-min="16">
|
||||
<rule e="any" k="amenity" v="university|college" zoom-min="16">
|
||||
<symbol id="university" src=":/POI/college-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="university"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="school" zoom-min="16">
|
||||
<symbol id="school" src=":/POI/school-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="school"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="school"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity|building" v="embassy" zoom-min="16">
|
||||
<symbol id="embassy" src=":/POI/embassy-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="embassy"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="leisure" v="stadium" zoom-min="16">
|
||||
<symbol id="stadium" src=":/POI/stadium-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="stadium"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="tourism" v="zoo" zoom-min="16">
|
||||
<symbol id="zoo" src=":/POI/zoo-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="zoo"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="leisure" v="park" zoom-min="16">
|
||||
<rule e="any" k="name" v="*">
|
||||
<symbol id="park" src=":/POI/park-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="park"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="leisure" v="garden" zoom-min="16">
|
||||
<rule e="any" k="name" v="*">
|
||||
<symbol id="garden" src=":/POI/garden-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="garden"/>
|
||||
</rule>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="sport" v="swimming" zoom-min="16">
|
||||
<symbol id="swimming" src=":/POI/swimming-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="swimming"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="swimming"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="golf" zoom-min="16">
|
||||
<rule e="any" k="sport|leisure" v="golf|golf_course" zoom-min="17">
|
||||
<symbol id="golf" src=":/POI/golf-11.svg" symbol-width="11"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="golf"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="golf"/>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="soccer" zoom-min="16">
|
||||
<rule e="any" k="sport" v="soccer" zoom-min="17">
|
||||
<symbol id="soccer" src=":/POI/soccer-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="soccer"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="soccer"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="tennis" zoom-min="16">
|
||||
<rule e="any" k="sport" v="tennis" zoom-min="17">
|
||||
<symbol id="tennis" src=":/POI/tennis-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="tennis"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="tennis"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="skateboard" zoom-min="16">
|
||||
<rule e="any" k="sport" v="skateboard" zoom-min="17">
|
||||
<symbol id="skateboard" src=":/POI/skateboard-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="skateboard"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="skateboard"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="baseball" zoom-min="17">
|
||||
<symbol id="baseball" src=":/POI/baseball-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="baseball"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="basketball" zoom-min="17">
|
||||
<symbol id="basketball" src=":/POI/basketball-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="basketball"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="volleyball" zoom-min="17">
|
||||
<symbol id="volleyball" src=":/POI/volleyball-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="volleyball"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="equestrian" zoom-min="17">
|
||||
<symbol id="equestrian" src=":/POI/horse-riding-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="equestrian"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="sport" v="cricket" zoom-min="17">
|
||||
<symbol id="cricket" src=":/POI/cricket-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="cricket"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="amenity" v="restaurant" zoom-min="16">
|
||||
<rule e="any" k="amenity" v="restaurant" zoom-min="17">
|
||||
<symbol id="restaurant" src=":/POI/restaurant-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="restaurant"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="restaurant"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="fast_food" zoom-min="16">
|
||||
<rule e="any" k="amenity" v="fast_food" zoom-min="17">
|
||||
<symbol id="fast-food" src=":/POI/fast-food-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="fast-food"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="fast-food"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="cafe" zoom-min="16">
|
||||
<rule e="any" k="amenity" v="cafe" zoom-min="17">
|
||||
<symbol id="cafe" src=":/POI/cafe-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="cafe"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="cafe"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="bar" zoom-min="17">
|
||||
<symbol id="bar" src=":/POI/bar-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="bar"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bar"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="pub" zoom-min="16">
|
||||
<rule e="any" k="amenity" v="pub|biergarten" zoom-min="17">
|
||||
<symbol id="pub" src=":/POI/beer-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="pub"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="pub"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="ice_cream" zoom-min="17">
|
||||
<symbol id="ice-cream" src=":/POI/ice-cream-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="ice-cream"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="shop" v="car|car_repair|car_parts" zoom-min="16">
|
||||
<symbol id="car-repair" src=":/POI/car-repair-11.svg" symbol-width="11" priority="-5"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="car-repair"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="car-repair"/>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="supermarket" zoom-min="16">
|
||||
<symbol id="supermarket" src=":/POI/grocery-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="supermarket"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="supermarket"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="convenience" zoom-min="16">
|
||||
<rule e="any" k="shop" v="convenience" zoom-min="17">
|
||||
<symbol id="convenience" src=":/POI/shop-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="convenience"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="convenience"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="doityourself|hardware" zoom-min="16">
|
||||
<rule e="any" k="shop" v="doityourself|hardware" zoom-min="17">
|
||||
<symbol id="hardware" src=":/POI/hardware-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="hardware"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="hardware"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="bakery" zoom-min="16">
|
||||
<rule e="any" k="shop" v="bakery" zoom-min="17">
|
||||
<symbol id="bakery" src=":/POI/bakery-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="bakery"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bakery"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="amenity" v="pharmacy" zoom-min="16">
|
||||
<symbol id="pharmacy" src=":/POI/pharmacy-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="pharmacy"/>
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="pharmacy"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="bicycle" zoom-min="16">
|
||||
<rule e="any" k="shop" v="bicycle" zoom-min="17">
|
||||
<symbol id="bikeshop" src=":/POI/bicycle-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="bikeshop"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bikeshop"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="hairdresser" zoom-min="16">
|
||||
<rule e="any" k="shop" v="hairdresser" zoom-min="17">
|
||||
<symbol id="hairdresser" src=":/POI/hairdresser-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="hairdresser"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="hairdresser"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="beverages|alcohol" zoom-min="16">
|
||||
<rule e="any" k="shop" v="beverages|alcohol" zoom-min="17">
|
||||
<symbol id="alcohol" src=":/POI/alcohol-shop-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="1" symbol-id="alcohol"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="alcohol"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="travel_agency" zoom-min="17">
|
||||
<symbol id="travel-agency" src=":/POI/beach-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="travel-agency"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="laundry" zoom-min="17">
|
||||
<symbol id="laundry" src=":/POI/laundry-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="laundry"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="shop" v="butcher" zoom-min="17">
|
||||
<symbol id="butcher" src=":/POI/slaughterhouse-11.svg" symbol-width="11" priority="-5"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="butcher"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="military" v="bunker|bunker_disused" zoom-min="17">
|
||||
<symbol id="bunker" src=":/symbols/bunker.svg" symbol-width="11" symbol-height="9"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="bunker"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="historic" v="wayside_cross|wayside_shrine" zoom-min="17">
|
||||
<symbol id="wayside-cross" src=":/symbols/cross.svg" symbol-width="6" symbol-height="8"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="18">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="wayside-cross"/>
|
||||
</rule>
|
||||
</rule>
|
||||
<rule e="any" k="leisure" v="slipway" zoom-min="16">
|
||||
<symbol id="slipway" src=":/POI/slipway-11.svg" symbol-width="11"/>
|
||||
<rule e="any" k="*" v="*" zoom-min="17">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" symbol-id="slipway"/>
|
||||
</rule>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="power" v="plant" zoom-min="15">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2" priority="1"/>
|
||||
</rule>
|
||||
<rule e="any" k="landuse" v="quarry" zoom-min="14">
|
||||
<caption fill="#000000" font-size="10" font-style="italic" k="name" stroke="#FFFFFF" stroke-width="2"/>
|
||||
</rule>
|
||||
|
||||
<rule e="any" k="emergency" v="phone" zoom-min="16">
|
||||
<symbol id="phone" src=":/POI/telephone-11.svg" symbol-width="11"/>
|
||||
</rule>
|
||||
<rule e="any" k="emergency" v="defibrillator" zoom-min="16">
|
||||
<symbol id="defibrillator" src=":/POI/defibrillator-11.svg" symbol-width="11"/>
|
||||
</rule>
|
||||
|
||||
</rendertheme>
|
||||
|
@ -3,7 +3,7 @@ unix:!macx:!android {
|
||||
} else {
|
||||
TARGET = GPXSee
|
||||
}
|
||||
VERSION = 13.29
|
||||
VERSION = 13.34
|
||||
|
||||
|
||||
QT += core \
|
||||
|
26
gpxsee.qrc
@ -6,10 +6,13 @@
|
||||
|
||||
<!-- Common map stuff -->
|
||||
<qresource prefix="/symbols">
|
||||
<file alias="bunker.svg">icons/map/symbols/bunker.svg</file>
|
||||
<file alias="cliff.svg">icons/map/symbols/cliff.svg</file>
|
||||
<file alias="cross.svg">icons/map/symbols/cross.svg</file>
|
||||
<file alias="exit.svg">icons/map/symbols/exit.svg</file>
|
||||
<file alias="flow.svg">icons/map/symbols/flow.svg</file>
|
||||
<file alias="oneway.svg">icons/map/symbols/oneway.svg</file>
|
||||
<file alias="saddle.svg">icons/map/symbols/saddle.svg</file>
|
||||
</qresource>
|
||||
|
||||
<!-- POIs (IMG, Mapsforge & ENC style) -->
|
||||
@ -22,6 +25,8 @@
|
||||
<file alias="bank-11.svg">icons/map/POI/bank-11.svg</file>
|
||||
<file alias="bar-11.svg">icons/map/POI/bar-11.svg</file>
|
||||
<file alias="barrier-11.svg">icons/map/POI/barrier-11.svg</file>
|
||||
<file alias="baseball-11.svg">icons/map/POI/baseball-11.svg</file>
|
||||
<file alias="basketball-11.svg">icons/map/POI/basketball-11.svg</file>
|
||||
<file alias="bbq-11.svg">icons/map/POI/bbq-11.svg</file>
|
||||
<file alias="beach-11.svg">icons/map/POI/beach-11.svg</file>
|
||||
<file alias="beer-11.svg">icons/map/POI/beer-11.svg</file>
|
||||
@ -40,13 +45,18 @@
|
||||
<file alias="cemetery-11.svg">icons/map/POI/cemetery-11.svg</file>
|
||||
<file alias="cinema-11.svg">icons/map/POI/cinema-11.svg</file>
|
||||
<file alias="clothing-store-11.svg">icons/map/POI/clothing-store-11.svg</file>
|
||||
<file alias="college-11.svg">icons/map/POI/college-11.svg</file>
|
||||
<file alias="communications-tower-11.svg">icons/map/POI/communications-tower-11.svg</file>
|
||||
<file alias="convenience-11.svg">icons/map/POI/convenience-11.svg</file>
|
||||
<file alias="cricket-11.svg">icons/map/POI/cricket-11.svg</file>
|
||||
<file alias="cross-11.svg">icons/map/POI/cross-11.svg</file>
|
||||
<file alias="dam-11.svg">icons/map/POI/dam-11.svg</file>
|
||||
<file alias="danger-11.svg">icons/map/POI/danger-11.svg</file>
|
||||
<file alias="defibrillator-11.svg">icons/map/POI/defibrillator-11.svg</file>
|
||||
<file alias="doctor-11.svg">icons/map/POI/doctor-11.svg</file>
|
||||
<file alias="drinking-water-11.svg">icons/map/POI/drinking-water-11.svg</file>
|
||||
<file alias="fast-food-11.svg">icons/map/POI/fast-food-11.svg</file>
|
||||
<file alias="embassy-11.svg">icons/map/POI/embassy-11.svg</file>
|
||||
<file alias="entrance-alt1-11.svg">icons/map/POI/entrance-alt1-11.svg</file>
|
||||
<file alias="ferry-11.svg">icons/map/POI/ferry-11.svg</file>
|
||||
<file alias="fire-station-11.svg">icons/map/POI/fire-station-11.svg</file>
|
||||
@ -61,17 +71,24 @@
|
||||
<file alias="harbor-11.svg">icons/map/POI/harbor-11.svg</file>
|
||||
<file alias="hardware-11.svg">icons/map/POI/hardware-11.svg</file>
|
||||
<file alias="heliport-11.svg">icons/map/POI/heliport-11.svg</file>
|
||||
<file alias="home-11.svg">icons/map/POI/home-11.svg</file>
|
||||
<file alias="horse-riding-11.svg">icons/map/POI/horse-riding-11.svg</file>
|
||||
<file alias="hospital-11.svg">icons/map/POI/hospital-11.svg</file>
|
||||
<file alias="hot-spring.svg">icons/map/POI/hot-spring.svg</file>
|
||||
<file alias="ice-cream-11.svg">icons/map/POI/ice-cream-11.svg</file>
|
||||
<file alias="information-11.svg">icons/map/POI/information-11.svg</file>
|
||||
<file alias="landmark-11.svg">icons/map/POI/landmark-11.svg</file>
|
||||
<file alias="laundry-11.svg">icons/map/POI/laundry-11.svg</file>
|
||||
<file alias="library-11.svg">icons/map/POI/library-11.svg</file>
|
||||
<file alias="lighthouse-11.svg">icons/map/POI/lighthouse-11.svg</file>
|
||||
<file alias="lodging-11.svg">icons/map/POI/lodging-11.svg</file>
|
||||
<file alias="monument-11.svg">icons/map/POI/monument-11.svg</file>
|
||||
<file alias="mountain-11.svg">icons/map/POI/mountain-11.svg</file>
|
||||
<file alias="museum-11.svg">icons/map/POI/museum-11.svg</file>
|
||||
<file alias="observation-tower.svg">icons/map/POI/observation-tower.svg</file>
|
||||
<file alias="park-11.svg">icons/map/POI/park-11.svg</file>
|
||||
<file alias="parking-11.svg">icons/map/POI/parking-11.svg</file>
|
||||
<file alias="parking-garage-11.svg">icons/map/POI/parking-garage-11.svg</file>
|
||||
<file alias="pharmacy-11.svg">icons/map/POI/pharmacy-11.svg</file>
|
||||
<file alias="picnic-site-11.svg">icons/map/POI/picnic-site-11.svg</file>
|
||||
<file alias="place-of-worship-11.svg">icons/map/POI/place-of-worship-11.svg</file>
|
||||
@ -93,19 +110,27 @@
|
||||
<file alias="shop-11.svg">icons/map/POI/shop-11.svg</file>
|
||||
<file alias="skateboard-11.svg">icons/map/POI/skateboard-11.svg</file>
|
||||
<file alias="skiing-11.svg">icons/map/POI/skiing-11.svg</file>
|
||||
<file alias="slaughterhouse-11.svg">icons/map/POI/slaughterhouse-11.svg</file>
|
||||
<file alias="slipway-11.svg">icons/map/POI/slipway-11.svg</file>
|
||||
<file alias="soccer-11.svg">icons/map/POI/soccer-11.svg</file>
|
||||
<file alias="stadium-11.svg">icons/map/POI/stadium-11.svg</file>
|
||||
<file alias="swimming-11.svg">icons/map/POI/swimming-11.svg</file>
|
||||
<file alias="telephone-11.svg">icons/map/POI/telephone-11.svg</file>
|
||||
<file alias="tennis-11.svg">icons/map/POI/tennis-11.svg</file>
|
||||
<file alias="theatre-11.svg">icons/map/POI/theatre-11.svg</file>
|
||||
<file alias="toilet-11.svg">icons/map/POI/toilet-11.svg</file>
|
||||
<file alias="town-hall-11.svg">icons/map/POI/town-hall-11.svg</file>
|
||||
<file alias="triangle-11.svg">icons/map/POI/triangle-11.svg</file>
|
||||
<file alias="triangle-stroked-11.svg">icons/map/POI/triangle-stroked-11.svg</file>
|
||||
<file alias="viewpoint-11.svg">icons/map/POI/viewpoint-11.svg</file>
|
||||
<file alias="village-11.svg">icons/map/POI/village-11.svg</file>
|
||||
<file alias="volcano-11.svg">icons/map/POI/volcano-11.svg</file>
|
||||
<file alias="volleyball-11.svg">icons/map/POI/volleyball-11.svg</file>
|
||||
<file alias="water-11.svg">icons/map/POI/water-11.svg</file>
|
||||
<file alias="waterfall-11.svg">icons/map/POI/waterfall-11.svg</file>
|
||||
<file alias="watermill-11.svg">icons/map/POI/watermill-11.svg</file>
|
||||
<file alias="wetland-11.svg">icons/map/POI/wetland-11.svg</file>
|
||||
<file alias="windmill-11.svg">icons/map/POI/windmill-11.svg</file>
|
||||
<file alias="zoo-11.svg">icons/map/POI/zoo-11.svg</file>
|
||||
</qresource>
|
||||
|
||||
@ -181,6 +206,7 @@
|
||||
<file alias="kelp.png">icons/map/marine/kelp.png</file>
|
||||
<file alias="eddies.png">icons/map/marine/eddies.png</file>
|
||||
<file alias="dome.png">icons/map/marine/dome.png</file>
|
||||
<file alias="radar-reflector.png">icons/map/marine/radar-reflector.png</file>
|
||||
</qresource>
|
||||
|
||||
<!-- Patterns (Mapsforge) -->
|
||||
|
4
icons/map/POI/baseball-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="baseball-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M7,3c0,0.5523-0.4477,1-1,1S5,3.5523,5,3s0.4477-1,1-1S7,2.4477,7,3z M9.85,10.24L9.85,10.24l-3-4.85
	C6.7391,5.2011,6.5603,5.0616,6.35,5H2.5C2.2239,5,2,5.2239,2,5.5S2.2239,6,2.5,6H5l0.92,1.09l-2.73,3l0,0
	C3.0637,10.1876,2.9928,10.3405,3,10.5C3,10.7761,3.2239,11,3.5,11c0.1224-0.0006,0.2401-0.047,0.33-0.13l0,0l3-2.71L9,10.81l0,0
	c0.0912,0.1178,0.231,0.1877,0.38,0.19c0.2761,0,0.5-0.2239,0.5-0.5C9.8938,10.4122,9.8834,10.3223,9.85,10.24z M4,0.28
	C4,0.1254,3.8746,0,3.72,0C3.6221,0.0262,3.5348,0.0821,3.47,0.16L2,4.59C1.9941,4.6331,1.9941,4.6769,2,4.72
	C2,4.8746,2.1254,5,2.28,5c0.1015-0.0243,0.1926-0.0803,0.26-0.16L4,0.41C4.006,0.3669,4.006,0.3231,4,0.28z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 876 B |
4
icons/map/POI/basketball-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="basketball-11" xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11">
|
||||
<path id="icon_concepts:_sports_leisure" d="M2.63,3.51a5.1555,5.1555,0,0,1,.34,1.48H2.04A3.2586,3.2586,0,0,1,2.63,3.51Zm.55-.63a6.2022,6.2022,0,0,1,.55,2.11H5.12V2.01A3.4256,3.4256,0,0,0,3.18,2.88Zm2.7-.87V4.99H7.27a6.2022,6.2022,0,0,1,.55-2.11A3.4256,3.4256,0,0,0,5.88,2.01Zm2.49,1.5a5.1555,5.1555,0,0,0-.34,1.48h.93A3.2586,3.2586,0,0,0,8.37,3.51ZM9.9,6.5a.4952.4952,0,0,1-.49.5H8.44L7.91,8.05v1.7a.2176.2176,0,0,1-.14.2.236.236,0,0,1-.08.02.1987.1987,0,0,1-.16-.07l-.75-.74-1.16.77a.2107.2107,0,0,1-.24,0L4.22,9.16l-.75.74a.2222.2222,0,0,1-.38-.15V8.05L2.57,7H1.6a.5.5,0,1,1,0-1H9.4a.4951.4951,0,0,1,.5.49ZM3.53,8V9.22l.5-.5c.01,0,.01-.01.02-.01L5.1,7H3.06l.45.9A.3561.3561,0,0,1,3.53,8Zm2.97.82-1-1.63-1,1.63,1,.67ZM7.94,7H5.9L6.95,8.71c.01,0,.01.01.02.01l.5.5V8a.3561.3561,0,0,1,.02-.1Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 944 B |
7
icons/map/POI/college-11.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="college-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<g>
|
||||
<path d="M2,7.3c0.3-0.2,0.5-0.5,0.5-0.8c0-0.4-0.2-0.7-0.6-0.9V4.4L5.5,6L11,3.5L5.5,1L0,3.5L1.2,4v1.6
 C0.8,5.8,0.6,6.1,0.6,6.5c0,0.3,0.2,0.6,0.5,0.8L0.6,9c-0.3,1,0.5,1,0.5,1h1c0,0,0.8,0,0.5-1L2,7.3z"/>
|
||||
<path d="M3.5,6.2c0,0.1,0,0.2,0,0.3c0,0.4-0.2,0.8-0.4,1.1C3.3,8,3.5,8.4,3.5,9v0.6C4,9.8,4.7,10,5.5,10
 C8,10,9,8.5,9,8.5v-3L5.5,7.1L3.5,6.2z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 526 B |
4
icons/map/POI/cricket-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="cricket-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M6,1c0,0.5523-0.4477,1-1,1S4,1.5523,4,1s0.4477-1,1-1S6,0.4477,6,1z M8.88,5.18l-1-2l0,0l0,0
	C7.7859,3.0671,7.647,3.0012,7.5,3H2.77C2.3827,2.9815,2.0467,3.2651,2,3.65l0,0l-1,6.71l0,0c-0.0068,0.0464-0.0068,0.0936,0,0.14
	C1,10.7761,1.2239,11,1.5,11c0.2307,0.0129,0.4391-0.1371,0.5-0.36l0,0l1.22-3.89l0,0l0.21-0.83l0.4,0.44l0,0L5,7.6v2.9
	C5,10.7761,5.2239,11,5.5,11S6,10.7761,6,10.5v-3l0,0l0,0C5.9971,7.3984,5.9621,7.3004,5.9,7.22l0,0L4.45,5.5L5.5,4h1.71l0.92,1.84
	l0,0C8.2247,5.9439,8.3594,6.0022,8.5,6C8.7723,6.0001,8.9946,5.7822,9,5.51C8.9826,5.3931,8.9418,5.2808,8.88,5.18z M10.5,8
	C10.2239,8,10,8.2239,10,8.5S10.2239,9,10.5,9S11,8.7761,11,8.5S10.7761,8,10.5,8z M8.69,8V7.25C8.69,7.1119,8.5781,7,8.44,7
	S8.19,7.1119,8.19,7.25V8C8.0378,8.0855,7.9426,8.2455,7.94,8.42v2.08c0,0.2761,0.2239,0.5,0.5,0.5s0.5-0.2239,0.5-0.5V8.41
	C8.9339,8.2391,8.8392,8.0837,8.69,8z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
4
icons/map/POI/cross-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="cross-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M2.2,1.19l3.3,3.3L8.8,1.2C8.9314,1.0663,9.1127,0.9938,9.3,1C9.6761,1.0243,9.9757,1.3239,10,1.7
	c0.0018,0.1806-0.0705,0.3541-0.2,0.48L6.49,5.5L9.8,8.82C9.9295,8.9459,10.0018,9.1194,10,9.3C9.9757,9.6761,9.6761,9.9757,9.3,10
	c-0.1873,0.0062-0.3686-0.0663-0.5-0.2L5.5,6.51L2.21,9.8c-0.1314,0.1337-0.3127,0.2062-0.5,0.2C1.3265,9.98,1.02,9.6735,1,9.29
	C0.9982,9.1094,1.0705,8.9359,1.2,8.81L4.51,5.5L1.19,2.18C1.0641,2.0524,0.9955,1.8792,1,1.7C1.0243,1.3239,1.3239,1.0243,1.7,1
	C1.8858,0.9912,2.0669,1.06,2.2,1.19z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 719 B |
4
icons/map/POI/defibrillator-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11" id="defibrillator-11">
|
||||
<path d="M1.42,4.7955C-0.2131,1.5291,3.9327-.6514,5.512,2.6149,7.0914-.6514,11.2371,1.5291,9.6039,4.7955c-0.0225.0377-.0483,0.0732-0.071,0.1108H8.3867L7.5586,3.252a0.65,0.65,0,0,0-1.1172,0L5,6.1338,4.5586,5.252A0.6243,0.6243,0,0,0,4,4.9063H1.4913C1.4685,4.8687,1.4427,4.8332,1.42,4.7955ZM8,6.1563a0.6243,0.6243,0,0,1-.5586-0.3457L7,4.9287,5.5586,7.8105a0.6241,0.6241,0,0,1-1.1172,0L3.6133,6.1563H2.3006a24.2269,24.2269,0,0,0,2.8973,3.449L5.2134,9.6208A0.44,0.44,0,0,0,5.835,9.6053a24.2289,24.2289,0,0,0,2.8905-3.449H8Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 675 B |
4
icons/map/POI/embassy-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="embassy-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M5.5,2C4.6014,2.0766,3.7537,2.4494,3.09,3.06C3.0316,3.1262,2.9995,3.2117,3,3.3v3.32
	C2.9889,6.8074,3.1318,6.9684,3.3193,6.9796C3.4115,6.985,3.5021,6.9527,3.57,6.89C4.1239,6.4637,4.8011,6.2286,5.5,6.22
	C6.61,6.22,6.85,7,8,7c0.6869-0.0671,1.3313-0.3629,1.83-0.84C9.9401,6.0917,10.0051,5.9695,10,5.84V2.37
	c0.0309-0.1908-0.0987-0.3705-0.2896-0.4014C9.6387,1.9569,9.5652,1.9679,9.5,2C9.0686,2.3529,8.5507,2.5842,8,2.67
	C6.85,2.67,6.65,2,5.5,2z M1.5,1.5c0.5523,0,1,0.4477,1,1s-0.4477,1-1,1s-1-0.4477-1-1S0.9477,1.5,1.5,1.5z M2,4.5v6
	C2,10.7761,1.7761,11,1.5,11S1,10.7761,1,10.5v-6C1,4.2239,1.2239,4,1.5,4S2,4.2239,2,4.5z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 838 B |
4
icons/map/POI/home-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11" id="home-11">
|
||||
<path d="M10.0015,4.7507c0,0.13807-0.11193,0.25-0.25,0.25H1.25c-0.13807,0-0.25-0.11193-0.25-0.25
	c-0.00054-0.07163,0.02839-0.14033,0.08-0.19l4.2378-3.4545l0.016-0.016c0.10112-0.09209,0.2577-0.08493,0.35,0.016l2.3174,1.8892
	V1.5c0-0.27614,0.22386-0.5,0.5-0.5s0.5,0.22386,0.5,0.5v2.31l0.92,0.75C9.9731,4.60979,10.00215,4.67878,10.0015,4.7507z M2,9.7514
	c-0.00111,0.13696,0.10902,0.24889,0.24598,0.25c0.00001,0,0.00001,0,0.00002,0h2.7547v-2h1v2h2.7526
	c0.13697,0,0.248-0.11103,0.248-0.248l0,0l0,0V6.0009H2V9.7514z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 712 B |
4
icons/map/POI/horse-riding-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="horse-riding-11" xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11">
|
||||
<path d="M4,1A1,1,0,1,1,5,2,1,1,0,0,1,4,1Zm6.88,3.5L9,3V2.5L7,5H6L7,6V7.014a.5.5,0,1,1-1,0V6.5L4,5H3a1,1,0,0,0-.8.446A1.189,1.189,0,0,0,1.247,5,1.076,1.076,0,0,0,0,5.988C0,7.3.635,7.471.635,7.471a.33.33,0,0,0,.115.023A.253.253,0,0,0,1,7.25V6a.49.49,0,0,1,.48-.5H1.5A.5.5,0,0,1,2,6V8.014l-.3.6a1.609,1.609,0,0,0-.2.6v1.542A.244.244,0,0,0,1.744,11,.255.255,0,0,0,2,10.756V9.514a.367.367,0,0,1,.1-.3l.9-1.2V9l.467,1.816A.256.256,0,0,0,3.709,11a.25.25,0,0,0,.25-.25v-.016l-.242-1.61a.6.6,0,0,1,.025-.236L3.8,8.714,4,8H6V9l.466,1.816A.256.256,0,0,0,6.709,11a.25.25,0,0,0,.25-.25L6.718,9.124a.6.6,0,0,1,.025-.236L7,8a.877.877,0,0,0,.934-.661L8.5,4.5a.6.6,0,0,0,.71.454.562.562,0,0,0,.143-.07l.9.116a.721.721,0,0,0,.392.1A.331.331,0,0,0,11,4.784.406.406,0,0,0,10.88,4.5ZM6,3.5A.51.51,0,0,0,5.5,3h-1a.482.482,0,0,0-.5.5V5H6Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 972 B |
4
icons/map/POI/hot-spring.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="hot-spring" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
|
||||
<path d="M6.682,5.759c-.505-.725-.781-1.121-.63-2.376,.139-1.156,.678-1.616,1.198-2.059,.404-.345,.797-.68,.981-1.324,.301,.722-.036,1.47-.349,2.164-.311,.691-.599,1.329-.211,1.836,.971,1.271,1.963,2.88,.971,4.586-.214,.393-.539,.681-.861,.968-.422,.375-.841,.747-1.004,1.348-.269-.677,.008-1.366,.285-2.052,.306-.759,.61-1.516,.172-2.251-.203-.34-.389-.607-.551-.84Zm3.371-1.174c-.098-.632,.034-1.281,.368-1.809,.367-.45,.701-.642,.991-.81,.345-.199,.627-.362,.83-.877,.289,.684,0,1.188-.304,1.718-.119,.207-.24,.418-.329,.645-.191,.61,.101,.893,.467,1.247,.358,.346,.786,.76,.899,1.617,.083,.635-.036,1.156-.372,1.684-.356,.436-.681,.655-.965,.846-.356,.24-.648,.437-.856,.965-.292-.688,.031-1.259,.353-1.828,.123-.217,.246-.434,.334-.658,.073-.558-.234-.867-.581-1.217-.357-.36-.757-.763-.834-1.523Zm-8.018,0c-.098-.632,.005-1.3,.368-1.809,.376-.528,.729-.717,1.035-.881,.323-.173,.594-.318,.786-.806,.289,.683-.014,1.208-.325,1.749-.122,.212-.246,.427-.336,.655-.152,.385,.131,1.014,.501,1.242,1.002,.801,1.227,2.286,.547,3.353-.366,.448-.704,.648-.999,.823-.353,.209-.645,.382-.849,.898-.278-.656,.008-1.18,.3-1.714,.131-.24,.263-.481,.345-.737,.179-.557-.134-.884-.51-1.277-.349-.365-.752-.785-.863-1.498Zm10.965,4.414c.7,2.616-3.474,3-5.5,3s-6.2-.484-5.5-3c-.633,.316-1,.961-1,1.5,0,1.519,2.91,2.9,6.5,2.9s6.5-1.381,6.5-2.9c0-.539-.367-1.184-1-1.5Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
4
icons/map/POI/ice-cream-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="ice-cream-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M4,6c0.541,0.0007,1.0676-0.1748,1.5-0.5C5.9324,5.8252,6.459,6.0007,7,6l-1,4.69c-0.1082,0.2541-0.4019,0.3723-0.656,0.264
	c-0.1188-0.0506-0.2134-0.1452-0.264-0.264L4,6z M7,2H6.91c0.2826-0.7787-0.1195-1.6391-0.8982-1.9218S4.3726,0.1978,4.09,0.9765
	C3.97,1.3071,3.97,1.6694,4.09,2H4C3.1716,2,2.5,2.6716,2.5,3.5S3.1716,5,4,5s1.5-0.6716,1.5-1.5l0,0l0,0l0,0
	C5.5,4.3284,6.1716,5,7,5s1.5-0.6716,1.5-1.5S7.8284,2,7,2z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 615 B |
4
icons/map/POI/laundry-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="laundry-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path id="path3291" d="M5,0L4,2H2c0,0-1,0-1,1v7c0,0,0,1,1,1h7c1,0,1-1,1-1V1c0-1-1-1-1-1H5z M6,1h3v1H6V1z M5.5,4
	C6.8807,4,8,5.1193,8,6.5S6.8807,9,5.5,9S3,7.8807,3,6.5S4.1193,4,5.5,4z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 360 B |
4
icons/map/POI/observation-tower.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" id="observation-tower">
|
||||
<path d="M12 12.5H11.5L10 9V7C10.9951 7 10.9951 6.25 10.9951 6.25L11.5 3C11.5 3 11.5 2.5 11 2.5H10C10 2.5 10 2 9.5 2H8.5V1.5C8.5 1.5 8.5 0.5 7.5 0.5C6.5 0.5 6.5 1.5 6.5 1.5V2H5.5C5 2 5 2.5 5 2.5H4C3.5 2.5 3.5 3 3.5 3L4.0049 6.25C4.0049 6.25 4.0049 7 5 7V9L3.5 12.5H3C3 12.5 2 12.5 2 13.25C2 14 3 14 3 14H12C12 14 13 14 13 13.25C13 12.5 12 12.5 12 12.5ZM10.25 3.5L10 5H5L4.75 3.4971L10.25 3.5ZM8.5 7V8H6.5V7H8.5ZM6.5006 9.4971H8.4994L9.5 12.5H5.5L6.5006 9.4971Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 618 B |
4
icons/map/POI/parking-garage-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="parking-garage-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M7.25,7.44C6.8067,7.7602,6.2657,7.9158,5.72,7.88H4.45V10H3.19V4H5.8c0.5201-0.0279,1.0324,0.1358,1.44,0.46
	c0.3847,0.372,0.5828,0.8966,0.54,1.43C7.8557,6.4611,7.6596,7.0348,7.25,7.44z M6.25,5.28c-0.1946-0.1475-0.4365-0.2186-0.68-0.2
	H4.45v1.76H5.6c0.246,0.0129,0.4882-0.0654,0.68-0.22c0.1746-0.1813,0.2621-0.4293,0.24-0.68c0.023-0.2449-0.0651-0.4871-0.24-0.66
	L6.25,5.28z M10.41,3.28c0.1349-0.2403,0.0499-0.5444-0.19-0.68l-4.5-2.5c-0.1521-0.0855-0.3379-0.0855-0.49,0l-4.5,2.5
	C0.4972,2.7485,0.4288,3.0576,0.5773,3.2904C0.7144,3.5054,0.9913,3.5828,1.22,3.47l4.28-2.4l4.26,2.37
	c0.2421,0.1328,0.546,0.0442,0.6789-0.1979C10.4392,3.2414,10.4396,3.2407,10.44,3.24L10.41,3.28z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 899 B |
4
icons/map/POI/slaughterhouse-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="slaughterhouse-11" xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11">
|
||||
<path d="M11,5.75v.241C11,7,10,6.5,10,6.5H8A3.081,3.081,0,0,1,7,8a2.848,2.848,0,0,1-.416.9.26.26,0,0,0-.05.242l.458,1.55A.227.227,0,0,1,7,10.75a.25.25,0,0,1-.25.25.259.259,0,0,1-.244-.173L6,9V8.5H2.75l-.21.42a.25.25,0,0,0-.02.168L3,10.75a.25.25,0,0,1-.25.25.26.26,0,0,1-.237-.172L2,9V8.5a4.013,4.013,0,0,1-.843-.139,1.383,1.383,0,0,1-.5,1.045.242.242,0,0,0-.094.282l.414.99a.213.213,0,0,1,.011.072.25.25,0,0,1-.25.25.253.253,0,0,1-.228-.148L0,9.5a6.031,6.031,0,0,0,0-2v-2A1.486,1.486,0,0,1,2,4.1s.768.132,1.1.154A2.457,2.457,0,0,0,4,4.087,1.666,1.666,0,0,1,4.5,4a1.648,1.648,0,0,1,.844.257,3.166,3.166,0,0,0,.9.23L7,4.5s.966-.484,1-.5V3.5l.5.5A1.474,1.474,0,0,1,10,3.5.914.914,0,0,0,9,4l1,1,.68.529a.425.425,0,0,1,.07-.029A.238.238,0,0,1,11,5.75Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 904 B |
6
icons/map/POI/slipway-11.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="slipway-11" xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11">
|
||||
<g id="slipway-final">
|
||||
<path d="M1.0417,8l8,1.3794V10h-8Zm8-4-1,1v.625L3.7345,4.01l.0777-.2852.86-.8447H5.5a.35.35,0,0,0,0-.6992H4.529a.3478.3478,0,0,0-.2451.1L3.2546,3.291a.3566.3566,0,0,0-.0928.1582l-.0856.3137L1.0417,3C1.0948,4,1,5.5094,3,5.8844,3.9829,6.0687,8.0948,7,8.0948,7l1.9469-2Z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 452 B |
4
icons/map/POI/stadium-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="stadium-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path id="path4177" d="M5,0v3v0.0117
	C2.7922,3.1089,1.0876,3.8182,1,4.6816c0,0,0,2.4594,0,3.6816C0.9995,9.2672,3.0143,10,5.5,10s4.5005-0.7328,4.5-1.6367V4.6816
	C9.9122,3.8177,8.2093,3.1082,6,3.0117V2.5723L8.5,1.5L5,0z M1.8184,5.752C2.1366,5.9302,2.5373,6.0838,3,6.2051v2.459
	C2.2493,8.4283,1.8213,8.0972,1.8184,7.75V5.752z M9.1816,5.7559V7.75C9.1803,8.0979,8.7521,8.4298,8,8.666V6.2031
	C8.4614,6.0836,8.862,5.932,9.1816,5.7559z M4,6.3984C4.4815,6.4652,4.9888,6.4995,5.5,6.5C6.0112,6.4995,6.5185,6.4652,7,6.3984
	v2.4922C6.5282,8.9624,6.0171,8.9997,5.5,9C4.9829,8.9997,4.4718,8.9624,4,8.8906V6.3984z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 811 B |
4
icons/map/POI/triangle-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="triangle-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path id="rect3338" d="M5.5174,1.2315
	C5.3163,1.2253,5.1276,1.328,5.024,1.5l-4,6.6598C0.8013,8.5293,1.0679,8.9999,1.5,9h8c0.4321-0.0001,0.6987-0.4707,0.476-0.8402
	l-4-6.6598C5.8787,1.3386,5.706,1.2375,5.5174,1.2315z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 403 B |
4
icons/map/POI/triangle-stroked-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="triangle-stroked-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path id="rect3338" d="M5.5174,1.2315
	C5.3163,1.2253,5.1276,1.328,5.024,1.5l-4,6.6598C0.8013,8.5293,1.0679,8.9999,1.5,9h8c0.4321-0.0001,0.6987-0.4707,0.476-0.8402
	l-4-6.6598C5.8787,1.3386,5.706,1.2375,5.5174,1.2315z M5.5,2.8627l3.0191,5.0286H2.4809L5.5,2.8627z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 456 B |
4
icons/map/POI/volleyball-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="volleyball-11" xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 11 11">
|
||||
<path d="M9.99,5.73a3.6572,3.6572,0,0,1-.1.74A6.3224,6.3224,0,0,0,7.44,5.05a5.9537,5.9537,0,0,0-1.32-.27c-.03,0-.07-.01-.11-.01A4.6052,4.6052,0,0,1,5.5,3.64a1.0563,1.0563,0,0,1-.06-.24h.12a4.8784,4.8784,0,0,1,1.01.11,5.0388,5.0388,0,0,1,1.14.36,4.8341,4.8341,0,0,1,.94.53A5.1356,5.1356,0,0,1,9.99,5.73ZM9.33,7.31a5.1964,5.1964,0,0,0-1.36-.97c-.05.1-.11.19-.17.29a5.8645,5.8645,0,0,1-.59.82,7.1807,7.1807,0,0,1-.78.78,6.72,6.72,0,0,1-.93.65,6.3643,6.3643,0,0,1-1.86.72,4.524,4.524,0,0,0,3.72,0,4.1584,4.1584,0,0,0,1.25-.86,3.1983,3.1983,0,0,0,.43-.47,3.7473,3.7473,0,0,0,.48-.76A1.1915,1.1915,0,0,0,9.33,7.31ZM8.68,2.32a4.5077,4.5077,0,0,0-1.24-.88,3.979,3.979,0,0,0-.75-.28,4.3423,4.3423,0,0,0-1.03-.15,1.2787,1.2787,0,0,0-.32,0A5.3628,5.3628,0,0,0,5.25,2c0,.14.01.28.02.41a1.6165,1.6165,0,0,1,.22-.01,1.9237,1.9237,0,0,1,.24.01,6.6508,6.6508,0,0,1,1,.11,5.6947,5.6947,0,0,1,1,.28,6.7814,6.7814,0,0,1,1.02.47,6.6645,6.6645,0,0,1,.98.69A4.5655,4.5655,0,0,0,8.68,2.32ZM3.03,6.34a5.808,5.808,0,0,1-.4-.92,5.7849,5.7849,0,0,1-.28-1.03,6.86,6.86,0,0,1-.1-1.12V3.25a5.656,5.656,0,0,1,.07-.93A4.3939,4.3939,0,0,0,1.27,3.97,4.3206,4.3206,0,0,0,1,5.5a1.7671,1.7671,0,0,0,.01.23,4.4161,4.4161,0,0,0,.09.73,4.0749,4.0749,0,0,0,.31.91,1.0685,1.0685,0,0,0,.27-.07A5.0679,5.0679,0,0,0,3.2,6.63C3.14,6.53,3.08,6.44,3.03,6.34Zm3.88-.4a5.4992,5.4992,0,0,0-1.35-.19c-.02.03-.04.05-.06.08a6.2466,6.2466,0,0,1-.91,1.01,5.8334,5.8334,0,0,1-.8.61,6.5727,6.5727,0,0,1-1.83.82,3.1983,3.1983,0,0,0,.43.47,5.1724,5.1724,0,0,0,2.18-.51,5.4146,5.4146,0,0,0,.93-.55,5.5958,5.5958,0,0,0,.91-.84A4.8049,4.8049,0,0,0,7,6.01a.0517.0517,0,0,0,.02-.04A.2283.2283,0,0,0,6.91,5.94ZM4.88,4.78a5.6391,5.6391,0,0,1-.45-1.27,6.3861,6.3861,0,0,1-.16-.99c-.01-.17-.02-.35-.02-.52a5.83,5.83,0,0,1,.06-.84,3.9815,3.9815,0,0,0-.75.28A5.5806,5.5806,0,0,0,3.27,2.8c-.01.15-.02.3-.02.45a4.2153,4.2153,0,0,0,.04.62,4.7107,4.7107,0,0,0,.27,1.18,5.0984,5.0984,0,0,0,.42.92A.0517.0517,0,0,0,4,6.01a.1778.1778,0,0,0,.08-.07h.01a5.6817,5.6817,0,0,0,.84-1.06A.3131.3131,0,0,1,4.88,4.78Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
4
icons/map/POI/watermill-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="watermill-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M9.9874,4.375C9.9216,2.5436,8.4563,1.0784,6.625,1.0126V1h-0.25v0.0126C5.274,1.0521,4.3123,1.6034,3.7004,2.4301L2.5059,1
	L0,4h1v4l1.8-1l1.8,1l1.1202-0.6218C5.2513,7.2512,4.825,7.021,4.4765,6.7003L6.252,4.9247c0.0385,0.0226,0.0788,0.0383,0.123,0.05
	v2.0399L6.4014,7L6.625,7.1243V4.9747c0.0442-0.0117,0.0845-0.0274,0.123-0.05l1.7755,1.7755
	C8.1429,7.0505,7.6736,7.3016,7.1526,7.4177l0.5937,0.3301C9.0195,7.2596,9.9359,6.0602,9.9874,4.625H10v-0.25H9.9874z
	 M4.2997,6.5235C3.8347,6.0182,3.5435,5.3568,3.5126,4.625h2.5126c0.0117,0.0442,0.0274,0.0845,0.05,0.123L4.2997,6.5235z
	 M6.0253,4.375H3.5126c0.0308-0.7318,0.3221-1.3932,0.7871-1.8985L6.0753,4.252C6.0527,4.2905,6.037,4.3308,6.0253,4.375z
	 M6.375,4.0253c-0.0442,0.0117-0.0845,0.0274-0.123,0.05L4.4765,2.2997c0.5053-0.465,1.1667-0.7563,1.8985-0.7871V4.0253z
	 M6.625,4.0253V1.5126c0.7318,0.0308,1.3932,0.3221,1.8985,0.7871L6.748,4.0753C6.7095,4.0527,6.6692,4.037,6.625,4.0253z
	 M8.7003,6.5235L6.9247,4.748c0.0226-0.0385,0.0383-0.0788,0.05-0.123h2.5126C9.4565,5.3568,9.1653,6.0182,8.7003,6.5235z
	 M6.9747,4.375c-0.0117-0.0442-0.0274-0.0845-0.05-0.123l1.7755-1.7755c0.465,0.5053,0.7563,1.1667,0.7871,1.8985H6.9747z M6.4014,8
	L4.6,9L3.808,8.56l0,0L2.8,8L1.792,8.56l0,0L1,9v1l1.8-1l1.8,1l1.8014-1L8.2,10L10,9V8L8.2,9L6.4014,8z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
4
icons/map/POI/windmill-11.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" id="windmill-11" xmlns="http://www.w3.org/2000/svg" width="11px" height="11px" viewBox="0 0 11 11">
|
||||
<path d="M6.375,3.9375L5.9375,3.5L6.375,3.0625h0.4375L9,0.875L8.125,0L5.9375,2.1875V2.625L5.5,3.0625L5.0625,2.625V2.1875L2.875,0
	L2,0.875l2.1875,2.1875H4.625L5.0625,3.5L4.625,3.9375H4.1875L2,6.125L2.875,7l2.1875-2.1875V4.375L5.5,3.9375L5.9375,4.375v0.4375
	L8.125,7L9,6.125L6.8125,3.9375H6.375z M8.5,10H8L7,7.5L5.5,6L4,7.5L3,10H2.5C2.2239,10,2,10.2238,2,10.5
	C2,10.7761,2.2239,11,2.5,11h6C8.7761,11,9,10.7761,9,10.5C9,10.2238,8.7761,10,8.5,10z M6,9.9717C6,9.9873,5.9874,10,5.9717,10
	H5.0283C5.0126,10,5,9.9873,5,9.9717v-0.972C5,8.7238,5.2238,8.5,5.4998,8.5C5.7761,8.5,6,8.7239,6,9.0002V9.9717z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 798 B |
BIN
icons/map/marine/radar-reflector.png
Normal file
After Width: | Height: | Size: 236 B |
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="7" height="7" version="1.1" viewBox="0 0 7 7">
|
||||
<rect x="0" y="0" width="100%" height="100%" fill="#dee9bc"/>
|
||||
<rect x="0" y="0" width="7" height="7" fill="#dee9bc"/>
|
||||
<circle cx="3" cy="3" r="1.5" stroke="#c9d69c" stroke-width="1" fill="none"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 247 B After Width: | Height: | Size: 241 B |
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="7" height="8" version="1.1" viewBox="0 0 7 8">
|
||||
<rect x="0" y="0" width="100%" height="100%" fill="#dee9bc"/>
|
||||
<rect x="0" y="0" width="7" height="8" fill="#dee9bc"/>
|
||||
<path d="M 3,2 L 3,6" stroke="#c9d69c" stroke-width="1"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 221 B |
10
icons/map/symbols/bunker.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg viewBox="0 0 11 9" height="9" width="11" version="1.1">
|
||||
<g stroke-width="1.5" stroke="#000000" fill="none">
|
||||
<rect x="2" y="2" width="7" height="5"/>
|
||||
<line x1="0" y1="0" x2="2" y2="2"/>
|
||||
<line x1="11" y1="0" x2="9" y2="2"/>
|
||||
<line x1="0" y1="9" x2="2" y2="7"/>
|
||||
<line x1="11" y1="9" x2="9" y2="7"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 363 B |
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg viewBox="0 0 4 5" height="5" width="4" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="M 0.5,0 V 5" stroke-width="1.0" stroke="#666666"/>
|
||||
<path d="M 0,0.5 H 4" stroke-width="1.0" stroke="#666666"/>
|
||||
</g>
|
||||
<svg viewBox="0 0 4 5" height="5" width="4" version="1.1">
|
||||
<g stroke-width="1.0" stroke="#666666">
|
||||
<path d="M 0.5,0 V 5"/>
|
||||
<path d="M 0,0.5 H 4"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 204 B |
4
icons/map/symbols/cross.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="6" height="8" version="1.1" viewBox="0 0 6 8">
|
||||
<path d="M 0.5,3 L 5.5,3 M 3,0.5 L 3,7.5" stroke="#000000" stroke-width="1"/>
|
||||
</svg>
|
After Width: | Height: | Size: 184 B |
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="11" viewBox="0 0 15 11" version="1.1">
|
||||
<g>
|
||||
<path style="stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 15.007812 0.132812 C 15.007812 0.230469 15.007812 0.324219 15.007812 0.421875 C 14.570312 1.402344 14.0625 2.710938 13.589844 3.875 C 13.480469 4.140625 13.316406 4.886719 12.96875 4.859375 C 12.683594 4.835938 12.535156 4.089844 12.445312 3.8125 C 12.292969 3.339844 12.210938 3.003906 12.074219 2.605469 C 10.507812 3.261719 9.367188 4.308594 9.421875 6.476562 C 9.460938 8.195312 10.074219 9.632812 10.441406 11.007812 C 8.917969 11.007812 7.394531 11.007812 5.871094 11.007812 C 5.730469 7.347656 5.59375 3.683594 5.46875 0.0078125 C 5.996094 0.0078125 6.519531 0.0078125 7.042969 0.0078125 C 7.40625 1.230469 7.800781 2.421875 8.15625 3.652344 C 8.941406 2.871094 10.023438 2.042969 11.335938 1.65625 C 11.128906 1.378906 10.828125 1.179688 10.5625 0.957031 C 10.320312 0.757812 9.9375 0.570312 9.945312 0.132812 C 10.007812 0.113281 10.015625 0.0390625 10.070312 0.0078125 C 11.675781 0.0078125 13.28125 0.0078125 14.882812 0.0078125 C 14.898438 0.046875 14.921875 0.0742188 14.976562 0.0703125 C 14.972656 0.109375 14.984375 0.128906 15.007812 0.132812 Z M 15.007812 0.132812 "/>
|
||||
<path style="stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 3.433594 0.0078125 C 3.957031 0.0078125 4.484375 0.0078125 5.007812 0.0078125 C 4.867188 3.667969 4.730469 7.332031 4.605469 11.007812 C 3.074219 11.007812 1.539062 11.007812 0.0078125 11.007812 C 0.0078125 10.976562 0.0078125 10.945312 0.0078125 10.914062 C 1.171875 7.300781 2.277344 3.628906 3.433594 0.0078125 Z M 3.433594 0.0078125 "/>
|
||||
</g>
|
||||
<svg width="15" height="11" viewBox="0 0 15 11" version="1.1">
|
||||
<g stroke="none" fill="#000000">
|
||||
<path d="M 15.007812 0.132812 C 15.007812 0.230469 15.007812 0.324219 15.007812 0.421875 C 14.570312 1.402344 14.0625 2.710938 13.589844 3.875 C 13.480469 4.140625 13.316406 4.886719 12.96875 4.859375 C 12.683594 4.835938 12.535156 4.089844 12.445312 3.8125 C 12.292969 3.339844 12.210938 3.003906 12.074219 2.605469 C 10.507812 3.261719 9.367188 4.308594 9.421875 6.476562 C 9.460938 8.195312 10.074219 9.632812 10.441406 11.007812 C 8.917969 11.007812 7.394531 11.007812 5.871094 11.007812 C 5.730469 7.347656 5.59375 3.683594 5.46875 0.0078125 C 5.996094 0.0078125 6.519531 0.0078125 7.042969 0.0078125 C 7.40625 1.230469 7.800781 2.421875 8.15625 3.652344 C 8.941406 2.871094 10.023438 2.042969 11.335938 1.65625 C 11.128906 1.378906 10.828125 1.179688 10.5625 0.957031 C 10.320312 0.757812 9.9375 0.570312 9.945312 0.132812 C 10.007812 0.113281 10.015625 0.0390625 10.070312 0.0078125 C 11.675781 0.0078125 13.28125 0.0078125 14.882812 0.0078125 C 14.898438 0.046875 14.921875 0.0742188 14.976562 0.0703125 C 14.972656 0.109375 14.984375 0.128906 15.007812 0.132812 Z M 15.007812 0.132812"/>
|
||||
<path d="M 3.433594 0.0078125 C 3.957031 0.0078125 4.484375 0.0078125 5.007812 0.0078125 C 4.867188 3.667969 4.730469 7.332031 4.605469 11.007812 C 3.074219 11.007812 1.539062 11.007812 0.0078125 11.007812 C 0.0078125 10.976562 0.0078125 10.945312 0.0078125 10.914062 C 1.171875 7.300781 2.277344 3.628906 3.433594 0.0078125 Z M 3.433594 0.0078125"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.6 KiB |
7
icons/map/symbols/saddle.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg viewBox="0 0 9 11" height="11" width="9" version="1.1">
|
||||
<g stroke-width="1" stroke="#000000" fill="none">
|
||||
<path d="M 1.5,1.5 L3,3 L 3,8 L 1.5,9.5"/>
|
||||
<path d="M 7.5,1.5 L6,3 L 6,8 L 7.5,9.5"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 254 B |
@ -172,7 +172,7 @@
|
||||
<message>
|
||||
<location filename="../src/data/data.cpp" line="180"/>
|
||||
<source>GPSDump files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>GPSDump-filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/data/data.cpp" line="181"/>
|
||||
@ -414,7 +414,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="276"/>
|
||||
<source>Clear list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ryd liste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="288"/>
|
||||
@ -486,17 +486,17 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="370"/>
|
||||
<source>All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Alle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="374"/>
|
||||
<source>Raster only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kun raster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="378"/>
|
||||
<source>Vector only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kun vektor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="385"/>
|
||||
@ -591,7 +591,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="490"/>
|
||||
<source>Show hillshading</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vis terrænskygge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="498"/>
|
||||
@ -713,7 +713,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="664"/>
|
||||
<source>Open recent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Åbn seneste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="689"/>
|
||||
@ -723,7 +723,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="695"/>
|
||||
<source>Layers</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Lag</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="704"/>
|
||||
@ -772,9 +772,9 @@
|
||||
<message numerus="yes">
|
||||
<location filename="../src/GUI/gui.cpp" line="2001"/>
|
||||
<source>Download %n DEM tiles?</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform>Download %n DEM-flise?</numerusform>
|
||||
<numerusform>Download %n DEM-fliser?</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -785,12 +785,12 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="476"/>
|
||||
<source>Download data DEM</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Download data-DEM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="482"/>
|
||||
<source>Download map DEM</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Download kort-DEM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="721"/>
|
||||
@ -1053,7 +1053,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="1998"/>
|
||||
<source>DEM tiles download limit exceeded. If you really need data for such a huge area, download the files manually.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Downloadgrænsen for DEM-fliser er overskredet. Hvis du virkelig har brug for data for så stort et område, skal du downloade filerne manuelt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="2014"/>
|
||||
@ -1790,7 +1790,7 @@
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="273"/>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
|
||||
<source>px</source>
|
||||
<translation type="unfinished">px</translation>
|
||||
<translation>px</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="309"/>
|
||||
@ -1810,7 +1810,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="388"/>
|
||||
<source>Detect pauses</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Registrer pauser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="392"/>
|
||||
@ -1821,7 +1821,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="537"/>
|
||||
<source>Detection:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Registrering:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="564"/>
|
||||
@ -1865,27 +1865,27 @@
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="314"/>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="655"/>
|
||||
<source>Opacity:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Gennemsigtighed:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="657"/>
|
||||
<source>Blur radius:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Sløringsradius:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="659"/>
|
||||
<source>Azimuth:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Azimut:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="660"/>
|
||||
<source>Altitude:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Højde:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="661"/>
|
||||
<source>Z Factor:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Z-faktor:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="666"/>
|
||||
@ -1896,7 +1896,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="667"/>
|
||||
<source>Hillshading</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Terrænskygge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="687"/>
|
||||
@ -1917,7 +1917,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="656"/>
|
||||
<source>Lightening:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Belysning:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="713"/>
|
||||
@ -2325,7 +2325,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/routeitem.cpp" line="38"/>
|
||||
<source>File</source>
|
||||
<translation type="unfinished">Fil</translation>
|
||||
<translation>Fil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2591,7 +2591,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/trackitem.cpp" line="46"/>
|
||||
<source>File</source>
|
||||
<translation type="unfinished">Fil</translation>
|
||||
<translation>Fil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -587,7 +587,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="487"/>
|
||||
<source>Show local DEM tiles</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Näytä paikalliset DEM-laatat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="490"/>
|
||||
@ -699,7 +699,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="695"/>
|
||||
<source>Layers</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kerrokset</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="721"/>
|
||||
@ -850,12 +850,12 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="1998"/>
|
||||
<source>DEM tiles download limit exceeded. If you really need data for such a huge area, download the files manually.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>DEM-laattojen latausraja ylitetty. Jos todella tarvitset tietoja niin suurelta alueelta, lataa tiedostot manuaalisesti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="2014"/>
|
||||
<source>Could not download all required DEM files.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kaikkia vaadittuja DEM-tiedostoja ei voitu ladata.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="2048"/>
|
||||
@ -898,12 +898,12 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="476"/>
|
||||
<source>Download data DEM</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Lataa data-DEM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="482"/>
|
||||
<source>Download map DEM</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Lataa kartta-DEM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="762"/>
|
||||
@ -961,7 +961,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="1978"/>
|
||||
<source>Clear "%1" tile cache?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Tyhjennetäänkö "%1" ruutuvälimuisti?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/GUI/gui.cpp" line="2001"/>
|
||||
|
@ -37,7 +37,7 @@ Unicode true
|
||||
; The name of the installer
|
||||
Name "GPXSee"
|
||||
; Program version
|
||||
!define VERSION "13.29"
|
||||
!define VERSION "13.34"
|
||||
|
||||
; The file to write
|
||||
OutFile "GPXSee-${VERSION}_x64.exe"
|
||||
|
@ -6,31 +6,23 @@ bool AtlasData::pointCb(MapEntry *map, void *context)
|
||||
{
|
||||
PointCTX *ctx = (PointCTX*)context;
|
||||
|
||||
start:
|
||||
map->lock.lock();
|
||||
|
||||
ctx->cacheLock.lock();
|
||||
|
||||
MapData *cached = ctx->cache.object(map->path);
|
||||
|
||||
if (!cached) {
|
||||
ctx->cacheLock.unlock();
|
||||
|
||||
if (map->lock.tryLock()) {
|
||||
MapData *data = new MapData(map->path);
|
||||
data->points(ctx->rect, ctx->points);
|
||||
MapData *data = new MapData(map->path);
|
||||
data->points(ctx->rect, ctx->points);
|
||||
|
||||
ctx->cacheLock.lock();
|
||||
ctx->cache.insert(map->path, data);
|
||||
|
||||
map->lock.unlock();
|
||||
} else {
|
||||
map->lock.lock();
|
||||
map->lock.unlock();
|
||||
goto start;
|
||||
}
|
||||
ctx->cacheLock.lock();
|
||||
ctx->cache.insert(map->path, data);
|
||||
} else
|
||||
cached->points(ctx->rect, ctx->points);
|
||||
|
||||
ctx->cacheLock.unlock();
|
||||
map->lock.unlock();
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -39,34 +31,26 @@ bool AtlasData::polyCb(MapEntry *map, void *context)
|
||||
{
|
||||
PolyCTX *ctx = (PolyCTX*)context;
|
||||
|
||||
start:
|
||||
map->lock.lock();
|
||||
|
||||
ctx->cacheLock.lock();
|
||||
|
||||
MapData *cached = ctx->cache.object(map->path);
|
||||
|
||||
if (!cached) {
|
||||
ctx->cacheLock.unlock();
|
||||
|
||||
if (map->lock.tryLock()) {
|
||||
MapData *data = new MapData(map->path);
|
||||
data->polygons(ctx->rect, ctx->polygons);
|
||||
data->lines(ctx->rect, ctx->lines);
|
||||
MapData *data = new MapData(map->path);
|
||||
data->polygons(ctx->rect, ctx->polygons);
|
||||
data->lines(ctx->rect, ctx->lines);
|
||||
|
||||
ctx->cacheLock.lock();
|
||||
ctx->cache.insert(map->path, data);
|
||||
|
||||
map->lock.unlock();
|
||||
} else {
|
||||
map->lock.lock();
|
||||
map->lock.unlock();
|
||||
goto start;
|
||||
}
|
||||
ctx->cacheLock.lock();
|
||||
ctx->cache.insert(map->path, data);
|
||||
} else {
|
||||
cached->polygons(ctx->rect, ctx->polygons);
|
||||
cached->lines(ctx->rect, ctx->lines);
|
||||
}
|
||||
|
||||
ctx->cacheLock.unlock();
|
||||
map->lock.unlock();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -63,16 +63,17 @@ static QMap<uint,uint> orderMapInit()
|
||||
map.insert(TYPE(PILPNT), 34);
|
||||
map.insert(TYPE(ACHBRT), 35);
|
||||
map.insert(TYPE(I_ACHBRT), 35);
|
||||
map.insert(TYPE(CRANES), 36);
|
||||
map.insert(TYPE(I_CRANES), 36);
|
||||
map.insert(TYPE(I_WTWGAG), 37);
|
||||
map.insert(TYPE(PYLONS), 38);
|
||||
map.insert(TYPE(SLCONS), 39);
|
||||
map.insert(TYPE(LNDMRK), 40);
|
||||
map.insert(TYPE(SILTNK), 41);
|
||||
map.insert(TYPE(LNDELV), 42);
|
||||
map.insert(TYPE(SMCFAC), 43);
|
||||
map.insert(TYPE(BUISGL), 44);
|
||||
map.insert(TYPE(RADRFL), 36);
|
||||
map.insert(TYPE(CRANES), 37);
|
||||
map.insert(TYPE(I_CRANES), 37);
|
||||
map.insert(TYPE(I_WTWGAG), 38);
|
||||
map.insert(TYPE(PYLONS), 39);
|
||||
map.insert(TYPE(SLCONS), 40);
|
||||
map.insert(TYPE(LNDMRK), 41);
|
||||
map.insert(TYPE(SILTNK), 42);
|
||||
map.insert(TYPE(LNDELV), 43);
|
||||
map.insert(TYPE(SMCFAC), 44);
|
||||
map.insert(TYPE(BUISGL), 45);
|
||||
|
||||
map.insert(TYPE(I_DISMAR), 0xFFFFFFFE);
|
||||
map.insert(TYPE(SOUNDG), 0xFFFFFFFF);
|
||||
@ -285,7 +286,8 @@ MapData::Point::Point(uint type, const Coordinates &c, const QString &label,
|
||||
else
|
||||
_label += "\n(" + QString::fromLatin1(params.at(0))
|
||||
+ "\xE2\x80\x89m)";
|
||||
}
|
||||
} else if ((type == TYPE(TSSLPT) || type == TYPE(RCTLPT)) && params.size())
|
||||
_param = QVariant(params.at(0).toDouble());
|
||||
}
|
||||
|
||||
MapData::Poly::Poly(uint type, const Polygon &path, const QString &label,
|
||||
@ -293,7 +295,7 @@ MapData::Poly::Poly(uint type, const Polygon &path, const QString &label,
|
||||
{
|
||||
if (type == TYPE(DEPARE) && params.size())
|
||||
_type = SUBTYPE(DEPARE, depthLevel(params.at(0)));
|
||||
else if (type == TYPE(TSSLPT) && params.size())
|
||||
else if ((type == TYPE(TSSLPT) || type == TYPE(RCTLPT)) && params.size())
|
||||
_param = QVariant(params.at(0).toDouble());
|
||||
else if ((type == TYPE(BRIDGE) || type == TYPE(I_BRIDGE))
|
||||
&& params.size()) {
|
||||
@ -595,7 +597,9 @@ MapData::Attr MapData::pointAttr(const ISO8211::Record &r, uint OBJL)
|
||||
|| (OBJL == RDOCAL && key == ORIENT)
|
||||
|| (OBJL == I_RDOCAL && key == ORIENT)
|
||||
|| (OBJL == CURENT && key == ORIENT)
|
||||
|| (OBJL == LNDELV && key == ELEVAT))
|
||||
|| (OBJL == LNDELV && key == ELEVAT)
|
||||
|| (OBJL == TSSLPT && key == ORIENT)
|
||||
|| (OBJL == RCTLPT && key == ORIENT))
|
||||
params[0] = av.at(1).toByteArray();
|
||||
if ((OBJL == I_RDOCAL && key == COMCHA)
|
||||
|| (OBJL == RDOCAL && key == COMCHA)
|
||||
@ -668,6 +672,7 @@ MapData::Attr MapData::polyAttr(const ISO8211::Record &r, uint OBJL)
|
||||
}
|
||||
|
||||
if ((OBJL == TSSLPT && key == ORIENT)
|
||||
|| (OBJL == RCTLPT && key == ORIENT)
|
||||
|| (OBJL == DEPARE && key == DRVAL1))
|
||||
params[0] = av.at(1).toByteArray();
|
||||
if ((OBJL == BRIDGE && key == VERCLR)
|
||||
|
@ -67,6 +67,7 @@
|
||||
#define PONTON 95
|
||||
#define PRCARE 96
|
||||
#define PYLONS 98
|
||||
#define RADRFL 101
|
||||
#define RADSTA 102
|
||||
#define RTPBCN 103
|
||||
#define RDOCAL 104
|
||||
@ -74,6 +75,7 @@
|
||||
#define RAILWY 106
|
||||
#define RCRTCL 108
|
||||
#define RECTRC 109
|
||||
#define RCTLPT 110
|
||||
#define RSCSTA 111
|
||||
#define RESARE 112
|
||||
#define RIVERS 114
|
||||
|
@ -150,19 +150,42 @@ QPolygonF RasterTile::tsslptArrow(const QPointF &p, qreal angle) const
|
||||
return polygon;
|
||||
}
|
||||
|
||||
static void drawArrow(QPainter *painter, const QPolygonF &polygon, uint type)
|
||||
{
|
||||
if (type>>16 == RCTLPT) {
|
||||
painter->setPen(QPen(tsslptPen, 1, Qt::DashLine));
|
||||
painter->setBrush(Qt::NoBrush);
|
||||
} else {
|
||||
painter->setPen(QPen(tsslptPen, 1));
|
||||
painter->setBrush(QBrush(tsslptBrush));
|
||||
}
|
||||
painter->drawPolygon(polygon);
|
||||
}
|
||||
|
||||
void RasterTile::drawArrows(QPainter *painter,
|
||||
const QList<MapData::Poly> &polygons)
|
||||
{
|
||||
for (int i = 0; i < polygons.size(); i++) {
|
||||
const MapData::Poly &poly = polygons.at(i);
|
||||
|
||||
if (poly.type()>>16 == TSSLPT) {
|
||||
if (poly.type()>>16 == TSSLPT || poly.type()>>16 == RCTLPT) {
|
||||
QPolygonF polygon(tsslptArrow(centroid(poly.path().first()),
|
||||
deg2rad(poly.param().toDouble())));
|
||||
drawArrow(painter, polygon, poly.type());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
painter->setPen(QPen(tsslptPen, 1));
|
||||
painter->setBrush(QBrush(tsslptBrush));
|
||||
painter->drawPolygon(polygon);
|
||||
void RasterTile::drawArrows(QPainter *painter,
|
||||
const QList<MapData::Point> &points)
|
||||
{
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
const MapData::Point &point = points.at(i);
|
||||
|
||||
if (point.type()>>16 == TSSLPT || point.type()>>16 == RCTLPT) {
|
||||
QPolygonF polygon(tsslptArrow(ll2xy(point.pos()),
|
||||
deg2rad(point.param().toDouble())));
|
||||
drawArrow(painter, polygon, point.type());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -220,8 +243,13 @@ void RasterTile::drawLines(QPainter *painter, const QList<MapData::Line> &lines)
|
||||
void RasterTile::drawTextItems(QPainter *painter,
|
||||
const QList<TextItem*> &textItems)
|
||||
{
|
||||
for (int i = 0; i < textItems.size(); i++)
|
||||
textItems.at(i)->paint(painter);
|
||||
QRectF rect(_rect);
|
||||
|
||||
for (int i = 0; i < textItems.size(); i++) {
|
||||
const TextItem *ti = textItems.at(i);
|
||||
if (rect.intersects(ti->boundingRect()))
|
||||
ti->paint(painter);
|
||||
}
|
||||
}
|
||||
|
||||
void RasterTile::processPolygons(const QList<MapData::Poly> &polygons,
|
||||
@ -395,6 +423,7 @@ void RasterTile::render()
|
||||
drawPolygons(&painter, polygons);
|
||||
drawLines(&painter, lines);
|
||||
drawArrows(&painter, polygons);
|
||||
drawArrows(&painter, points);
|
||||
|
||||
drawTextItems(&painter, lights);
|
||||
drawTextItems(&painter, textItems);
|
||||
|
@ -52,6 +52,7 @@ private:
|
||||
void drawBitmapPath(QPainter *painter, const QImage &img,
|
||||
const Polygon &polygon);
|
||||
void drawArrows(QPainter *painter, const QList<MapData::Poly> &polygons);
|
||||
void drawArrows(QPainter *painter, const QList<MapData::Point> &points);
|
||||
void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons);
|
||||
void drawLines(QPainter *painter, const QList<MapData::Line> &lines);
|
||||
void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems);
|
||||
|
@ -335,6 +335,7 @@ void Style::pointStyle(qreal ratio)
|
||||
_points[SUBTYPE(WEDKLP, 0)] = Point(QImage(":/marine/kelp.png"));
|
||||
_points[SUBTYPE(WEDKLP, 1)] = Point(QImage(":/marine/kelp.png"));
|
||||
_points[TYPE(SEAARE)].setHaloColor(QColor());
|
||||
_points[TYPE(RADRFL)] = Point(QImage(":/marine/radar-reflector.png"));
|
||||
|
||||
_points[SUBTYPE(SMCFAC, 7)] = Point(svg2img(":/POI/restaurant-11.svg",
|
||||
ratio), Small);
|
||||
|
@ -146,7 +146,7 @@ int DEMFile::level(const Zoom &zoom) const
|
||||
}
|
||||
|
||||
MapData::Elevation *DEMFile::elevations(Handle &hdl, int level,
|
||||
const DEMTile *tile)
|
||||
const DEMTile *tile) const
|
||||
{
|
||||
const Level &l = _levels.at(level);
|
||||
MapData::Elevation *ele = new MapData::Elevation();
|
||||
|
@ -16,7 +16,8 @@ public:
|
||||
|
||||
bool load(Handle &hdl);
|
||||
void clear();
|
||||
MapData::Elevation *elevations(Handle &hdl, int level, const DEMTile *tile);
|
||||
MapData::Elevation *elevations(Handle &hdl, int level,
|
||||
const DEMTile *tile) const;
|
||||
|
||||
int level(const Zoom &zoom) const;
|
||||
QList<const DEMTile *> tiles(const RectC &rect, int level) const;
|
||||
@ -44,7 +45,7 @@ private:
|
||||
QList<DEMTile> tiles;
|
||||
};
|
||||
|
||||
qint16 meters(qint16 val)
|
||||
qint16 meters(qint16 val) const
|
||||
{
|
||||
return (_flags & 1) ? (qint16)qRound(val * 0.3048) : val;
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ bool GMAPData::loadTile(const QDir &dir)
|
||||
}
|
||||
}
|
||||
|
||||
if (!tile->init()) {
|
||||
if (!tile->init(0)) {
|
||||
qWarning("%s: Invalid map tile", qPrintable(dir.path()));
|
||||
delete tile;
|
||||
return false;
|
||||
|
@ -29,11 +29,11 @@ static SubFile::Type tileType(const char str[3])
|
||||
return SubFile::Unknown;
|
||||
}
|
||||
|
||||
bool IMGData::readSubFileBlocks(QFile &file, quint64 offset, SubFile *subFile)
|
||||
bool IMGData::readSubFileBlocks(QFile *file, quint64 offset, SubFile *subFile)
|
||||
{
|
||||
quint16 block;
|
||||
|
||||
if (!file.seek(offset + 0x20))
|
||||
if (!file->seek(offset + 0x20))
|
||||
return false;
|
||||
for (int i = 0; i < 240; i++) {
|
||||
if (!readValue(file, block))
|
||||
@ -46,11 +46,11 @@ bool IMGData::readSubFileBlocks(QFile &file, quint64 offset, SubFile *subFile)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IMGData::readIMGHeader(QFile &file)
|
||||
bool IMGData::readIMGHeader(QFile *file)
|
||||
{
|
||||
char signature[7], identifier[7];
|
||||
if (!(file.read((char*)&_key, 1) && file.seek(0x10)
|
||||
&& read(file, signature, sizeof(signature)) && file.seek(0x41)
|
||||
if (!(file->read((char*)&_key, 1) && file->seek(0x10)
|
||||
&& read(file, signature, sizeof(signature)) && file->seek(0x41)
|
||||
&& read(file, identifier, sizeof(identifier)))
|
||||
|| memcmp(signature, "DSKIMG", sizeof(signature))
|
||||
|| memcmp(identifier, "GARMIN", sizeof(identifier))) {
|
||||
@ -60,8 +60,8 @@ bool IMGData::readIMGHeader(QFile &file)
|
||||
|
||||
char d1[20], d2[31];
|
||||
quint8 e1, e2;
|
||||
if (!(file.seek(0x49) && read(file, d1, sizeof(d1)) && file.seek(0x61)
|
||||
&& readValue(file, e1) && readValue(file, e2) && file.seek(0x65)
|
||||
if (!(file->seek(0x49) && read(file, d1, sizeof(d1)) && file->seek(0x61)
|
||||
&& readValue(file, e1) && readValue(file, e2) && file->seek(0x65)
|
||||
&& read(file, d2, sizeof(d2)))) {
|
||||
_errorString = "Error reading IMG header";
|
||||
return false;
|
||||
@ -74,7 +74,7 @@ bool IMGData::readIMGHeader(QFile &file)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IMGData::readFAT(QFile &file, TileMap &tileMap)
|
||||
bool IMGData::readFAT(QFile *file, TileMap &tileMap)
|
||||
{
|
||||
QByteArray typFile;
|
||||
quint8 flag;
|
||||
@ -82,7 +82,7 @@ bool IMGData::readFAT(QFile &file, TileMap &tileMap)
|
||||
|
||||
// Skip unused FAT blocks if any
|
||||
while (true) {
|
||||
if (!(file.seek(offset) && readValue(file, flag)))
|
||||
if (!(file->seek(offset) && readValue(file, flag)))
|
||||
return false;
|
||||
if (flag)
|
||||
break;
|
||||
@ -93,14 +93,14 @@ bool IMGData::readFAT(QFile &file, TileMap &tileMap)
|
||||
char name[8], type[3];
|
||||
quint32 size;
|
||||
quint16 part;
|
||||
if (!(file.seek(offset + 12) && readValue(file, size)))
|
||||
if (!(file->seek(offset + 12) && readValue(file, size)))
|
||||
return false;
|
||||
offset += 512;
|
||||
int cnt = (size - offset) / 512;
|
||||
|
||||
// Read FAT blocks describing the IMG sub-files
|
||||
for (int i = 0; i < cnt; i++) {
|
||||
if (!(file.seek(offset) && readValue(file, flag)
|
||||
if (!(file->seek(offset) && readValue(file, flag)
|
||||
&& read(file, name, sizeof(name))
|
||||
&& read(file, type, sizeof(type)) && readValue(file, size)
|
||||
&& readValue(file, part)))
|
||||
@ -140,13 +140,13 @@ bool IMGData::readFAT(QFile &file, TileMap &tileMap)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IMGData::createTileTree(const TileMap &tileMap)
|
||||
bool IMGData::createTileTree(QFile *file, const TileMap &tileMap)
|
||||
{
|
||||
for (TileMap::const_iterator it = tileMap.constBegin();
|
||||
it != tileMap.constEnd(); ++it) {
|
||||
VectorTile *tile = it.value();
|
||||
|
||||
if (!tile->init()) {
|
||||
if (!tile->init(file)) {
|
||||
qWarning("%s: %s: Invalid map tile", qPrintable(_fileName),
|
||||
qPrintable(it.key()));
|
||||
delete tile;
|
||||
@ -177,14 +177,14 @@ IMGData::IMGData(const QString &fileName) : MapData(fileName)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!readIMGHeader(file))
|
||||
if (!readIMGHeader(&file))
|
||||
return;
|
||||
if (!readFAT(file, tileMap)) {
|
||||
if (!readFAT(&file, tileMap)) {
|
||||
_errorString = "Error reading FAT data";
|
||||
qDeleteAll(tileMap);
|
||||
return;
|
||||
}
|
||||
if (!createTileTree(tileMap)) {
|
||||
if (!createTileTree(&file, tileMap)) {
|
||||
_errorString = "No usable map tile found";
|
||||
return;
|
||||
}
|
||||
@ -194,16 +194,16 @@ IMGData::IMGData(const QString &fileName) : MapData(fileName)
|
||||
_valid = true;
|
||||
}
|
||||
|
||||
qint64 IMGData::read(QFile &file, char *data, qint64 maxSize) const
|
||||
qint64 IMGData::read(QFile *file, char *data, qint64 maxSize) const
|
||||
{
|
||||
qint64 ret = file.read(data, maxSize);
|
||||
qint64 ret = file->read(data, maxSize);
|
||||
if (_key)
|
||||
for (int i = 0; i < ret; i++)
|
||||
data[i] ^= _key;
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<class T> bool IMGData::readValue(QFile &file, T &val) const
|
||||
template<class T> bool IMGData::readValue(QFile *file, T &val) const
|
||||
{
|
||||
T data;
|
||||
|
||||
@ -215,9 +215,9 @@ template<class T> bool IMGData::readValue(QFile &file, T &val) const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IMGData::readBlock(QFile &file, int blockNum, char *data) const
|
||||
bool IMGData::readBlock(QFile *file, int blockNum, char *data) const
|
||||
{
|
||||
if (!file.seek((quint64)blockNum << _blockBits))
|
||||
if (!file->seek((quint64)blockNum << _blockBits))
|
||||
return false;
|
||||
if (read(file, data, 1ULL<<_blockBits) < (qint64)(1ULL<<_blockBits))
|
||||
return false;
|
||||
|
@ -13,17 +13,17 @@ public:
|
||||
IMGData(const QString &fileName);
|
||||
|
||||
unsigned blockBits() const {return _blockBits;}
|
||||
bool readBlock(QFile &file, int blockNum, char *data) const;
|
||||
bool readBlock(QFile *file, int blockNum, char *data) const;
|
||||
|
||||
private:
|
||||
typedef QMap<QByteArray, VectorTile*> TileMap;
|
||||
|
||||
qint64 read(QFile &file, char *data, qint64 maxSize) const;
|
||||
template<class T> bool readValue(QFile &file, T &val) const;
|
||||
bool readSubFileBlocks(QFile &file, quint64 offset, SubFile *subFile);
|
||||
bool readFAT(QFile &file, TileMap &tileMap);
|
||||
bool readIMGHeader(QFile &file);
|
||||
bool createTileTree(const TileMap &tileMap);
|
||||
qint64 read(QFile *file, char *data, qint64 maxSize) const;
|
||||
template<class T> bool readValue(QFile *file, T &val) const;
|
||||
bool readSubFileBlocks(QFile *file, quint64 offset, SubFile *subFile);
|
||||
bool readFAT(QFile *file, TileMap &tileMap);
|
||||
bool readIMGHeader(QFile *file);
|
||||
bool createTileTree(QFile *file, const TileMap &tileMap);
|
||||
|
||||
quint8 _key;
|
||||
unsigned _blockBits;
|
||||
|
@ -32,7 +32,8 @@ JLS::JLS(quint16 maxval, quint16 near)
|
||||
_limit = LIMIT - _qbpp - 1;
|
||||
}
|
||||
|
||||
bool JLS::processRunMode(BitStream &bs, quint16 col, quint16 &samples)
|
||||
bool JLS::processRunMode(BitStream &bs, Context &ctx, quint16 col,
|
||||
quint16 &samples) const
|
||||
{
|
||||
quint8 z;
|
||||
quint16 cnt = 0;
|
||||
@ -42,12 +43,12 @@ bool JLS::processRunMode(BitStream &bs, quint16 col, quint16 &samples)
|
||||
z = Z[(bs.value() >> 0x18) ^ 0xff];
|
||||
|
||||
for (quint8 i = 0; i < z; i++) {
|
||||
cnt = cnt + _rg;
|
||||
cnt = cnt + ctx.rg;
|
||||
|
||||
if (cnt <= col && _runIndex < 31) {
|
||||
_runIndex++;
|
||||
_rk = J[_runIndex];
|
||||
_rg = 1U << _rk;
|
||||
if (cnt <= col && ctx.runIndex < 31) {
|
||||
ctx.runIndex++;
|
||||
ctx.rk = J[ctx.runIndex];
|
||||
ctx.rg = 1U << ctx.rk;
|
||||
}
|
||||
|
||||
if (cnt >= col) {
|
||||
@ -65,18 +66,18 @@ bool JLS::processRunMode(BitStream &bs, quint16 col, quint16 &samples)
|
||||
if (!bs.read(z + 1))
|
||||
return false;
|
||||
|
||||
if (_rk) {
|
||||
samples = (bs.value() >> (32 - _rk)) + cnt;
|
||||
if (!bs.read(_rk))
|
||||
if (ctx.rk) {
|
||||
samples = (bs.value() >> (32 - ctx.rk)) + cnt;
|
||||
if (!bs.read(ctx.rk))
|
||||
return false;
|
||||
} else
|
||||
samples = cnt;
|
||||
|
||||
_lrk = _rk + 1;
|
||||
if (_runIndex != 0) {
|
||||
_runIndex--;
|
||||
_rk = J[_runIndex];
|
||||
_rg = 1U << _rk;
|
||||
ctx.lrk = ctx.rk + 1;
|
||||
if (ctx.runIndex != 0) {
|
||||
ctx.runIndex--;
|
||||
ctx.rk = J[ctx.runIndex];
|
||||
ctx.rg = 1U << ctx.rk;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -87,7 +88,8 @@ bool JLS::processRunMode(BitStream &bs, quint16 col, quint16 &samples)
|
||||
}
|
||||
}
|
||||
|
||||
bool JLS::decodeError(BitStream &bs, quint8 limit, quint8 k, uint &MErrval)
|
||||
bool JLS::decodeError(BitStream &bs, quint8 limit, quint8 k,
|
||||
uint &MErrval) const
|
||||
{
|
||||
quint8 cnt = 0;
|
||||
MErrval = 0;
|
||||
@ -122,19 +124,19 @@ bool JLS::decodeError(BitStream &bs, quint8 limit, quint8 k, uint &MErrval)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool JLS::readLine(BitStream &bs)
|
||||
bool JLS::readLine(BitStream &bs, Context &ctx) const
|
||||
{
|
||||
quint8 ictx, rctx;
|
||||
quint8 k;
|
||||
uint MErrval;
|
||||
int Errval;
|
||||
int Rx;
|
||||
int Ra = _last[1];
|
||||
int Rb = _last[1];
|
||||
int Rc = _last[0];
|
||||
int Ra = ctx.last[1];
|
||||
int Rb = ctx.last[1];
|
||||
int Rc = ctx.last[0];
|
||||
uint col = 1;
|
||||
|
||||
*_current = _last[1];
|
||||
*ctx.current = ctx.last[1];
|
||||
|
||||
do {
|
||||
if (abs(Rb - Ra) > _near) {
|
||||
@ -144,7 +146,7 @@ bool JLS::readLine(BitStream &bs)
|
||||
else if (Px > _maxval)
|
||||
Px = _maxval;
|
||||
|
||||
for (k = 0; _n[1] << k < _a[1]; k++)
|
||||
for (k = 0; ctx.n[1] << k < ctx.a[1]; k++)
|
||||
;
|
||||
|
||||
if (!decodeError(bs, _limit, k, MErrval))
|
||||
@ -158,7 +160,7 @@ bool JLS::readLine(BitStream &bs)
|
||||
meh = MErrval >> 1;
|
||||
mes = meh;
|
||||
}
|
||||
if ((_near == 0) && (k == 0) && (_b[1] * 2 <= -_n[1])) {
|
||||
if ((_near == 0) && (k == 0) && (ctx.b[1] * 2 <= -ctx.n[1])) {
|
||||
meh = mes + 1;
|
||||
mes = -mes - 1;
|
||||
if (MErrval & 1)
|
||||
@ -179,67 +181,67 @@ bool JLS::readLine(BitStream &bs)
|
||||
if (Rx > _maxval)
|
||||
Rx = _maxval;
|
||||
|
||||
_a[1] = _a[1] + meh;
|
||||
_b[1] = _b[1] + mes;
|
||||
if (_n[1] == 0x40) {
|
||||
_a[1] = _a[1] >> 1;
|
||||
if (_b[1] >= 0)
|
||||
_b[1] = _b[1] >> 1;
|
||||
ctx.a[1] = ctx.a[1] + meh;
|
||||
ctx.b[1] = ctx.b[1] + mes;
|
||||
if (ctx.n[1] == 0x40) {
|
||||
ctx.a[1] = ctx.a[1] >> 1;
|
||||
if (ctx.b[1] >= 0)
|
||||
ctx.b[1] = ctx.b[1] >> 1;
|
||||
else
|
||||
_b[1] = -((1 - _b[1]) >> 1);
|
||||
_n[1] = 0x21;
|
||||
ctx.b[1] = -((1 - ctx.b[1]) >> 1);
|
||||
ctx.n[1] = 0x21;
|
||||
} else
|
||||
_n[1] = _n[1] + 1;
|
||||
ctx.n[1] = ctx.n[1] + 1;
|
||||
|
||||
if (_b[1] <= -_n[1]) {
|
||||
_b[1] = _b[1] + _n[1];
|
||||
if (_b[1] <= -_n[1])
|
||||
_b[1] = 1 - _n[1];
|
||||
} else if (_b[1] > 0) {
|
||||
_b[1] = _b[1] - _n[1];
|
||||
if (_b[1] > 0)
|
||||
_b[1] = 0;
|
||||
if (ctx.b[1] <= -ctx.n[1]) {
|
||||
ctx.b[1] = ctx.b[1] + ctx.n[1];
|
||||
if (ctx.b[1] <= -ctx.n[1])
|
||||
ctx.b[1] = 1 - ctx.n[1];
|
||||
} else if (ctx.b[1] > 0) {
|
||||
ctx.b[1] = ctx.b[1] - ctx.n[1];
|
||||
if (ctx.b[1] > 0)
|
||||
ctx.b[1] = 0;
|
||||
}
|
||||
|
||||
Rc = Rb;
|
||||
Rb = _last[col + 1];
|
||||
Rb = ctx.last[col + 1];
|
||||
} else {
|
||||
quint16 samples;
|
||||
if (!processRunMode(bs, _w - col + 1, samples))
|
||||
if (!processRunMode(bs, ctx, ctx.w - col + 1, samples))
|
||||
return false;
|
||||
|
||||
if (samples != 0) {
|
||||
for (int i = 0; i < samples; i++) {
|
||||
if (col > _w)
|
||||
if (col > ctx.w)
|
||||
return false;
|
||||
_current[col] = Ra;
|
||||
ctx.current[col] = Ra;
|
||||
col++;
|
||||
}
|
||||
|
||||
if (col > _w)
|
||||
if (col > ctx.w)
|
||||
break;
|
||||
|
||||
Rc = _last[col];
|
||||
Rb = _last[col + 1];
|
||||
Rc = ctx.last[col];
|
||||
Rb = ctx.last[col + 1];
|
||||
} else {
|
||||
Rc = Rb;
|
||||
Rb = _last[col + 1];
|
||||
Rb = ctx.last[col + 1];
|
||||
}
|
||||
|
||||
rctx = (abs(Rc - Ra) <= _near);
|
||||
quint16 TEMP = _a[rctx + 2];
|
||||
quint16 TEMP = ctx.a[rctx + 2];
|
||||
if (rctx)
|
||||
TEMP += _n[rctx + 2] >> 1;
|
||||
TEMP += ctx.n[rctx + 2] >> 1;
|
||||
ictx = rctx | 2;
|
||||
|
||||
for (k = 0; _n[rctx + 2] << k < TEMP; k++)
|
||||
for (k = 0; ctx.n[rctx + 2] << k < TEMP; k++)
|
||||
;
|
||||
|
||||
if (!decodeError(bs, _limit - _lrk, k, MErrval))
|
||||
if (!decodeError(bs, _limit - ctx.lrk, k, MErrval))
|
||||
return false;
|
||||
|
||||
quint16 s = ((k == 0) && (rctx || MErrval)) ?
|
||||
(_b[ictx] * 2 < _n[ictx]) : 0;
|
||||
(ctx.b[ictx] * 2 < ctx.n[ictx]) : 0;
|
||||
|
||||
Errval = MErrval + rctx + s;
|
||||
int evh;
|
||||
@ -249,7 +251,7 @@ bool JLS::readLine(BitStream &bs)
|
||||
} else {
|
||||
Errval = s - ((Errval + 1) >> 1);
|
||||
evh = -Errval;
|
||||
_b[ictx] = _b[ictx] + 1;
|
||||
ctx.b[ictx] = ctx.b[ictx] + 1;
|
||||
}
|
||||
|
||||
Errval *= (_near * 2 + 1);
|
||||
@ -274,59 +276,45 @@ bool JLS::readLine(BitStream &bs)
|
||||
if (Rx > _maxval)
|
||||
Rx = _maxval;
|
||||
|
||||
_a[ictx] = _a[ictx] + (evh - rctx);
|
||||
if (_n[ictx] == 0x40) {
|
||||
_a[ictx] = _a[ictx] >> 1;
|
||||
if (_b[ictx] >= 0)
|
||||
_b[ictx] = _b[ictx] >> 1;
|
||||
ctx.a[ictx] = ctx.a[ictx] + (evh - rctx);
|
||||
if (ctx.n[ictx] == 0x40) {
|
||||
ctx.a[ictx] = ctx.a[ictx] >> 1;
|
||||
if (ctx.b[ictx] >= 0)
|
||||
ctx.b[ictx] = ctx.b[ictx] >> 1;
|
||||
else
|
||||
_b[ictx] = -((1 - _b[ictx]) >> 1);
|
||||
_n[ictx] = 0x21;
|
||||
ctx.b[ictx] = -((1 - ctx.b[ictx]) >> 1);
|
||||
ctx.n[ictx] = 0x21;
|
||||
} else
|
||||
_n[ictx] = _n[ictx] + 1;
|
||||
ctx.n[ictx] = ctx.n[ictx] + 1;
|
||||
}
|
||||
|
||||
_current[col] = Rx;
|
||||
ctx.current[col] = Rx;
|
||||
|
||||
Ra = Rx;
|
||||
col = col + 1;
|
||||
} while (col <= _w);
|
||||
} while (col <= ctx.w);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool JLS::decode(const SubFile *file, SubFile::Handle &hdl, Matrix<qint16> &img)
|
||||
bool JLS::decode(const SubFile *file, SubFile::Handle &hdl,
|
||||
Matrix<qint16> &img) const
|
||||
{
|
||||
Context ctx(img.w(), _range);
|
||||
BitStream bs(file, hdl);
|
||||
|
||||
if (!bs.init())
|
||||
return false;
|
||||
|
||||
_w = img.w();
|
||||
_data = QVector<quint16>((_w + 3) * 2);
|
||||
_last = _data.data();
|
||||
_current = _data.data() + (_w + 3);
|
||||
|
||||
_runIndex = 0;
|
||||
_rk = 0;
|
||||
_rg = 1;
|
||||
_lrk = 0;
|
||||
|
||||
quint16 A = qMax(2, (_range + 32) / 64);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
_a[i] = A;
|
||||
_b[i] = 0;
|
||||
_n[i] = 1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < img.h(); i++) {
|
||||
if (!readLine(bs))
|
||||
if (!readLine(bs, ctx))
|
||||
return false;
|
||||
|
||||
memcpy(img.row(i), _current + 1, _w * sizeof(quint16));
|
||||
memcpy(img.row(i), ctx.current + 1, img.w() * sizeof(quint16));
|
||||
|
||||
quint16 *tmp = _last;
|
||||
_last = _current;
|
||||
_current = tmp;
|
||||
quint16 *tmp = ctx.last;
|
||||
ctx.last = ctx.current;
|
||||
ctx.current = tmp;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -12,7 +12,8 @@ class JLS
|
||||
public:
|
||||
JLS(quint16 maxval, quint16 near);
|
||||
|
||||
bool decode(const SubFile *file, SubFile::Handle &hdl, Matrix<qint16> &img);
|
||||
bool decode(const SubFile *file, SubFile::Handle &hdl,
|
||||
Matrix<qint16> &img) const;
|
||||
|
||||
private:
|
||||
class BitStream
|
||||
@ -56,28 +57,48 @@ private:
|
||||
qint8 _shift;
|
||||
};
|
||||
|
||||
bool readLine(BitStream &bs);
|
||||
bool processRunMode(BitStream &bs, quint16 col, quint16 &samples);
|
||||
bool decodeError(BitStream &bs, quint8 limit, quint8 k, uint &MErrval);
|
||||
struct Context
|
||||
{
|
||||
Context(quint16 width, quint16 range)
|
||||
: data(QVector<quint16>((width + 3) * 2)), w(width), rg(1),
|
||||
runIndex(0), rk(0), lrk(0)
|
||||
{
|
||||
quint16 A = qMax(2, (range + 32) / 64);
|
||||
|
||||
last = data.data();
|
||||
current = data.data() + (w + 3);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
a[i] = A;
|
||||
b[i] = 0;
|
||||
n[i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
QVector<quint16> data;
|
||||
quint16 *current;
|
||||
quint16 *last;
|
||||
quint16 w;
|
||||
quint16 rg;
|
||||
quint16 n[4];
|
||||
quint16 a[4];
|
||||
qint16 b[4];
|
||||
quint8 runIndex;
|
||||
quint8 rk;
|
||||
quint8 lrk;
|
||||
};
|
||||
|
||||
bool readLine(BitStream &bs, Context &ctx) const;
|
||||
bool processRunMode(BitStream &bs, Context &ctx, quint16 col,
|
||||
quint16 &samples) const;
|
||||
bool decodeError(BitStream &bs, quint8 limit, quint8 k,
|
||||
uint &MErrval) const;
|
||||
|
||||
quint16 _maxval;
|
||||
quint16 _near;
|
||||
quint16 _range;
|
||||
quint8 _qbpp;
|
||||
quint8 _limit;
|
||||
|
||||
quint8 _runIndex;
|
||||
quint8 _rk;
|
||||
quint16 _rg;
|
||||
quint16 _n[4];
|
||||
quint16 _a[4];
|
||||
qint16 _b[4];
|
||||
quint8 _lrk;
|
||||
|
||||
quint16 _w;
|
||||
QVector<quint16> _data;
|
||||
quint16 *_current;
|
||||
quint16 *_last;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ using namespace IMG;
|
||||
bool MapData::polyCb(VectorTile *tile, void *context)
|
||||
{
|
||||
PolyCTX *ctx = (PolyCTX*)context;
|
||||
tile->polys(ctx->rect, ctx->zoom, ctx->polygons, ctx->lines,
|
||||
tile->polys(ctx->file, ctx->rect, ctx->zoom, ctx->polygons, ctx->lines,
|
||||
ctx->cache, ctx->lock);
|
||||
return true;
|
||||
}
|
||||
@ -21,14 +21,16 @@ bool MapData::polyCb(VectorTile *tile, void *context)
|
||||
bool MapData::pointCb(VectorTile *tile, void *context)
|
||||
{
|
||||
PointCTX *ctx = (PointCTX*)context;
|
||||
tile->points(ctx->rect, ctx->zoom, ctx->points, ctx->cache, ctx->lock);
|
||||
tile->points(ctx->file, ctx->rect, ctx->zoom, ctx->points, ctx->cache,
|
||||
ctx->lock);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MapData::elevationCb(VectorTile *tile, void *context)
|
||||
{
|
||||
ElevationCTX *ctx = (ElevationCTX*)context;
|
||||
tile->elevations(ctx->rect, ctx->zoom, ctx->elevations, ctx->cache, ctx->lock);
|
||||
tile->elevations(ctx->file, ctx->rect, ctx->zoom, ctx->elevations,
|
||||
ctx->cache, ctx->lock);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -50,10 +52,10 @@ MapData::~MapData()
|
||||
delete _style;
|
||||
}
|
||||
|
||||
void MapData::polys(const RectC &rect, int bits, QList<Poly> *polygons,
|
||||
QList<Poly> *lines)
|
||||
void MapData::polys(QFile *file, const RectC &rect, int bits,
|
||||
QList<Poly> *polygons, QList<Poly> *lines)
|
||||
{
|
||||
PolyCTX ctx(rect, zoom(bits), polygons, lines, &_polyCache, &_lock);
|
||||
PolyCTX ctx(file, rect, zoom(bits), polygons, lines, &_polyCache, &_lock);
|
||||
double min[2], max[2];
|
||||
|
||||
min[0] = rect.left();
|
||||
@ -64,9 +66,10 @@ void MapData::polys(const RectC &rect, int bits, QList<Poly> *polygons,
|
||||
_tileTree.Search(min, max, polyCb, &ctx);
|
||||
}
|
||||
|
||||
void MapData::points(const RectC &rect, int bits, QList<Point> *points)
|
||||
void MapData::points(QFile *file, const RectC &rect, int bits,
|
||||
QList<Point> *points)
|
||||
{
|
||||
PointCTX ctx(rect, zoom(bits), points, &_pointCache, &_lock);
|
||||
PointCTX ctx(file, rect, zoom(bits), points, &_pointCache, &_lock);
|
||||
double min[2], max[2];
|
||||
|
||||
min[0] = rect.left();
|
||||
@ -77,9 +80,10 @@ void MapData::points(const RectC &rect, int bits, QList<Point> *points)
|
||||
_tileTree.Search(min, max, pointCb, &ctx);
|
||||
}
|
||||
|
||||
void MapData::elevations(const RectC &rect, int bits, QList<Elevation> *elevations)
|
||||
void MapData::elevations(QFile *file, const RectC &rect, int bits,
|
||||
QList<Elevation> *elevations)
|
||||
{
|
||||
ElevationCTX ctx(rect, zoom(bits), elevations, &_demCache, &_demLock);
|
||||
ElevationCTX ctx(file, rect, zoom(bits), elevations, &_demCache, &_demLock);
|
||||
double min[2], max[2];
|
||||
|
||||
min[0] = rect.left();
|
||||
@ -95,14 +99,14 @@ void MapData::load(qreal ratio)
|
||||
Q_ASSERT(!_style);
|
||||
|
||||
if (_typ)
|
||||
_style = new Style(ratio, _typ);
|
||||
_style = new Style(0, ratio, _typ);
|
||||
else {
|
||||
QString typFile(ProgramPaths::typFile());
|
||||
if (QFileInfo::exists(typFile)) {
|
||||
SubFile typ(&typFile);
|
||||
_style = new Style(ratio, &typ);
|
||||
_style = new Style(0, ratio, &typ);
|
||||
} else
|
||||
_style = new Style(ratio);
|
||||
_style = new Style(0, ratio);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <QPointF>
|
||||
#include <QCache>
|
||||
#include <QMutex>
|
||||
#include <QFile>
|
||||
#include <QDebug>
|
||||
#include "common/rectc.h"
|
||||
#include "common/rtree.h"
|
||||
@ -77,10 +78,11 @@ public:
|
||||
const RectC &bounds() const {return _bounds;}
|
||||
const Range &zooms() const {return _zoomLevels;}
|
||||
const Style *style() const {return _style;}
|
||||
void polys(const RectC &rect, int bits, QList<Poly> *polygons,
|
||||
void polys(QFile *file, const RectC &rect, int bits, QList<Poly> *polygons,
|
||||
QList<Poly> *lines);
|
||||
void points(const RectC &rect, int bits, QList<Point> *points);
|
||||
void elevations(const RectC &rect, int bits, QList<Elevation> *elevations);
|
||||
void points(QFile *file, const RectC &rect, int bits, QList<Point> *points);
|
||||
void elevations(QFile *file, const RectC &rect, int bits,
|
||||
QList<Elevation> *elevations);
|
||||
|
||||
void load(qreal ratio);
|
||||
void clear();
|
||||
@ -122,12 +124,13 @@ private:
|
||||
|
||||
struct PolyCTX
|
||||
{
|
||||
PolyCTX(const RectC &rect, const Zoom &zoom,
|
||||
PolyCTX(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Poly> *polygons, QList<MapData::Poly> *lines,
|
||||
PolyCache *cache, QMutex *lock)
|
||||
: rect(rect), zoom(zoom), polygons(polygons), lines(lines),
|
||||
cache(cache), lock(lock) {}
|
||||
: file(file), rect(rect), zoom(zoom), polygons(polygons),
|
||||
lines(lines), cache(cache), lock(lock) {}
|
||||
|
||||
QFile *file;
|
||||
const RectC ▭
|
||||
const Zoom &zoom;
|
||||
QList<MapData::Poly> *polygons;
|
||||
@ -138,10 +141,12 @@ private:
|
||||
|
||||
struct PointCTX
|
||||
{
|
||||
PointCTX(const RectC &rect, const Zoom &zoom,
|
||||
PointCTX(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Point> *points, PointCache *cache, QMutex *lock)
|
||||
: rect(rect), zoom(zoom), points(points), cache(cache), lock(lock) {}
|
||||
: file(file), rect(rect), zoom(zoom), points(points), cache(cache),
|
||||
lock(lock) {}
|
||||
|
||||
QFile *file;
|
||||
const RectC ▭
|
||||
const Zoom &zoom;
|
||||
QList<MapData::Point> *points;
|
||||
@ -151,11 +156,12 @@ private:
|
||||
|
||||
struct ElevationCTX
|
||||
{
|
||||
ElevationCTX(const RectC &rect, const Zoom &zoom,
|
||||
ElevationCTX(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<Elevation> *elevations, ElevationCache *cache, QMutex *lock)
|
||||
: rect(rect), zoom(zoom), elevations(elevations), cache(cache),
|
||||
lock(lock) {}
|
||||
: file(file), rect(rect), zoom(zoom), elevations(elevations),
|
||||
cache(cache), lock(lock) {}
|
||||
|
||||
QFile *file;
|
||||
const RectC ▭
|
||||
const Zoom &zoom;
|
||||
QList<Elevation> *elevations;
|
||||
|
@ -152,7 +152,7 @@ void RasterTile::drawPolygons(QPainter *painter,
|
||||
bool insert = false;
|
||||
SubFile::Handle *hdl = hc.object(poly.raster.lbl());
|
||||
if (!hdl) {
|
||||
hdl = new SubFile::Handle(poly.raster.lbl());
|
||||
hdl = new SubFile::Handle(_file, poly.raster.lbl());
|
||||
insert = true;
|
||||
}
|
||||
QPixmap pm(poly.raster.lbl()->image(*hdl, poly.raster.id()));
|
||||
@ -217,8 +217,13 @@ void RasterTile::drawLines(QPainter *painter,
|
||||
void RasterTile::drawTextItems(QPainter *painter,
|
||||
const QList<TextItem*> &textItems) const
|
||||
{
|
||||
for (int i = 0; i < textItems.size(); i++)
|
||||
textItems.at(i)->paint(painter);
|
||||
QRectF rect(_rect);
|
||||
|
||||
for (int i = 0; i < textItems.size(); i++) {
|
||||
const TextItem *ti = textItems.at(i);
|
||||
if (rect.intersects(ti->boundingRect()))
|
||||
ti->paint(painter);
|
||||
}
|
||||
}
|
||||
|
||||
static void removeDuplicitLabel(QList<TextItem *> &labels, const QString &text,
|
||||
@ -438,11 +443,16 @@ void RasterTile::fetchData(QList<MapData::Poly> &polygons,
|
||||
{
|
||||
QPoint ttl(_rect.topLeft());
|
||||
|
||||
if (dynamic_cast<IMGData*>(_data)) {
|
||||
_file = new QFile(_data->fileName());
|
||||
_file->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
|
||||
}
|
||||
|
||||
QRectF polyRect(ttl, QPointF(ttl.x() + _rect.width(), ttl.y()
|
||||
+ _rect.height()));
|
||||
RectD polyRectD(_transform.img2proj(polyRect.topLeft()),
|
||||
_transform.img2proj(polyRect.bottomRight()));
|
||||
_data->polys(polyRectD.toRectC(_proj, 20), _zoom,
|
||||
_data->polys(_file, polyRectD.toRectC(_proj, 20), _zoom,
|
||||
&polygons, _vectors ? &lines : 0);
|
||||
|
||||
if (_vectors) {
|
||||
@ -451,7 +461,7 @@ void RasterTile::fetchData(QList<MapData::Poly> &polygons,
|
||||
+ TEXT_EXTENT));
|
||||
RectD pointRectD(_transform.img2proj(pointRect.topLeft()),
|
||||
_transform.img2proj(pointRect.bottomRight()));
|
||||
_data->points(pointRectD.toRectC(_proj, 20), _zoom, &points);
|
||||
_data->points(_file, pointRectD.toRectC(_proj, 20), _zoom, &points);
|
||||
}
|
||||
}
|
||||
|
||||
@ -476,7 +486,7 @@ MatrixD RasterTile::elevation(int extend) const
|
||||
// Extra margin for always including the next DEM tile on the map tile
|
||||
// edges (the DEM tile resolution is usally 0.5-15% of the map tile)
|
||||
double factor = 6 - (_zoom - 24) * 1.7;
|
||||
_data->elevations(rect.adjusted(0, 0, rect.width() / factor,
|
||||
_data->elevations(_file, rect.adjusted(0, 0, rect.width() / factor,
|
||||
-rect.height() / factor), _zoom, &tiles);
|
||||
|
||||
DEMTree tree(tiles);
|
||||
|
@ -22,7 +22,8 @@ public:
|
||||
bool hillShading, bool rasters, bool vectors)
|
||||
: _proj(proj), _transform(transform), _data(data), _zoom(zoom),
|
||||
_rect(rect), _ratio(ratio), _key(key), _hillShading(hillShading),
|
||||
_rasters(rasters), _vectors(vectors) {}
|
||||
_rasters(rasters), _vectors(vectors), _file(0) {}
|
||||
~RasterTile() {delete _file;}
|
||||
|
||||
const QString &key() const {return _key;}
|
||||
QPoint xy() const {return _rect.topLeft();}
|
||||
@ -88,6 +89,7 @@ private:
|
||||
QPixmap _pixmap;
|
||||
bool _hillShading;
|
||||
bool _rasters, _vectors;
|
||||
QFile *_file;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -1268,50 +1268,50 @@ bool Style::parseDrawOrder(SubFile *file, SubFile::Handle &hdl,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Style::parseTYPFile(SubFile *file)
|
||||
bool Style::parseTYPFile(QFile *file, SubFile *typ)
|
||||
{
|
||||
SubFile::Handle hdl(file);
|
||||
SubFile::Handle hdl(file, typ);
|
||||
Section points, lines, polygons, order;
|
||||
quint16 tmp16, codepage;
|
||||
|
||||
if (!(file->seek(hdl, 0x15) && file->readUInt16(hdl, codepage)
|
||||
&& file->readUInt32(hdl, points.offset)
|
||||
&& file->readUInt32(hdl, points.size)
|
||||
&& file->readUInt32(hdl, lines.offset)
|
||||
&& file->readUInt32(hdl, lines.size)
|
||||
&& file->readUInt32(hdl, polygons.offset)
|
||||
&& file->readUInt32(hdl, polygons.size)))
|
||||
if (!(typ->seek(hdl, 0x15) && typ->readUInt16(hdl, codepage)
|
||||
&& typ->readUInt32(hdl, points.offset)
|
||||
&& typ->readUInt32(hdl, points.size)
|
||||
&& typ->readUInt32(hdl, lines.offset)
|
||||
&& typ->readUInt32(hdl, lines.size)
|
||||
&& typ->readUInt32(hdl, polygons.offset)
|
||||
&& typ->readUInt32(hdl, polygons.size)))
|
||||
return false;
|
||||
|
||||
if (!(file->readUInt16(hdl, tmp16) && file->readUInt16(hdl, tmp16)))
|
||||
if (!(typ->readUInt16(hdl, tmp16) && typ->readUInt16(hdl, tmp16)))
|
||||
return false;
|
||||
|
||||
if (!(file->readUInt32(hdl, points.arrayOffset)
|
||||
&& file->readUInt16(hdl, points.arrayItemSize)
|
||||
&& file->readUInt32(hdl, points.arraySize)
|
||||
&& file->readUInt32(hdl, lines.arrayOffset)
|
||||
&& file->readUInt16(hdl, lines.arrayItemSize)
|
||||
&& file->readUInt32(hdl, lines.arraySize)
|
||||
&& file->readUInt32(hdl, polygons.arrayOffset)
|
||||
&& file->readUInt16(hdl, polygons.arrayItemSize)
|
||||
&& file->readUInt32(hdl, polygons.arraySize)
|
||||
&& file->readUInt32(hdl, order.arrayOffset)
|
||||
&& file->readUInt16(hdl, order.arrayItemSize)
|
||||
&& file->readUInt32(hdl, order.arraySize)))
|
||||
if (!(typ->readUInt32(hdl, points.arrayOffset)
|
||||
&& typ->readUInt16(hdl, points.arrayItemSize)
|
||||
&& typ->readUInt32(hdl, points.arraySize)
|
||||
&& typ->readUInt32(hdl, lines.arrayOffset)
|
||||
&& typ->readUInt16(hdl, lines.arrayItemSize)
|
||||
&& typ->readUInt32(hdl, lines.arraySize)
|
||||
&& typ->readUInt32(hdl, polygons.arrayOffset)
|
||||
&& typ->readUInt16(hdl, polygons.arrayItemSize)
|
||||
&& typ->readUInt32(hdl, polygons.arraySize)
|
||||
&& typ->readUInt32(hdl, order.arrayOffset)
|
||||
&& typ->readUInt16(hdl, order.arrayItemSize)
|
||||
&& typ->readUInt32(hdl, order.arraySize)))
|
||||
return false;
|
||||
|
||||
if (!(parsePoints(file, hdl, points) && parseLines(file, hdl, lines)
|
||||
&& parsePolygons(file, hdl, polygons)
|
||||
&& parseDrawOrder(file, hdl, order))) {
|
||||
if (!(parsePoints(typ, hdl, points) && parseLines(typ, hdl, lines)
|
||||
&& parsePolygons(typ, hdl, polygons)
|
||||
&& parseDrawOrder(typ, hdl, order))) {
|
||||
qWarning("%s: Invalid TYP file, using default style",
|
||||
qPrintable(file->fileName()));
|
||||
qPrintable(typ->fileName()));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Style::Style(qreal ratio, SubFile *typ)
|
||||
Style::Style(QFile *file, qreal ratio, SubFile *typ)
|
||||
{
|
||||
_large = pixelSizeFont(16);
|
||||
_normal = pixelSizeFont(14);
|
||||
@ -1326,7 +1326,7 @@ Style::Style(qreal ratio, SubFile *typ)
|
||||
defaultPointStyle(ratio);
|
||||
|
||||
if (typ)
|
||||
parseTYPFile(typ);
|
||||
parseTYPFile(file, typ);
|
||||
}
|
||||
|
||||
const Style::Line &Style::line(quint32 type) const
|
||||
|
@ -104,7 +104,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
Style(qreal ratio, SubFile *typ = 0);
|
||||
Style(QFile *file, qreal ratio, SubFile *typ = 0);
|
||||
|
||||
const Line &line(quint32 type) const;
|
||||
const Polygon &polygon(quint32 type) const;
|
||||
@ -171,7 +171,7 @@ private:
|
||||
bool extended;
|
||||
};
|
||||
|
||||
bool parseTYPFile(SubFile *file);
|
||||
bool parseTYPFile(QFile *file, SubFile *typ);
|
||||
bool parsePoints(SubFile *file, SubFile::Handle &hdl,
|
||||
const Section §ion);
|
||||
bool parsePoint(SubFile *file, SubFile::Handle &hdl,
|
||||
|
@ -27,9 +27,9 @@ bool SubFile::seek(Handle &handle, quint32 pos) const
|
||||
int blockNum = pos >> BLOCK_BITS;
|
||||
|
||||
if (handle._blockNum != blockNum) {
|
||||
if (!handle._file.seek((quint64)blockNum << BLOCK_BITS))
|
||||
if (!handle._file->seek((quint64)blockNum << BLOCK_BITS))
|
||||
return false;
|
||||
if (handle._file.read(handle._data.data(), (1<<BLOCK_BITS)) < 0)
|
||||
if (handle._file->read(handle._data.data(), (1<<BLOCK_BITS)) < 0)
|
||||
return false;
|
||||
handle._blockNum = blockNum;
|
||||
}
|
||||
|
@ -18,25 +18,34 @@ public:
|
||||
class Handle
|
||||
{
|
||||
public:
|
||||
Handle(const SubFile *subFile)
|
||||
: _blockNum(-1), _blockPos(-1), _pos(-1)
|
||||
Handle(QFile *file, const SubFile *subFile)
|
||||
: _file(file), _blockNum(-1), _blockPos(-1), _pos(-1), _delete(false)
|
||||
{
|
||||
if (!subFile)
|
||||
return;
|
||||
|
||||
if (!_file) {
|
||||
_file = new QFile(subFile->fileName());
|
||||
_file->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
|
||||
_delete = true;
|
||||
}
|
||||
_data.resize(subFile->blockSize());
|
||||
_file.setFileName(subFile->fileName());
|
||||
_file.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
|
||||
}
|
||||
~Handle()
|
||||
{
|
||||
if (_delete)
|
||||
delete _file;
|
||||
}
|
||||
|
||||
private:
|
||||
friend class SubFile;
|
||||
|
||||
QFile _file;
|
||||
QFile *_file;
|
||||
QByteArray _data;
|
||||
int _blockNum;
|
||||
int _blockPos;
|
||||
int _pos;
|
||||
bool _delete;
|
||||
};
|
||||
|
||||
SubFile(const IMGData *img)
|
||||
|
@ -49,9 +49,9 @@ TREFile::~TREFile()
|
||||
clear();
|
||||
}
|
||||
|
||||
bool TREFile::init()
|
||||
bool TREFile::init(QFile *file)
|
||||
{
|
||||
Handle hdl(this);
|
||||
Handle hdl(file, this);
|
||||
quint8 locked, levels[64];
|
||||
quint16 hdrLen;
|
||||
qint32 north, east, south, west;
|
||||
@ -154,9 +154,9 @@ int TREFile::readExtEntry(Handle &hdl, quint32 &polygons, quint32 &lines,
|
||||
return rb;
|
||||
}
|
||||
|
||||
bool TREFile::load(int idx)
|
||||
bool TREFile::load(QFile *file, int idx)
|
||||
{
|
||||
Handle hdl(this);
|
||||
Handle hdl(file, this);
|
||||
QList<SubDiv*> sl;
|
||||
SubDiv *s = 0;
|
||||
SubDivTree *tree = new SubDivTree();
|
||||
@ -282,7 +282,7 @@ void TREFile::clear()
|
||||
_subdivs.clear();
|
||||
}
|
||||
|
||||
const TREFile::SubDivTree *TREFile::subdivs(const Zoom &zoom)
|
||||
const TREFile::SubDivTree *TREFile::subdivs(QFile *file, const Zoom &zoom)
|
||||
{
|
||||
int idx = -1;
|
||||
|
||||
@ -296,7 +296,7 @@ const TREFile::SubDivTree *TREFile::subdivs(const Zoom &zoom)
|
||||
if (idx < 0)
|
||||
return 0;
|
||||
|
||||
if (!_subdivs.contains(_levels.at(idx).level) && !load(idx))
|
||||
if (!_subdivs.contains(_levels.at(idx).level) && !load(file, idx))
|
||||
return 0;
|
||||
|
||||
return _subdivs.value(_levels.at(idx).level);
|
||||
@ -309,10 +309,10 @@ static bool cb(SubDiv *subdiv, void *context)
|
||||
return true;
|
||||
}
|
||||
|
||||
QList<SubDiv*> TREFile::subdivs(const RectC &rect, const Zoom &zoom)
|
||||
QList<SubDiv*> TREFile::subdivs(QFile *file, const RectC &rect, const Zoom &zoom)
|
||||
{
|
||||
QList<SubDiv*> list;
|
||||
const SubDivTree *tree = subdivs(zoom);
|
||||
const SubDivTree *tree = subdivs(file, zoom);
|
||||
double min[2], max[2];
|
||||
|
||||
min[0] = rect.left();
|
||||
|
@ -24,11 +24,11 @@ public:
|
||||
: SubFile(gmp, offset), _flags(0), _extItemSize(0) {}
|
||||
~TREFile();
|
||||
|
||||
bool init();
|
||||
bool init(QFile *file);
|
||||
void clear();
|
||||
|
||||
const RectC &bounds() const {return _bounds;}
|
||||
QList<SubDiv*> subdivs(const RectC &rect, const Zoom &zoom);
|
||||
QList<SubDiv*> subdivs(QFile *file, const RectC &rect, const Zoom &zoom);
|
||||
quint32 shift(quint8 bits) const
|
||||
{return (bits == _levels.last().bits) ? (_flags >> 0xb) & 7 : 0;}
|
||||
QVector<Zoom> zooms() const;
|
||||
@ -41,8 +41,8 @@ private:
|
||||
};
|
||||
typedef RTree<SubDiv*, double, 2> SubDivTree;
|
||||
|
||||
bool load(int idx);
|
||||
const SubDivTree *subdivs(const Zoom &zoom);
|
||||
bool load(QFile *file, int idx);
|
||||
const SubDivTree *subdivs(QFile *file, const Zoom &zoom);
|
||||
int readExtEntry(Handle &hdl, quint32 &polygons, quint32 &lines,
|
||||
quint32 &points);
|
||||
|
||||
|
@ -40,20 +40,20 @@ SubFile *VectorTile::file(SubFile::Type type)
|
||||
}
|
||||
}
|
||||
|
||||
bool VectorTile::init()
|
||||
bool VectorTile::init(QFile *file)
|
||||
{
|
||||
if (_gmp && !initGMP())
|
||||
if (_gmp && !initGMP(file))
|
||||
return false;
|
||||
|
||||
if (!(_tre && _tre->init() && _rgn))
|
||||
if (!(_tre && _tre->init(file) && _rgn))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool VectorTile::initGMP()
|
||||
bool VectorTile::initGMP(QFile *file)
|
||||
{
|
||||
SubFile::Handle hdl(_gmp);
|
||||
SubFile::Handle hdl(file, _gmp);
|
||||
quint32 tre, rgn, lbl, net, nod, dem;
|
||||
|
||||
if (!(_gmp->seek(hdl, 0x19) && _gmp->readUInt32(hdl, tre)
|
||||
@ -118,49 +118,56 @@ void VectorTile::clear()
|
||||
_demLoaded = 0;
|
||||
}
|
||||
|
||||
void VectorTile::polys(const RectC &rect, const Zoom &zoom,
|
||||
void VectorTile::polys(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Poly> *polygons, QList<MapData::Poly> *lines,
|
||||
MapData::PolyCache *cache, QMutex *lock)
|
||||
MapData::PolyCache *cache, QMutex *cacheLock)
|
||||
{
|
||||
SubFile::Handle *rgnHdl = 0, *lblHdl = 0, *netHdl = 0, *nodHdl = 0,
|
||||
*nodHdl2 = 0;
|
||||
|
||||
lock->lock();
|
||||
_lock.lock();
|
||||
|
||||
if (_loaded < 0) {
|
||||
lock->unlock();
|
||||
_lock.unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_loaded) {
|
||||
rgnHdl = new SubFile::Handle(_rgn);
|
||||
lblHdl = new SubFile::Handle(_lbl);
|
||||
netHdl = new SubFile::Handle(_net);
|
||||
nodHdl = new SubFile::Handle(_nod);
|
||||
rgnHdl = new SubFile::Handle(file, _rgn);
|
||||
lblHdl = new SubFile::Handle(file, _lbl);
|
||||
netHdl = new SubFile::Handle(file, _net);
|
||||
nodHdl = new SubFile::Handle(file, _nod);
|
||||
|
||||
if (!load(*rgnHdl, *lblHdl, *netHdl, *nodHdl)) {
|
||||
lock->unlock();
|
||||
_lock.unlock();
|
||||
delete rgnHdl; delete lblHdl; delete netHdl; delete nodHdl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
QList<SubDiv*> subdivs = _tre->subdivs(rect, zoom);
|
||||
QList<SubDiv*> subdivs = _tre->subdivs(file, rect, zoom);
|
||||
|
||||
cacheLock->lock();
|
||||
|
||||
for (int i = 0; i < subdivs.size(); i++) {
|
||||
SubDiv *subdiv = subdivs.at(i);
|
||||
|
||||
MapData::Polys *polys = cache->object(subdiv);
|
||||
if (!polys) {
|
||||
cacheLock->unlock();
|
||||
|
||||
quint32 shift = _tre->shift(subdiv->bits());
|
||||
|
||||
if (!rgnHdl) {
|
||||
rgnHdl = new SubFile::Handle(_rgn);
|
||||
lblHdl = new SubFile::Handle(_lbl);
|
||||
netHdl = new SubFile::Handle(_net);
|
||||
rgnHdl = new SubFile::Handle(file, _rgn);
|
||||
lblHdl = new SubFile::Handle(file, _lbl);
|
||||
netHdl = new SubFile::Handle(file, _net);
|
||||
}
|
||||
|
||||
if (!subdiv->initialized() && !_rgn->subdivInit(*rgnHdl, subdiv))
|
||||
if (!subdiv->initialized() && !_rgn->subdivInit(*rgnHdl, subdiv)) {
|
||||
cacheLock->lock();
|
||||
continue;
|
||||
}
|
||||
|
||||
polys = new MapData::Polys();
|
||||
|
||||
@ -175,9 +182,9 @@ void VectorTile::polys(const RectC &rect, const Zoom &zoom,
|
||||
|
||||
if (_net && _net->hasLinks()) {
|
||||
if (!nodHdl)
|
||||
nodHdl = new SubFile::Handle(_nod);
|
||||
nodHdl = new SubFile::Handle(file, _nod);
|
||||
if (!nodHdl2)
|
||||
nodHdl2 = new SubFile::Handle(_nod);
|
||||
nodHdl2 = new SubFile::Handle(file, _nod);
|
||||
_rgn->links(*rgnHdl, subdiv, shift, _net, *netHdl, _nod, *nodHdl,
|
||||
*nodHdl2, _lbl, *lblHdl, &polys->lines);
|
||||
}
|
||||
@ -186,6 +193,7 @@ void VectorTile::polys(const RectC &rect, const Zoom &zoom,
|
||||
if (lines)
|
||||
copyPolys(rect, &polys->lines, lines);
|
||||
|
||||
cacheLock->lock();
|
||||
cache->insert(subdiv, polys);
|
||||
} else {
|
||||
copyPolys(rect, &polys->polygons, polygons);
|
||||
@ -194,49 +202,57 @@ void VectorTile::polys(const RectC &rect, const Zoom &zoom,
|
||||
}
|
||||
}
|
||||
|
||||
lock->unlock();
|
||||
cacheLock->unlock();
|
||||
_lock.unlock();
|
||||
|
||||
delete rgnHdl; delete lblHdl; delete netHdl; delete nodHdl; delete nodHdl2;
|
||||
}
|
||||
|
||||
void VectorTile::points(const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Point> *points, MapData::PointCache *cache, QMutex *lock)
|
||||
void VectorTile::points(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Point> *points, MapData::PointCache *cache, QMutex *cacheLock)
|
||||
{
|
||||
SubFile::Handle *rgnHdl = 0, *lblHdl = 0;
|
||||
|
||||
lock->lock();
|
||||
_lock.lock();
|
||||
|
||||
if (_loaded < 0) {
|
||||
lock->unlock();
|
||||
_lock.unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_loaded) {
|
||||
rgnHdl = new SubFile::Handle(_rgn);
|
||||
lblHdl = new SubFile::Handle(_lbl);
|
||||
SubFile::Handle nodHdl(_nod);
|
||||
SubFile::Handle netHdl(_net);
|
||||
rgnHdl = new SubFile::Handle(file, _rgn);
|
||||
lblHdl = new SubFile::Handle(file, _lbl);
|
||||
SubFile::Handle nodHdl(file, _nod);
|
||||
SubFile::Handle netHdl(file, _net);
|
||||
|
||||
if (!load(*rgnHdl, *lblHdl, netHdl, nodHdl)) {
|
||||
lock->unlock();
|
||||
_lock.unlock();
|
||||
delete rgnHdl; delete lblHdl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
QList<SubDiv*> subdivs = _tre->subdivs(rect, zoom);
|
||||
QList<SubDiv*> subdivs = _tre->subdivs(file, rect, zoom);
|
||||
|
||||
cacheLock->lock();
|
||||
|
||||
for (int i = 0; i < subdivs.size(); i++) {
|
||||
SubDiv *subdiv = subdivs.at(i);
|
||||
|
||||
QList<MapData::Point> *pl = cache->object(subdiv);
|
||||
if (!pl) {
|
||||
cacheLock->unlock();
|
||||
|
||||
if (!rgnHdl) {
|
||||
rgnHdl = new SubFile::Handle(_rgn);
|
||||
lblHdl = new SubFile::Handle(_lbl);
|
||||
rgnHdl = new SubFile::Handle(file, _rgn);
|
||||
lblHdl = new SubFile::Handle(file, _lbl);
|
||||
}
|
||||
|
||||
if (!subdiv->initialized() && !_rgn->subdivInit(*rgnHdl, subdiv))
|
||||
if (!subdiv->initialized() && !_rgn->subdivInit(*rgnHdl, subdiv)) {
|
||||
cacheLock->lock();
|
||||
continue;
|
||||
}
|
||||
|
||||
pl = new QList<MapData::Point>;
|
||||
|
||||
@ -248,34 +264,36 @@ void VectorTile::points(const RectC &rect, const Zoom &zoom,
|
||||
|
||||
copyPoints(rect, pl, points);
|
||||
|
||||
cacheLock->lock();
|
||||
cache->insert(subdiv, pl);
|
||||
} else
|
||||
copyPoints(rect, pl, points);
|
||||
}
|
||||
|
||||
lock->unlock();
|
||||
cacheLock->unlock();
|
||||
_lock.unlock();
|
||||
|
||||
delete rgnHdl; delete lblHdl;
|
||||
}
|
||||
|
||||
void VectorTile::elevations(const RectC &rect, const Zoom &zoom,
|
||||
void VectorTile::elevations(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Elevation> *elevations, MapData::ElevationCache *cache,
|
||||
QMutex *lock)
|
||||
QMutex *cacheLock)
|
||||
{
|
||||
SubFile::Handle *hdl = 0;
|
||||
|
||||
lock->lock();
|
||||
_demLock.lock();
|
||||
|
||||
if (_demLoaded < 0) {
|
||||
lock->unlock();
|
||||
_demLock.unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_demLoaded) {
|
||||
hdl = new SubFile::Handle(_dem);
|
||||
hdl = new SubFile::Handle(file, _dem);
|
||||
|
||||
if (!loadDem(*hdl)) {
|
||||
lock->unlock();
|
||||
_demLock.unlock();
|
||||
delete hdl;
|
||||
return;
|
||||
}
|
||||
@ -285,19 +303,25 @@ void VectorTile::elevations(const RectC &rect, const Zoom &zoom,
|
||||
// the given zoom (we prefer rendering quality rather than speed). For
|
||||
// maps with a single level this has no effect.
|
||||
int level = qMax(0, _dem->level(zoom) - 1);
|
||||
|
||||
QList<const DEMTile*> tiles(_dem->tiles(rect, level));
|
||||
|
||||
cacheLock->lock();
|
||||
|
||||
for (int i = 0; i < tiles.size(); i++) {
|
||||
const DEMTile *tile = tiles.at(i);
|
||||
MapData::Elevation *el = cache->object(tile);
|
||||
|
||||
MapData::Elevation *el = cache->object(tile);
|
||||
if (!el) {
|
||||
cacheLock->unlock();
|
||||
|
||||
if (!hdl)
|
||||
hdl = new SubFile::Handle(_dem);
|
||||
hdl = new SubFile::Handle(file, _dem);
|
||||
|
||||
el = _dem->elevations(*hdl, level, tile);
|
||||
if (!el->m.isNull())
|
||||
elevations->append(*el);
|
||||
|
||||
cacheLock->lock();
|
||||
cache->insert(tile, el);
|
||||
} else {
|
||||
if (!el->m.isNull())
|
||||
@ -305,7 +329,8 @@ void VectorTile::elevations(const RectC &rect, const Zoom &zoom,
|
||||
}
|
||||
}
|
||||
|
||||
lock->unlock();
|
||||
cacheLock->unlock();
|
||||
_demLock.unlock();
|
||||
|
||||
delete hdl;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ public:
|
||||
delete _dem; delete _gmp;
|
||||
}
|
||||
|
||||
bool init();
|
||||
bool init(QFile *file);
|
||||
void clear();
|
||||
|
||||
const RectC &bounds() const {return _tre->bounds();}
|
||||
@ -30,14 +30,15 @@ public:
|
||||
|
||||
SubFile *file(SubFile::Type type);
|
||||
|
||||
void polys(const RectC &rect, const Zoom &zoom,
|
||||
void polys(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Poly> *polygons, QList<MapData::Poly> *lines,
|
||||
MapData::PolyCache *cache, QMutex *lock);
|
||||
void points(const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Point> *points, MapData::PointCache *cache, QMutex *lock);
|
||||
void elevations(const RectC &rect, const Zoom &zoom,
|
||||
MapData::PolyCache *cache, QMutex *cacheLock);
|
||||
void points(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Point> *points, MapData::PointCache *cache,
|
||||
QMutex *cacheLock);
|
||||
void elevations(QFile *file, const RectC &rect, const Zoom &zoom,
|
||||
QList<MapData::Elevation> *elevations, MapData::ElevationCache *cache,
|
||||
QMutex *lock);
|
||||
QMutex *cacheLock);
|
||||
|
||||
static bool isTileFile(SubFile::Type type)
|
||||
{
|
||||
@ -78,7 +79,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
bool initGMP();
|
||||
bool initGMP(QFile *file);
|
||||
bool load(SubFile::Handle &rgnHdl, SubFile::Handle &lblHdl,
|
||||
SubFile::Handle &netHdl, SubFile::Handle &nodHdl);
|
||||
bool loadDem(SubFile::Handle &demHdl);
|
||||
@ -92,6 +93,7 @@ private:
|
||||
SubFile *_gmp;
|
||||
|
||||
int _loaded, _demLoaded;
|
||||
QMutex _lock, _demLock;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ double IMGMap::elevation(const Coordinates &c)
|
||||
if (d->hasDEM()) {
|
||||
QList<MapData::Elevation> tiles;
|
||||
|
||||
d->elevations(RectC(c, Coordinates(c.lon() + DELTA, c.lat() - DELTA)),
|
||||
d->elevations(0, RectC(c, Coordinates(c.lon() + DELTA, c.lat() - DELTA)),
|
||||
d->zooms().max(), &tiles);
|
||||
DEMTree tree(tiles);
|
||||
|
||||
|
@ -39,6 +39,16 @@ static void copyPoints(const RectC &rect, const QList<MapData::Point> *src,
|
||||
}
|
||||
}
|
||||
|
||||
static void copyPoints(const RectC &rect, const QList<MapData::Path> *src,
|
||||
QList<MapData::Point> *dst)
|
||||
{
|
||||
for (int i = 0; i < src->size(); i++) {
|
||||
const MapData::Path &path = src->at(i);
|
||||
if (path.closed && rect.contains(path.point.coordinates))
|
||||
dst->append(path.point);
|
||||
}
|
||||
}
|
||||
|
||||
static double distance(const Coordinates &c1, const Coordinates &c2)
|
||||
{
|
||||
return hypot(c1.lon() - c2.lon(), c1.lat() - c2.lat());
|
||||
@ -209,10 +219,9 @@ bool MapData::readTags(SubFile &subfile, int count,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MapData::readSubFiles()
|
||||
bool MapData::readSubFiles(QFile &file)
|
||||
{
|
||||
/* both _pointFile and _pathFile can be used here */
|
||||
QDataStream stream(&_pointFile);
|
||||
QDataStream stream(&file);
|
||||
|
||||
for (int i = 0; i < _subFiles.size(); i++) {
|
||||
const SubFileInfo &f = _subFiles.at(i);
|
||||
@ -412,8 +421,7 @@ bool MapData::readHeader(QFile &file)
|
||||
return true;
|
||||
}
|
||||
|
||||
MapData::MapData(const QString &fileName)
|
||||
: _pointFile(fileName), _pathFile(fileName), _valid(false)
|
||||
MapData::MapData(const QString &fileName) : _fileName(fileName), _valid(false)
|
||||
{
|
||||
QFile file(fileName);
|
||||
|
||||
@ -425,8 +433,8 @@ MapData::MapData(const QString &fileName)
|
||||
if (!readHeader(file))
|
||||
return;
|
||||
|
||||
_pathCache.setMaxCost(256);
|
||||
_pointCache.setMaxCost(256);
|
||||
_pathCache.setMaxCost(2048);
|
||||
_pointCache.setMaxCost(2048);
|
||||
|
||||
_valid = true;
|
||||
}
|
||||
@ -450,17 +458,13 @@ RectC MapData::bounds() const
|
||||
|
||||
void MapData::load()
|
||||
{
|
||||
_pointFile.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
|
||||
_pathFile.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
|
||||
|
||||
readSubFiles();
|
||||
QFile file(_fileName);
|
||||
if (file.open(QIODevice::ReadOnly | QIODevice::Unbuffered))
|
||||
readSubFiles(file);
|
||||
}
|
||||
|
||||
void MapData::clear()
|
||||
{
|
||||
_pointFile.close();
|
||||
_pathFile.close();
|
||||
|
||||
_pathCache.clear();
|
||||
_pointCache.clear();
|
||||
|
||||
@ -484,14 +488,14 @@ void MapData::clearTiles()
|
||||
bool MapData::pathCb(VectorTile *tile, void *context)
|
||||
{
|
||||
PathCTX *ctx = (PathCTX*)context;
|
||||
ctx->data->paths(tile, ctx->rect, ctx->zoom, ctx->list);
|
||||
ctx->data->paths(ctx->file, tile, ctx->rect, ctx->zoom, ctx->list);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MapData::pointCb(VectorTile *tile, void *context)
|
||||
{
|
||||
PointCTX *ctx = (PointCTX*)context;
|
||||
ctx->data->points(tile, ctx->rect, ctx->zoom, ctx->list);
|
||||
ctx->data->points(ctx->file, tile, ctx->rect, ctx->zoom, ctx->list);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -504,13 +508,14 @@ int MapData::level(int zoom) const
|
||||
return _subFiles.size() - 1;
|
||||
}
|
||||
|
||||
void MapData::points(const RectC &rect, int zoom, QList<Point> *list)
|
||||
void MapData::points(QFile &file, const RectC &rect, int zoom,
|
||||
QList<Point> *list)
|
||||
{
|
||||
if (!rect.isValid())
|
||||
return;
|
||||
|
||||
int l(level(zoom));
|
||||
PointCTX ctx(this, rect, zoom, list);
|
||||
PointCTX ctx(file, this, rect, zoom, list);
|
||||
double min[2], max[2];
|
||||
|
||||
min[0] = rect.left();
|
||||
@ -521,36 +526,58 @@ void MapData::points(const RectC &rect, int zoom, QList<Point> *list)
|
||||
_tiles.at(l)->Search(min, max, pointCb, &ctx);
|
||||
}
|
||||
|
||||
void MapData::points(const VectorTile *tile, const RectC &rect, int zoom,
|
||||
QList<Point> *list)
|
||||
void MapData::points(QFile &file, VectorTile *tile, const RectC &rect,
|
||||
int zoom, QList<Point> *list)
|
||||
{
|
||||
Key key(tile, zoom);
|
||||
|
||||
_pointLock.lock();
|
||||
tile->lock.lock();
|
||||
|
||||
QList<Point> *cached = _pointCache.object(key);
|
||||
|
||||
if (!cached) {
|
||||
_pointCacheLock.lock();
|
||||
QList<Point> *tilePoints = _pointCache.object(key);
|
||||
if (!tilePoints) {
|
||||
_pointCacheLock.unlock();
|
||||
QList<Point> *p = new QList<Point>();
|
||||
if (readPoints(tile, zoom, p)) {
|
||||
if (readPoints(file, tile, zoom, p)) {
|
||||
copyPoints(rect, p, list);
|
||||
_pointCacheLock.lock();
|
||||
_pointCache.insert(key, p);
|
||||
_pointCacheLock.unlock();
|
||||
} else
|
||||
delete p;
|
||||
} else
|
||||
copyPoints(rect, cached, list);
|
||||
} else {
|
||||
copyPoints(rect, tilePoints, list);
|
||||
_pointCacheLock.unlock();
|
||||
}
|
||||
|
||||
_pointLock.unlock();
|
||||
_pathCacheLock.lock();
|
||||
QList<Path> *tilePaths = _pathCache.object(key);
|
||||
if (!tilePaths) {
|
||||
_pathCacheLock.unlock();
|
||||
QList<Path> *p = new QList<Path>();
|
||||
if (readPaths(file, tile, zoom, p)) {
|
||||
copyPoints(rect, p, list);
|
||||
_pathCacheLock.lock();
|
||||
_pathCache.insert(key, p);
|
||||
_pathCacheLock.unlock();
|
||||
} else
|
||||
delete p;
|
||||
} else {
|
||||
copyPoints(rect, tilePaths, list);
|
||||
_pathCacheLock.unlock();
|
||||
}
|
||||
|
||||
tile->lock.unlock();
|
||||
}
|
||||
|
||||
void MapData::paths(const RectC &searchRect, const RectC &boundsRect, int zoom,
|
||||
QList<Path> *list)
|
||||
void MapData::paths(QFile &file, const RectC &searchRect,
|
||||
const RectC &boundsRect, int zoom, QList<Path> *list)
|
||||
{
|
||||
if (!searchRect.isValid())
|
||||
return;
|
||||
|
||||
int l(level(zoom));
|
||||
PathCTX ctx(this, boundsRect, zoom, list);
|
||||
PathCTX ctx(file, this, boundsRect, zoom, list);
|
||||
double min[2], max[2];
|
||||
|
||||
min[0] = searchRect.left();
|
||||
@ -561,32 +588,38 @@ void MapData::paths(const RectC &searchRect, const RectC &boundsRect, int zoom,
|
||||
_tiles.at(l)->Search(min, max, pathCb, &ctx);
|
||||
}
|
||||
|
||||
void MapData::paths(const VectorTile *tile, const RectC &rect, int zoom,
|
||||
void MapData::paths(QFile &file, VectorTile *tile, const RectC &rect, int zoom,
|
||||
QList<Path> *list)
|
||||
{
|
||||
Key key(tile, zoom);
|
||||
|
||||
_pathLock.lock();
|
||||
tile->lock.lock();
|
||||
|
||||
_pathCacheLock.lock();
|
||||
QList<Path> *cached = _pathCache.object(key);
|
||||
|
||||
if (!cached) {
|
||||
_pathCacheLock.unlock();
|
||||
QList<Path> *p = new QList<Path>();
|
||||
if (readPaths(tile, zoom, p)) {
|
||||
if (readPaths(file, tile, zoom, p)) {
|
||||
copyPaths(rect, p, list);
|
||||
_pathCacheLock.lock();
|
||||
_pathCache.insert(key, p);
|
||||
_pathCacheLock.unlock();
|
||||
} else
|
||||
delete p;
|
||||
} else
|
||||
} else {
|
||||
copyPaths(rect, cached, list);
|
||||
_pathCacheLock.unlock();
|
||||
}
|
||||
|
||||
_pathLock.unlock();
|
||||
tile->lock.unlock();
|
||||
}
|
||||
|
||||
bool MapData::readPaths(const VectorTile *tile, int zoom, QList<Path> *list)
|
||||
bool MapData::readPaths(QFile &file, const VectorTile *tile, int zoom,
|
||||
QList<Path> *list)
|
||||
{
|
||||
const SubFileInfo &info = _subFiles.at(level(zoom));
|
||||
SubFile subfile(_pathFile, info.offset, info.size);
|
||||
SubFile subfile(file, info.offset, info.size);
|
||||
int rows = info.max - info.min + 1;
|
||||
QVector<unsigned> paths(rows);
|
||||
quint32 blocks, unused, val, cnt = 0;
|
||||
@ -613,16 +646,16 @@ bool MapData::readPaths(const VectorTile *tile, int zoom, QList<Path> *list)
|
||||
paths.reserve(paths[zoom - info.min]);
|
||||
|
||||
for (unsigned i = 0; i < paths[zoom - info.min]; i++) {
|
||||
Path p;
|
||||
qint32 lon = 0, lat = 0;
|
||||
Path p(subfile.pos());
|
||||
|
||||
if (!(subfile.readVUInt32(unused) && subfile.readUInt16(bitmap)
|
||||
&& subfile.readByte(sb)))
|
||||
return false;
|
||||
|
||||
p.layer = sb >> 4;
|
||||
p.point.layer = sb >> 4;
|
||||
int tags = sb & 0x0F;
|
||||
if (!readTags(subfile, tags, _pathTags, p.tags))
|
||||
if (!readTags(subfile, tags, _pathTags, p.point.tags))
|
||||
return false;
|
||||
|
||||
if (!subfile.readByte(flags))
|
||||
@ -631,17 +664,17 @@ bool MapData::readPaths(const VectorTile *tile, int zoom, QList<Path> *list)
|
||||
if (!subfile.readString(name))
|
||||
return false;
|
||||
name = name.split('\r').first();
|
||||
p.tags.append(Tag(ID_NAME, name));
|
||||
p.point.tags.append(Tag(ID_NAME, name));
|
||||
}
|
||||
if (flags & 0x40) {
|
||||
if (!subfile.readString(houseNumber))
|
||||
return false;
|
||||
p.tags.append(Tag(ID_HOUSE, houseNumber));
|
||||
p.point.tags.append(Tag(ID_HOUSE, houseNumber));
|
||||
}
|
||||
if (flags & 0x20) {
|
||||
if (!subfile.readString(reference))
|
||||
return false;
|
||||
p.tags.append(Tag(ID_REF, reference));
|
||||
p.point.tags.append(Tag(ID_REF, reference));
|
||||
}
|
||||
if (flags & 0x10) {
|
||||
if (!(subfile.readVInt32(lat) && subfile.readVInt32(lon)))
|
||||
@ -660,8 +693,10 @@ bool MapData::readPaths(const VectorTile *tile, int zoom, QList<Path> *list)
|
||||
const QVector<Coordinates> &outline = p.poly.first();
|
||||
p.closed = isClosed(outline);
|
||||
if (flags & 0x10)
|
||||
p.labelPos = Coordinates(outline.first().lon() + MD(lon),
|
||||
p.point.coordinates = Coordinates(outline.first().lon() + MD(lon),
|
||||
outline.first().lat() + MD(lat));
|
||||
else if (p.closed)
|
||||
p.point.coordinates = p.poly.boundingRect().center();
|
||||
|
||||
list->append(p);
|
||||
}
|
||||
@ -669,10 +704,11 @@ bool MapData::readPaths(const VectorTile *tile, int zoom, QList<Path> *list)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MapData::readPoints(const VectorTile *tile, int zoom, QList<Point> *list)
|
||||
bool MapData::readPoints(QFile &file, const VectorTile *tile, int zoom,
|
||||
QList<Point> *list)
|
||||
{
|
||||
const SubFileInfo &info = _subFiles.at(level(zoom));
|
||||
SubFile subfile(_pointFile, info.offset, info.size);
|
||||
SubFile subfile(file, info.offset, info.size);
|
||||
int rows = info.max - info.min + 1;
|
||||
QVector<unsigned> points(rows);
|
||||
quint32 val, unused, cnt = 0;
|
||||
@ -747,7 +783,7 @@ QDebug operator<<(QDebug dbg, const Mapsforge::MapData::Tag &tag)
|
||||
QDebug operator<<(QDebug dbg, const MapData::Path &path)
|
||||
{
|
||||
dbg.nospace() << "Path(" << path.poly.boundingRect() << ", "
|
||||
<< path.tags << ")";
|
||||
<< path.point.tags << ")";
|
||||
return dbg.space();
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,8 @@ public:
|
||||
struct Point {
|
||||
Point(quint64 id) : id(id) {}
|
||||
|
||||
bool center() const {return (id & 1ULL<<63) != 0;}
|
||||
|
||||
quint64 id;
|
||||
Coordinates coordinates;
|
||||
QVector<Tag> tags;
|
||||
@ -46,24 +48,25 @@ public:
|
||||
};
|
||||
|
||||
struct Path {
|
||||
Path(quint64 id) : point(id | 1ULL<<63) {}
|
||||
|
||||
Point point;
|
||||
Polygon poly;
|
||||
QVector<Tag> tags;
|
||||
Coordinates labelPos;
|
||||
int layer;
|
||||
bool closed;
|
||||
|
||||
bool operator<(const Path &other) const
|
||||
{return layer < other.layer;}
|
||||
{return point.layer < other.point.layer;}
|
||||
};
|
||||
|
||||
const QString &fileName() const {return _fileName;}
|
||||
RectC bounds() const;
|
||||
Range zooms() const
|
||||
{return Range(_subFiles.first().min, _subFiles.last().max);}
|
||||
int tileSize() const {return _tileSize;}
|
||||
|
||||
void points(const RectC &rect, int zoom, QList<Point> *list);
|
||||
void paths(const RectC &searchRect, const RectC &boundsRect, int zoom,
|
||||
QList<Path> *set);
|
||||
void points(QFile &file, const RectC &rect, int zoom, QList<Point> *list);
|
||||
void paths(QFile &file, const RectC &searchRect, const RectC &boundsRect,
|
||||
int zoom, QList<Path> *set);
|
||||
unsigned tagId(const QByteArray &name) const {return _keys.value(name);}
|
||||
|
||||
void load();
|
||||
@ -87,12 +90,15 @@ private:
|
||||
|
||||
size_t offset;
|
||||
Coordinates pos;
|
||||
QMutex lock;
|
||||
};
|
||||
|
||||
struct PathCTX {
|
||||
PathCTX(MapData *data, const RectC &rect, int zoom, QList<Path> *list)
|
||||
: data(data), rect(rect), zoom(zoom), list(list) {}
|
||||
PathCTX(QFile &file, MapData *data, const RectC &rect, int zoom,
|
||||
QList<Path> *list)
|
||||
: file(file), data(data), rect(rect), zoom(zoom), list(list) {}
|
||||
|
||||
QFile &file;
|
||||
MapData *data;
|
||||
const RectC ▭
|
||||
int zoom;
|
||||
@ -100,9 +106,11 @@ private:
|
||||
};
|
||||
|
||||
struct PointCTX {
|
||||
PointCTX(MapData *data, const RectC &rect, int zoom, QList<Point> *list)
|
||||
: data(data), rect(rect), zoom(zoom), list(list) {}
|
||||
PointCTX(QFile &file, MapData *data, const RectC &rect, int zoom,
|
||||
QList<Point> *list)
|
||||
: file(file), data(data), rect(rect), zoom(zoom), list(list) {}
|
||||
|
||||
QFile &file;
|
||||
MapData *data;
|
||||
const RectC ▭
|
||||
int zoom;
|
||||
@ -141,16 +149,18 @@ private:
|
||||
bool readTagInfo(SubFile &hdr, QVector<TagSource> &tags);
|
||||
bool readMapInfo(SubFile &hdr, QByteArray &projection, bool &debugMap);
|
||||
bool readHeader(QFile &file);
|
||||
bool readSubFiles();
|
||||
bool readSubFiles(QFile &file);
|
||||
void clearTiles();
|
||||
|
||||
int level(int zoom) const;
|
||||
void paths(const VectorTile *tile, const RectC &rect, int zoom,
|
||||
void paths(QFile &file, VectorTile *tile, const RectC &rect, int zoom,
|
||||
QList<Path> *list);
|
||||
void points(const VectorTile *tile, const RectC &rect, int zoom,
|
||||
void points(QFile &file, VectorTile *tile, const RectC &rect, int zoom,
|
||||
QList<Point> *list);
|
||||
bool readPaths(QFile &file, const VectorTile *tile, int zoom,
|
||||
QList<Path> *list);
|
||||
bool readPoints(QFile &file, const VectorTile *tile, int zoom,
|
||||
QList<Point> *list);
|
||||
bool readPaths(const VectorTile *tile, int zoom, QList<Path> *list);
|
||||
bool readPoints(const VectorTile *tile, int zoom, QList<Point> *list);
|
||||
|
||||
static bool readTags(SubFile &subfile, int count,
|
||||
const QVector<TagSource> &tags, QVector<Tag> &list);
|
||||
@ -159,7 +169,7 @@ private:
|
||||
|
||||
friend HASH_T qHash(const MapData::Key &key);
|
||||
|
||||
QFile _pointFile, _pathFile;
|
||||
QString _fileName;
|
||||
RectC _bounds;
|
||||
quint16 _tileSize;
|
||||
QVector<SubFileInfo> _subFiles;
|
||||
@ -169,7 +179,7 @@ private:
|
||||
|
||||
QCache<Key, QList<Path> > _pathCache;
|
||||
QCache<Key, QList<Point> > _pointCache;
|
||||
QMutex _pathLock, _pointLock;
|
||||
QMutex _pathCacheLock, _pointCacheLock;
|
||||
|
||||
bool _valid;
|
||||
QString _errorString;
|
||||
|
@ -16,32 +16,6 @@ using namespace Mapsforge;
|
||||
|
||||
static double LIMIT = cos(deg2rad(170));
|
||||
|
||||
static bool rectNearPolygon(const QPainterPath &path, const QRectF &rect)
|
||||
{
|
||||
return (path.boundingRect().contains(rect)
|
||||
&& (path.contains(rect.topLeft()) || path.contains(rect.topRight())
|
||||
|| path.contains(rect.bottomLeft()) || path.contains(rect.bottomRight())));
|
||||
}
|
||||
|
||||
static QPointF centroid(const QPainterPath &polygon)
|
||||
{
|
||||
qreal area = 0;
|
||||
qreal cx = 0, cy = 0;
|
||||
|
||||
for (int i = 0; i < polygon.elementCount(); i++) {
|
||||
int j = (i == polygon.elementCount() - 1) ? 0 : i + 1;
|
||||
qreal f = (polygon.elementAt(i).x * polygon.elementAt(j).y
|
||||
- polygon.elementAt(j).x * polygon.elementAt(i).y);
|
||||
area += f;
|
||||
cx += (polygon.elementAt(i).x + polygon.elementAt(j).x) * f;
|
||||
cy += (polygon.elementAt(i).y + polygon.elementAt(j).y) * f;
|
||||
}
|
||||
|
||||
qreal factor = 1.0 / (3.0 * area);
|
||||
|
||||
return QPointF(cx * factor, cy * factor);
|
||||
}
|
||||
|
||||
static const QByteArray *label(unsigned key, const QVector<MapData::Tag> &tags)
|
||||
{
|
||||
for (int i = 0; i < tags.size(); i++) {
|
||||
@ -100,22 +74,22 @@ static QPainterPath parallelPath(const QPainterPath &p, double dy)
|
||||
return h;
|
||||
}
|
||||
|
||||
void RasterTile::processPointLabels(const QList<MapData::Point> &points,
|
||||
void RasterTile::processLabels(const QList<MapData::Point> &points,
|
||||
QList<TextItem*> &textItems) const
|
||||
{
|
||||
QList<const Style::TextRender*> labels(_style->pointLabels(_zoom));
|
||||
QList<const Style::Symbol*> symbols(_style->pointSymbols(_zoom));
|
||||
QList<PointText> items;
|
||||
QList<Label> items;
|
||||
QList<const Style::TextRender*> labels(_style->labels(_zoom));
|
||||
QList<const Style::Symbol*> symbols(_style->symbols(_zoom));
|
||||
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
const MapData::Point &point = points.at(i);
|
||||
const Style::TextRender *ti = 0;
|
||||
const Style::Symbol *si = 0;
|
||||
const QByteArray *lbl = 0;
|
||||
QList<const QByteArray *> ll;
|
||||
|
||||
for (int j = 0; j < symbols.size(); j++) {
|
||||
const Style::Symbol *ri = symbols.at(j);
|
||||
if (ri->rule().match(point.tags)) {
|
||||
if (ri->rule().match(point.center(), point.tags)) {
|
||||
si = ri;
|
||||
break;
|
||||
}
|
||||
@ -123,31 +97,37 @@ void RasterTile::processPointLabels(const QList<MapData::Point> &points,
|
||||
|
||||
for (int j = 0; j < labels.size(); j++) {
|
||||
const Style::TextRender *ri = labels.at(j);
|
||||
if (ri->rule().match(point.tags)) {
|
||||
if ((lbl = label(ri->key(), point.tags))) {
|
||||
if (!si || si->id() == ri->symbolId()) {
|
||||
if (ri->rule().match(point.center(), point.tags)) {
|
||||
const QByteArray *lbl = label(ri->key(), point.tags);
|
||||
if (lbl) {
|
||||
if (!si) {
|
||||
ti = ri;
|
||||
ll.append(lbl);
|
||||
break;
|
||||
} else if (si->id() == ri->symbolId()) {
|
||||
if (!ti)
|
||||
ti = ri;
|
||||
ll.append(lbl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ti || si)
|
||||
items.append(PointText(&point, lbl, si, ti));
|
||||
items.append(Label(&point, ll, si, ti));
|
||||
}
|
||||
|
||||
std::sort(items.begin(), items.end());
|
||||
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
const PointText &p = items.at(i);
|
||||
const QImage *img = p.si ? &p.si->img() : 0;
|
||||
const QFont *font = p.ti ? &p.ti->font() : 0;
|
||||
const QColor *color = p.ti ? &p.ti->fillColor() : 0;
|
||||
const QColor *hColor = p.ti ? haloColor(p.ti) : 0;
|
||||
const Label &l = items.at(i);
|
||||
const QImage *img = l.si ? &l.si->img() : 0;
|
||||
const QFont *font = l.ti ? &l.ti->font() : 0;
|
||||
const QColor *color = l.ti ? &l.ti->fillColor() : 0;
|
||||
const QColor *hColor = l.ti ? haloColor(l.ti) : 0;
|
||||
|
||||
PointItem *item = new PointItem(ll2xy(p.p->coordinates).toPoint(),
|
||||
p.lbl, font, img, color, hColor);
|
||||
PointItem *item = new PointItem(ll2xy(l.point->coordinates).toPoint(),
|
||||
l.lbl, font, img, color, hColor);
|
||||
if (item->isValid() && !item->collides(textItems))
|
||||
textItems.append(item);
|
||||
else
|
||||
@ -155,73 +135,12 @@ void RasterTile::processPointLabels(const QList<MapData::Point> &points,
|
||||
}
|
||||
}
|
||||
|
||||
void RasterTile::processAreaLabels(const QVector<PainterPath> &paths,
|
||||
QList<TextItem*> &textItems) const
|
||||
{
|
||||
QList<const Style::TextRender*> labels(_style->areaLabels(_zoom));
|
||||
QList<const Style::Symbol*> symbols(_style->areaSymbols(_zoom));
|
||||
QList<PathText> items;
|
||||
|
||||
for (int i = 0; i < paths.size(); i++) {
|
||||
const PainterPath &path = paths.at(i);
|
||||
const Style::TextRender *ti = 0;
|
||||
const Style::Symbol *si = 0;
|
||||
const QByteArray *lbl = 0;
|
||||
|
||||
if (!path.path->closed)
|
||||
continue;
|
||||
|
||||
for (int j = 0; j < symbols.size(); j++) {
|
||||
const Style::Symbol *ri = symbols.at(j);
|
||||
if (ri->rule().match(path.path->closed, path.path->tags)) {
|
||||
si = ri;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < labels.size(); j++) {
|
||||
const Style::TextRender *ri = labels.at(j);
|
||||
if (ri->rule().match(path.path->closed, path.path->tags)) {
|
||||
if ((lbl = label(ri->key(), path.path->tags))) {
|
||||
if (!si || si->id() == ri->symbolId()) {
|
||||
ti = ri;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ti || si)
|
||||
items.append(PathText(&path, lbl, si, ti));
|
||||
}
|
||||
|
||||
std::sort(items.begin(), items.end());
|
||||
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
const PathText &p = items.at(i);
|
||||
const QImage *img = p.si ? &p.si->img() : 0;
|
||||
const QFont *font = p.ti ? &p.ti->font() : 0;
|
||||
const QColor *color = p.ti ? &p.ti->fillColor() : 0;
|
||||
const QColor *hColor = p.ti ? haloColor(p.ti) : 0;
|
||||
|
||||
QPointF pos = p.p->path->labelPos.isNull()
|
||||
? centroid(p.p->pp) : ll2xy(p.p->path->labelPos);
|
||||
PointItem *item = new PointItem(pos.toPoint(), p.lbl, font, img, color,
|
||||
hColor);
|
||||
if (item->isValid() && rectNearPolygon(p.p->pp, item->boundingRect())
|
||||
&& !item->collides(textItems))
|
||||
textItems.append(item);
|
||||
else
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
void RasterTile::processLineLabels(const QVector<PainterPath> &paths,
|
||||
QList<TextItem*> &textItems) const
|
||||
{
|
||||
QList<const Style::TextRender*> labels(_style->pathLabels(_zoom));
|
||||
QList<const Style::Symbol*> symbols(_style->lineSymbols(_zoom));
|
||||
QList<PathText> items;
|
||||
QList<LineLabel> items;
|
||||
QSet<QByteArray> set;
|
||||
|
||||
for (int i = 0; i < paths.size(); i++) {
|
||||
@ -235,7 +154,7 @@ void RasterTile::processLineLabels(const QVector<PainterPath> &paths,
|
||||
|
||||
for (int j = 0; j < symbols.size(); j++) {
|
||||
const Style::Symbol *ri = symbols.at(j);
|
||||
if (ri->rule().match(path.path->closed, path.path->tags)) {
|
||||
if (ri->rule().matchPath(path.path->closed, path.path->point.tags)) {
|
||||
si = ri;
|
||||
break;
|
||||
}
|
||||
@ -243,8 +162,8 @@ void RasterTile::processLineLabels(const QVector<PainterPath> &paths,
|
||||
|
||||
for (int j = 0; j < labels.size(); j++) {
|
||||
const Style::TextRender *ri = labels.at(j);
|
||||
if (ri->rule().match(path.path->closed, path.path->tags)) {
|
||||
if ((lbl = label(ri->key(), path.path->tags))) {
|
||||
if (ri->rule().matchPath(path.path->closed, path.path->point.tags)) {
|
||||
if ((lbl = label(ri->key(), path.path->point.tags))) {
|
||||
if (!si || si->id() == ri->symbolId()) {
|
||||
ti = ri;
|
||||
break;
|
||||
@ -254,57 +173,57 @@ void RasterTile::processLineLabels(const QVector<PainterPath> &paths,
|
||||
}
|
||||
|
||||
if (ti || si)
|
||||
items.append(PathText(&path, lbl, si, ti));
|
||||
items.append(LineLabel(&path, lbl, si, ti));
|
||||
}
|
||||
|
||||
std::sort(items.begin(), items.end());
|
||||
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
const PathText &p = items.at(i);
|
||||
const QImage *img = p.si ? &p.si->img() : 0;
|
||||
const QFont *font = p.ti ? &p.ti->font() : 0;
|
||||
const QColor *color = p.ti ? &p.ti->fillColor() : 0;
|
||||
const QColor *hColor = p.ti ? haloColor(p.ti) : 0;
|
||||
bool rotate = p.si ? p.si->rotate() : false;
|
||||
const LineLabel &l = items.at(i);
|
||||
const QImage *img = l.si ? &l.si->img() : 0;
|
||||
const QFont *font = l.ti ? &l.ti->font() : 0;
|
||||
const QColor *color = l.ti ? &l.ti->fillColor() : 0;
|
||||
const QColor *hColor = l.ti ? haloColor(l.ti) : 0;
|
||||
bool rotate = l.si ? l.si->rotate() : false;
|
||||
bool limit = false;
|
||||
|
||||
if (p.ti) {
|
||||
limit = (p.ti->key() == ID_ELE || p.ti->key() == ID_REF
|
||||
|| (!p.si && p.ti->shield()));
|
||||
if (limit && set.contains(*p.lbl))
|
||||
if (l.ti) {
|
||||
limit = (l.ti->key() == ID_ELE || l.ti->key() == ID_REF
|
||||
|| (!l.si && l.ti->shield()));
|
||||
if (limit && set.contains(*l.lbl))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!p.si && p.ti && p.ti->shield()) {
|
||||
if (p.ti && p.lbl && set.contains(*p.lbl))
|
||||
if (!l.si && l.ti && l.ti->shield()) {
|
||||
if (l.ti && l.lbl && set.contains(*l.lbl))
|
||||
continue;
|
||||
if (p.p->pp.length() < _rect.width() / 3.0)
|
||||
if (l.path->pp.length() < _rect.width() / 3.0)
|
||||
continue;
|
||||
|
||||
QPointF pos = p.p->pp.pointAtPercent(0.5);
|
||||
QPointF pos = l.path->pp.pointAtPercent(0.5);
|
||||
|
||||
PointItem *item = new PointItem(pos.toPoint(), p.lbl, font, color,
|
||||
PointItem *item = new PointItem(pos.toPoint(), l.lbl, font, color,
|
||||
hColor);
|
||||
if (item->isValid() && _rect.contains(item->boundingRect().toRect())
|
||||
&& !item->collides(textItems)) {
|
||||
textItems.append(item);
|
||||
if (p.ti && p.lbl)
|
||||
set.insert(*p.lbl);
|
||||
if (l.ti && l.lbl)
|
||||
set.insert(*l.lbl);
|
||||
} else
|
||||
delete item;
|
||||
} else {
|
||||
PathItem *item = new PathItem(p.p->pp, p.lbl, img, _rect, font,
|
||||
PathItem *item = new PathItem(l.path->pp, l.lbl, img, _rect, font,
|
||||
color, hColor, rotate);
|
||||
if (item->isValid() && !item->collides(textItems)) {
|
||||
textItems.append(item);
|
||||
if (limit)
|
||||
set.insert(*p.lbl);
|
||||
set.insert(*l.lbl);
|
||||
} else {
|
||||
delete item;
|
||||
|
||||
if (img && p.lbl) {
|
||||
PathItem *item = new PathItem(p.p->pp, 0, img, _rect, 0, 0,
|
||||
0, rotate);
|
||||
if (img && l.lbl) {
|
||||
PathItem *item = new PathItem(l.path->pp, 0, img, _rect, 0,
|
||||
0, 0, rotate);
|
||||
if (item->isValid() && !item->collides(textItems))
|
||||
textItems.append(item);
|
||||
else
|
||||
@ -318,8 +237,13 @@ void RasterTile::processLineLabels(const QVector<PainterPath> &paths,
|
||||
void RasterTile::drawTextItems(QPainter *painter,
|
||||
const QList<TextItem*> &textItems)
|
||||
{
|
||||
for (int i = 0; i < textItems.size(); i++)
|
||||
textItems.at(i)->paint(painter);
|
||||
QRectF rect(_rect);
|
||||
|
||||
for (int i = 0; i < textItems.size(); i++) {
|
||||
const TextItem *ti = textItems.at(i);
|
||||
if (rect.intersects(ti->boundingRect()))
|
||||
ti->paint(painter);
|
||||
}
|
||||
}
|
||||
|
||||
QPainterPath RasterTile::painterPath(const Polygon &polygon, bool curve) const
|
||||
@ -374,13 +298,13 @@ void RasterTile::pathInstructions(const QList<MapData::Path> &paths,
|
||||
for (int i = 0; i < paths.size(); i++) {
|
||||
const MapData::Path &path = paths.at(i);
|
||||
PainterPath &rp = painterPaths[i];
|
||||
PathKey key(_zoom, path.closed, path.tags);
|
||||
PathKey key(_zoom, path.closed, path.point.tags);
|
||||
|
||||
rp.path = &path;
|
||||
|
||||
if (!(ri = cache.object(key))) {
|
||||
ri = new QList<const Style::PathRender*>(_style->paths(_zoom,
|
||||
path.closed, path.tags));
|
||||
path.closed, path.point.tags));
|
||||
for (int j = 0; j < ri->size(); j++)
|
||||
instructions.append(RenderInstruction(ri->at(j), &rp));
|
||||
cache.insert(key, ri);
|
||||
@ -484,6 +408,10 @@ void RasterTile::fetchData(QList<MapData::Path> &paths,
|
||||
QList<MapData::Point> &points) const
|
||||
{
|
||||
QPoint ttl(_rect.topLeft());
|
||||
QFile file(_data->fileName());
|
||||
|
||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Unbuffered))
|
||||
return;
|
||||
|
||||
QRectF pathRect(QPointF(ttl.x() - PATHS_EXTENT, ttl.y() - PATHS_EXTENT),
|
||||
QPointF(ttl.x() + _rect.width() + PATHS_EXTENT, ttl.y() + _rect.height()
|
||||
@ -495,15 +423,15 @@ void RasterTile::fetchData(QList<MapData::Path> &paths,
|
||||
_transform.img2proj(pathRect.bottomRight()));
|
||||
RectD searchRectD(_transform.img2proj(searchRect.topLeft()),
|
||||
_transform.img2proj(searchRect.bottomRight()));
|
||||
_data->paths(searchRectD.toRectC(_proj, 20), pathRectD.toRectC(_proj, 20),
|
||||
_zoom, &paths);
|
||||
_data->paths(file, searchRectD.toRectC(_proj, 20),
|
||||
pathRectD.toRectC(_proj, 20), _zoom, &paths);
|
||||
|
||||
QRectF pointRect(QPointF(ttl.x() - TEXT_EXTENT, ttl.y() - TEXT_EXTENT),
|
||||
QPointF(ttl.x() + _rect.width() + TEXT_EXTENT, ttl.y() + _rect.height()
|
||||
+ TEXT_EXTENT));
|
||||
RectD pointRectD(_transform.img2proj(pointRect.topLeft()),
|
||||
_transform.img2proj(pointRect.bottomRight()));
|
||||
_data->points(pointRectD.toRectC(_proj, 20), _zoom, &points);
|
||||
_data->points(file, pointRectD.toRectC(_proj, 20), _zoom, &points);
|
||||
}
|
||||
|
||||
MatrixD RasterTile::elevation(int extend) const
|
||||
@ -543,8 +471,7 @@ void RasterTile::render()
|
||||
|
||||
drawPaths(&painter, paths, points, renderPaths);
|
||||
|
||||
processPointLabels(points, textItems);
|
||||
processAreaLabels(renderPaths, textItems);
|
||||
processLabels(points, textItems);
|
||||
processLineLabels(renderPaths, textItems);
|
||||
drawTextItems(&painter, textItems);
|
||||
|
||||
|
@ -43,44 +43,44 @@ private:
|
||||
const MapData::Path *path;
|
||||
};
|
||||
|
||||
struct PointText {
|
||||
PointText(const MapData::Point *p, const QByteArray *lbl,
|
||||
struct Label {
|
||||
Label(const MapData::Point *p, const QList<const QByteArray *> lbl,
|
||||
const Style::Symbol *si, const Style::TextRender *ti)
|
||||
: p(p), lbl(lbl), ti(ti), si(si)
|
||||
: point(p), ti(ti), si(si), lbl(lbl)
|
||||
{
|
||||
Q_ASSERT(si || ti);
|
||||
}
|
||||
|
||||
bool operator<(const PointText &other) const
|
||||
bool operator<(const Label &other) const
|
||||
{
|
||||
if (priority() == other.priority())
|
||||
return p->id < other.p->id;
|
||||
return point->id < other.point->id;
|
||||
else
|
||||
return (priority() > other.priority());
|
||||
}
|
||||
int priority() const {return si ? si->priority() : ti->priority();}
|
||||
|
||||
const MapData::Point *p;
|
||||
const QByteArray *lbl;
|
||||
const MapData::Point *point;
|
||||
const Style::TextRender *ti;
|
||||
const Style::Symbol *si;
|
||||
QList<const QByteArray *> lbl;
|
||||
};
|
||||
|
||||
struct PathText {
|
||||
PathText(const PainterPath *p, const QByteArray *lbl,
|
||||
struct LineLabel {
|
||||
LineLabel(const PainterPath *p, const QByteArray *lbl,
|
||||
const Style::Symbol *si, const Style::TextRender *ti)
|
||||
: p(p), lbl(lbl), ti(ti), si(si)
|
||||
: path(p), lbl(lbl), ti(ti), si(si)
|
||||
{
|
||||
Q_ASSERT(si || ti);
|
||||
}
|
||||
|
||||
bool operator<(const PathText &other) const
|
||||
bool operator<(const LineLabel &other) const
|
||||
{
|
||||
return (priority() > other.priority());
|
||||
}
|
||||
int priority() const {return si ? si->priority() : ti->priority();}
|
||||
|
||||
const PainterPath *p;
|
||||
const PainterPath *path;
|
||||
const QByteArray *lbl;
|
||||
const Style::TextRender *ti;
|
||||
const Style::Symbol *si;
|
||||
@ -120,7 +120,7 @@ private:
|
||||
int layer() const
|
||||
{
|
||||
if (_path)
|
||||
return _path->path->layer;
|
||||
return _path->path->point.layer;
|
||||
else if (_point)
|
||||
return _point->layer;
|
||||
else
|
||||
@ -170,15 +170,28 @@ private:
|
||||
class PointItem : public TextPointItem
|
||||
{
|
||||
public:
|
||||
PointItem(const QPoint &point, const QByteArray *label,
|
||||
PointItem(const QPoint &point, const QList<const QByteArray *> &lbl,
|
||||
const QFont *font, const QImage *img, const QColor *color,
|
||||
const QColor *haloColor) : TextPointItem(point,
|
||||
label ? new QString(*label) : 0, font, img, color, haloColor, 0) {}
|
||||
const QColor *haloColor) : TextPointItem(point, label(lbl),
|
||||
font, img, color, haloColor, 0) {}
|
||||
PointItem(const QPoint &point, const QByteArray *label,
|
||||
const QFont *font, const QColor *color, const QColor *bgColor)
|
||||
: TextPointItem(point, label ? new QString(*label) : 0, font, 0,
|
||||
color, 0, bgColor) {}
|
||||
~PointItem() {delete _text;}
|
||||
|
||||
private:
|
||||
static QString *label(const QList<const QByteArray*> &ll)
|
||||
{
|
||||
if (ll.isEmpty())
|
||||
return 0;
|
||||
|
||||
QString *ret = new QString(*ll.first());
|
||||
for (int i = 1; i < ll.size(); i++)
|
||||
ret->append("\n" + *ll.at(i));
|
||||
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
class PathItem : public TextPathItem
|
||||
@ -208,9 +221,7 @@ private:
|
||||
{return _transform.proj2img(_proj.ll2xy(c));}
|
||||
Coordinates xy2ll(const QPointF &p) const
|
||||
{return _proj.xy2ll(_transform.img2proj(p));}
|
||||
void processPointLabels(const QList<MapData::Point> &points,
|
||||
QList<TextItem*> &textItems) const;
|
||||
void processAreaLabels(const QVector<PainterPath> &paths,
|
||||
void processLabels(const QList<MapData::Point> &points,
|
||||
QList<TextItem*> &textItems) const;
|
||||
void processLineLabels(const QVector<PainterPath> &paths,
|
||||
QList<TextItem*> &textItems) const;
|
||||
|
@ -126,8 +126,13 @@ Style::Rule::Filter::Filter(const MapData &data, const QList<QByteArray> &keys,
|
||||
_vals = valList(vc);
|
||||
}
|
||||
|
||||
bool Style::Rule::match(const QVector<MapData::Tag> &tags) const
|
||||
bool Style::Rule::match(bool path, const QVector<MapData::Tag> &tags) const
|
||||
{
|
||||
Type type = path ? WayType : NodeType;
|
||||
|
||||
if (!(_type == Rule::AnyType || _type == type))
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < _filters.size(); i++)
|
||||
if (!_filters.at(i).match(tags))
|
||||
return false;
|
||||
@ -135,7 +140,7 @@ bool Style::Rule::match(const QVector<MapData::Tag> &tags) const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Style::Rule::match(bool closed, const QVector<MapData::Tag> &tags) const
|
||||
bool Style::Rule::matchPath(bool closed, const QVector<MapData::Tag> &tags) const
|
||||
{
|
||||
Closed cl = closed ? YesClosed : NoClosed;
|
||||
|
||||
@ -471,12 +476,8 @@ void Style::text(QXmlStreamReader &reader, const MapData &data,
|
||||
if (fontSize) {
|
||||
if (line)
|
||||
_pathLabels.append(ri);
|
||||
else {
|
||||
if (rule._type == Rule::WayType || rule._type == Rule::AnyType)
|
||||
_areaLabels.append(ri);
|
||||
if (rule._type == Rule::NodeType || rule._type == Rule::AnyType)
|
||||
_pointLabels.append(ri);
|
||||
}
|
||||
else
|
||||
_labels.append(ri);
|
||||
}
|
||||
|
||||
reader.skipCurrentElement();
|
||||
@ -806,8 +807,7 @@ void Style::load(const MapData &data, qreal ratio)
|
||||
|
||||
std::sort(_symbols.begin(), _symbols.end());
|
||||
std::sort(_lineSymbols.begin(), _lineSymbols.end());
|
||||
std::stable_sort(_pointLabels.begin(), _pointLabels.end());
|
||||
std::stable_sort(_areaLabels.begin(), _areaLabels.end());
|
||||
std::stable_sort(_labels.begin(), _labels.end());
|
||||
std::stable_sort(_pathLabels.begin(), _pathLabels.end());
|
||||
}
|
||||
|
||||
@ -816,8 +816,7 @@ void Style::clear()
|
||||
_paths = QList<PathRender>();
|
||||
_circles = QList<CircleRender>();
|
||||
_pathLabels = QList<TextRender>();
|
||||
_pointLabels = QList<TextRender>();
|
||||
_areaLabels = QList<TextRender>();
|
||||
_labels = QList<TextRender>();
|
||||
_symbols = QList<Symbol>();
|
||||
_lineSymbols = QList<Symbol>();
|
||||
_hillShading = HillShadingRender();
|
||||
@ -864,38 +863,14 @@ QList<const Style::TextRender*> Style::pathLabels(int zoom) const
|
||||
return list;
|
||||
}
|
||||
|
||||
QList<const Style::TextRender*> Style::pointLabels(int zoom) const
|
||||
QList<const Style::TextRender*> Style::labels(int zoom) const
|
||||
{
|
||||
QList<const TextRender*> list;
|
||||
|
||||
for (int i = 0; i < _pointLabels.size(); i++)
|
||||
if (_pointLabels.at(i).rule()._zooms.contains(zoom))
|
||||
list.append(&_pointLabels.at(i));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
QList<const Style::TextRender*> Style::areaLabels(int zoom) const
|
||||
{
|
||||
QList<const TextRender*> list;
|
||||
|
||||
for (int i = 0; i < _areaLabels.size(); i++)
|
||||
if (_areaLabels.at(i).rule()._zooms.contains(zoom))
|
||||
list.append(&_areaLabels.at(i));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
QList<const Style::Symbol*> Style::pointSymbols(int zoom) const
|
||||
{
|
||||
QList<const Symbol*> list;
|
||||
|
||||
for (int i = 0; i < _symbols.size(); i++) {
|
||||
const Symbol &symbol = _symbols.at(i);
|
||||
const Rule &rule = symbol.rule();
|
||||
if (rule._zooms.contains(zoom) && (rule._type == Rule::AnyType
|
||||
|| rule._type == Rule::NodeType))
|
||||
list.append(&symbol);
|
||||
for (int i = 0; i < _labels.size(); i++) {
|
||||
const TextRender &label= _labels.at(i);
|
||||
if (label.rule()._zooms.contains(zoom))
|
||||
list.append(&label);
|
||||
}
|
||||
|
||||
return list;
|
||||
@ -914,15 +889,13 @@ QList<const Style::Symbol*> Style::lineSymbols(int zoom) const
|
||||
return list;
|
||||
}
|
||||
|
||||
QList<const Style::Symbol*> Style::areaSymbols(int zoom) const
|
||||
QList<const Style::Symbol*> Style::symbols(int zoom) const
|
||||
{
|
||||
QList<const Symbol*> list;
|
||||
|
||||
for (int i = 0; i < _symbols.size(); i++) {
|
||||
const Symbol &symbol = _symbols.at(i);
|
||||
const Rule &rule = symbol.rule();
|
||||
if (rule._zooms.contains(zoom) && (rule._type == Rule::AnyType
|
||||
|| rule._type == Rule::WayType))
|
||||
if (symbol.rule()._zooms.contains(zoom))
|
||||
list.append(&symbol);
|
||||
}
|
||||
|
||||
|
@ -18,11 +18,8 @@ public:
|
||||
public:
|
||||
Rule() : _type(AnyType), _closed(AnyClosed), _zooms(0, 127) {}
|
||||
|
||||
bool match(const QVector<MapData::Tag> &tags) const;
|
||||
bool match(bool closed, const QVector<MapData::Tag> &tags) const;
|
||||
bool match(int zoom, bool closed,
|
||||
const QVector<MapData::Tag> &tags) const;
|
||||
bool match(int zoom, const QVector<MapData::Tag> &tags) const;
|
||||
bool match(bool path, const QVector<MapData::Tag> &tags) const;
|
||||
bool matchPath(bool closed, const QVector<MapData::Tag> &tags) const;
|
||||
|
||||
private:
|
||||
enum Type {
|
||||
@ -109,8 +106,12 @@ public:
|
||||
if (!filter.isTautology())
|
||||
_filters.append(filter);
|
||||
}
|
||||
|
||||
bool match(int zoom, Type type, Closed closed,
|
||||
const QVector<MapData::Tag> &tags) const;
|
||||
bool match(int zoom, bool closed,
|
||||
const QVector<MapData::Tag> &tags) const;
|
||||
bool match(int zoom, const QVector<MapData::Tag> &tags) const;
|
||||
|
||||
friend class Style;
|
||||
|
||||
@ -266,9 +267,9 @@ public:
|
||||
QList<const CircleRender *> circles(int zoom,
|
||||
const QVector<MapData::Tag> &tags) const;
|
||||
QList<const TextRender*> pathLabels(int zoom) const;
|
||||
QList<const TextRender*> pointLabels(int zoom) const;
|
||||
QList<const TextRender*> labels(int zoom) const;
|
||||
QList<const TextRender*> areaLabels(int zoom) const;
|
||||
QList<const Symbol*> pointSymbols(int zoom) const;
|
||||
QList<const Symbol*> symbols(int zoom) const;
|
||||
QList<const Symbol*> areaSymbols(int zoom) const;
|
||||
QList<const Symbol*> lineSymbols(int zoom) const;
|
||||
const HillShadingRender *hillShading(int zoom) const;
|
||||
@ -317,7 +318,7 @@ private:
|
||||
HillShadingRender _hillShading;
|
||||
QList<PathRender> _paths;
|
||||
QList<CircleRender> _circles;
|
||||
QList<TextRender> _pathLabels, _pointLabels, _areaLabels;
|
||||
QList<TextRender> _labels, _pathLabels;
|
||||
QList<Symbol> _symbols, _lineSymbols;
|
||||
|
||||
bool loadXml(const QString &path, const MapData &data, qreal ratio);
|
||||
|