diff --git a/.github/workflows/build-tiles.yml b/.github/workflows/build-tiles.yml index 1759148..f84ee7d 100644 --- a/.github/workflows/build-tiles.yml +++ b/.github/workflows/build-tiles.yml @@ -1,4 +1,4 @@ -name: Test +name: Build one .zip (and upload) (sub-workflow) on: workflow_call: @@ -22,6 +22,7 @@ jobs: env: DEBIAN_FRONTEND: noninteractive TZ: America/NewYork + GH_TOKEN: ${{ github.token }} runs-on: ubuntu-22.04 @@ -44,19 +45,16 @@ jobs: TILENAME=${{ inputs.setname }} make -f Makefile.tiles ${{ inputs.setname }}_tile_list_chunks TILENAME=${{ inputs.setname }} make -n -f Makefile.tiles ${{ inputs.zip }} - - name: Setup Ortho4XP - run: make Ortho4XP - - name: Build id: build run: | TILENAME=${{ inputs.setname }} make -f Makefile.tiles ${{ inputs.setname }}_tile_list_chunks - TILENAME=${{ inputs.setname }} timeout 300m make -f Makefile.tiles ${{ inputs.zip }} && echo "done=true" >> "$GITHUB_OUTPUT" || echo "done=false" >> "$GITHUB_OUTPUT" + TILENAME=${{ inputs.setname }} timeout 300m make -f Makefile.tiles ${{ inputs.zip }}.info && echo "done=true" >> "$GITHUB_OUTPUT" || echo "done=false" >> "$GITHUB_OUTPUT" + TILENAME=${{ inputs.tileset }} make -f Makefile.tiles ${{ inputs.zip }}.sha256 - name: Show work if: steps.build.outputs.done == 'true' run: | - TILENAME=${{ inputs.tileset }} make -f Makefile.tiles ${{ inputs.zip }}.sha256 echo '### ${{ inputs.tileset }} : ${{ inputs.zip }}' >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY #unzip -l ${{ inputs.zip }} *.dsf >> $GITHUB_STEP_SUMMARY @@ -91,6 +89,10 @@ jobs: if: needs.build.outputs.done == 'false' needs: build runs-on: ubuntu-22.04 + env: + DEBIAN_FRONTEND: noninteractive + TZ: America/NewYork + GH_TOKEN: ${{ github.token }} outputs: done: ${{ steps.rebuild.outputs.done }} @@ -120,12 +122,12 @@ jobs: id: rebuild run: | TILENAME=${{ inputs.setname }} make -f Makefile.tiles ${{ inputs.setname }}_tile_list_chunks - TILENAME=${{ inputs.setname }} timeout 300m make -f Makefile.tiles ${{ inputs.zip }} && echo "done=true" >> "$GITHUB_OUTPUT" || echo "done=false" >> "$GITHUB_OUTPUT" + TILENAME=${{ inputs.setname }} timeout 300m make -f Makefile.tiles ${{ inputs.zip }}.info && echo "done=true" >> "$GITHUB_OUTPUT" || echo "done=false" >> "$GITHUB_OUTPUT" + TILENAME=${{ inputs.tileset }} make -f Makefile.tiles ${{ inputs.zip }}.sha256 - name: Show work if: steps.rebuild.outputs.done == 'true' run: | - TILENAME=${{ inputs.tileset }} make -f Makefile.tiles ${{ inputs.zip }}.sha256 echo '### ${{ inputs.tileset }} : ${{ inputs.zip }}' >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY #unzip -l ${{ inputs.zip }} *.dsf >> $GITHUB_STEP_SUMMARY @@ -160,6 +162,10 @@ jobs: if: needs.rebuild.outputs.done == 'false' needs: rerun runs-on: ubuntu-22.04 + env: + DEBIAN_FRONTEND: noninteractive + TZ: America/NewYork + GH_TOKEN: ${{ github.token }} outputs: done: ${{ steps.rebuild.outputs.done }} @@ -189,12 +195,12 @@ jobs: id: rebuild run: | TILENAME=${{ inputs.setname }} make -f Makefile.tiles ${{ inputs.setname }}_tile_list_chunks - TILENAME=${{ inputs.setname }} timeout 300m make -f Makefile.tiles ${{ inputs.zip }} && echo "done=true" >> "$GITHUB_OUTPUT" || echo "done=false" >> "$GITHUB_OUTPUT" + TILENAME=${{ inputs.setname }} timeout 300m make -f Makefile.tiles ${{ inputs.zip }}.info && echo "done=true" >> "$GITHUB_OUTPUT" || echo "done=false" >> "$GITHUB_OUTPUT" + TILENAME=${{ inputs.tileset }} make -f Makefile.tiles ${{ inputs.zip }}.sha256 - name: Show work if: steps.rebuild.outputs.done == 'true' run: | - TILENAME=${{ inputs.tileset }} make -f Makefile.tiles ${{ inputs.zip }}.sha256 echo '### ${{ inputs.tileset }} : ${{ inputs.zip }}' >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY #unzip -l ${{ inputs.zip }} *.dsf >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/push-main.yml b/.github/workflows/push-main.yml index 9107255..7c2d35f 100644 --- a/.github/workflows/push-main.yml +++ b/.github/workflows/push-main.yml @@ -1,4 +1,4 @@ -name: Main +name: Build tileset (and upload) on: workflow_dispatch: @@ -24,6 +24,10 @@ on: jobs: ziplist: runs-on: ubuntu-22.04 + env: + DEBIAN_FRONTEND: noninteractive + TZ: America/NewYork + GH_TOKEN: ${{ github.token }} outputs: chunks: ${{ steps.chunks.outputs.chunks }} steps: @@ -44,6 +48,8 @@ jobs: strategy: matrix: ${{ fromJSON(needs.ziplist.outputs.chunks) }} + # might still need several restarts of failed jobs, but prevents us from losing successful work + fail-fast: false uses: ./.github/workflows/build-tiles.yml with: @@ -59,6 +65,10 @@ jobs: environment: release runs-on: ubuntu-22.04 + env: + DEBIAN_FRONTEND: noninteractive + TZ: America/NewYork + GH_TOKEN: ${{ github.token }} steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/run-one-tile.yml b/.github/workflows/run-one-tile.yml new file mode 100644 index 0000000..a0ce1e3 --- /dev/null +++ b/.github/workflows/run-one-tile.yml @@ -0,0 +1,41 @@ +name: Build one tile (and create artifact) + +on: + workflow_dispatch: + inputs: + tile: + type: string + default: '+62-008' + +jobs: + build: + env: + DEBIAN_FRONTEND: noninteractive + TZ: America/NewYork + GH_TOKEN: ${{ github.token }} + + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install reqs + run: | + sudo apt-get update + sudo apt-get install -y python3 python3-pip python3-tk zip libgeos-dev + python3 -m pip install -r requirements.txt + make --version + + - name: Build + id: build + run: | + timeout 20m make -f Makefile.tiles z_aosingle_${{ inputs.tile }}.zip + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: z_aosingle_${{ inputs.tile }}.zip + path: ./z_aosingle_${{ inputs.tile }}.zip + retention-days: 2 + diff --git a/.github/workflows/run-one.yml b/.github/workflows/run-one.yml index 1c6eeda..a5cb2ed 100644 --- a/.github/workflows/run-one.yml +++ b/.github/workflows/run-one.yml @@ -1,4 +1,4 @@ -name: Run one +name: Build one .zip (and upload) on: workflow_dispatch: diff --git a/.github/workflows/test-main.yml b/.github/workflows/test-main.yml index 3db5e14..7c0e5ab 100644 --- a/.github/workflows/test-main.yml +++ b/.github/workflows/test-main.yml @@ -1,4 +1,4 @@ -name: Test +name: Build test tileset on: push: @@ -6,6 +6,10 @@ on: jobs: ziplist: runs-on: ubuntu-22.04 + env: + DEBIAN_FRONTEND: noninteractive + TZ: America/NewYork + GH_TOKEN: ${{ github.token }} outputs: chunks: ${{ steps.chunks.outputs.chunks }} steps: diff --git a/.gitignore b/.gitignore index fec8021..dd1a2db 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ *.swp Ortho4XP *_tile_list.* +/var/ +/.venv/ +/z_*_*/ +/z_*_*.zip diff --git a/Makefile b/Makefile deleted file mode 100644 index 323b5fa..0000000 --- a/Makefile +++ /dev/null @@ -1,87 +0,0 @@ -SPLITSIZE?=150 - -AUS_PACS:=$(addprefix z_aus_pac_, $(shell ls aus_pac_tile_list.* | awk -F. '{ print $$2 }') ) -AUS_PAC_ZIPS=$(addsuffix .zip, $(AUS_PACS)) - -NAS:=$(addprefix z_na_, $(shell ls na_tile_list.* | awk -F. '{ print $$2 }') ) -NA_ZIPS=$(addsuffix .zip, $(NAS)) - -EURS:=$(addprefix z_eur_, $(shell ls eur_tile_list.* | awk -F. '{ print $$2 }') ) -EUR_ZIPS=$(addsuffix .zip, $(EURS)) - -TESTS:=$(addprefix z_test_, $(shell ls test_tile_list.* | awk -F. '{ print $$2 }') ) -TEST_ZIPS=$(addsuffix .zip, $(TESTS)) - - -ZIPS=$(AUS_PAC_ZIPS) $(NA_ZIPS) $(EUR_ZIPS) $(TEST_ZIPS) - -# Get the tiles listed in each list file -.SECONDEXPANSION: -AUS_PAC_TILES = $(addprefix Ortho4XP/Tiles/zOrtho4XP_, $(basename $(shell cat aus_pac_tile_list.$* ) ) ) -NA_TILES = $(addprefix Ortho4XP/Tiles/zOrtho4XP_, $(basename $(shell cat na_tile_list.$* ) ) ) -EUR_TILES = $(addprefix Ortho4XP/Tiles/zOrtho4XP_, $(basename $(shell cat eur_tile_list.$* ) ) ) -TEST_TILES = $(addprefix Ortho4XP/Tiles/zOrtho4XP_, $(basename $(shell cat test_tile_list.$* ) ) ) - -z_aus_pac_%: aus_pac_tile_list.% $${AUS_PAC_TILES} - echo "Going to do some $@" - -z_na_%: na_tile_list.% $${NA_TILES} - echo "Going to do some $@" - -z_eur_%: eur_tile_list.% $${EUR_TILES} - echo "Going to do some $@" - -z_test_%: test_tile_list.% $${TEST_TILES} - echo "Going to do some $@" - - -#allzips: $(AUS_PAC_ZIPS) $(NA_ZIPS) - -# -# Ortho4XP setup -# - -ortho4xp.diff: Ortho4XP - cd Ortho4XP && git diff > ../ortho4xp.diff - -Ortho4XP: - git clone --depth=1 https://github.com/oscarpilote/Ortho4XP.git - cd $@ && patch -p1 -u < ../ortho4xp.diff - cp extract_overlay.py $@/. - cp Ortho4XP.cfg $@/. - mkdir $@/tmp - - -%_chunks: % - split $< -d -l $(SPLITSIZE) $<. - -# -# Tile pack setup -# - -.SECONDARY: $(AUS_PAC_TILES) $(NA_TILES) $(EUR_TILES) $(TEST_TILES) -Ortho4XP/Tiles/zOrtho4XP_%: Ortho4XP - @echo "Setup per tile config, if possible" - mkdir -p $@ - -cp Ortho4XP_$*.cfg $@/. - @echo "Make tile $@" - set -e;\ - export COORDS=$$(echo $* | sed -e 's/\([-+][0-9]\+\)\([-+][0-9]\+\)/\1 \2/g');\ - cd $< && python3 Ortho4XP_v130.py $$COORDS BI 16 - -# Static pattern rule for the zip files -$(ZIPS): z_%.zip: z_% - mkdir -p $< - cp -r Ortho4XP/Tiles/zOrtho4XP_*/'Earth nav data' $/dev/null | awk -F. '{ print $$2 }') ) TILE_ZIPS=$(addsuffix .zip, $(TILES)) ZIPS=$(TILE_ZIPS) +# paranthesis to use in shell commands +# make chokes on () in shell commands +OP:=( +CP:=) + # Get the tiles listed in each list file .SECONDEXPANSION: -TILE_FILES = $(addsuffix .dsf, $(addprefix Ortho4XP/Tiles/*/*/*/, $(basename $(shell cat $(TILENAME)_tile_list.$* ) ) ) ) -#TILE_FILES = $(basename $(shell cat $(TILENAME)_tile_list.$* ) ) - +TILE_FILES = $(addsuffix .dsf, $(addprefix Ortho4XP/Tiles/*/*/*/, $(basename $(shell cat $(TILENAME)_tile_list.$* 2>/dev/null ) ) ) ) all: $(ZIPS) +# creates directories +%/: + @mkdir -p $@ + +# +# Work on tile lists +# + z_$(TILENAME)_%: $(TILENAME)_tile_list.% $${TILE_FILES} - @echo "Going to do some $@" - @echo "Expected tile len:" - @cat $< | wc -l - @echo "Actual tile len:" - @unzip -l $@.zip *.dsf | grep dsf | wc -l + @echo "[$@]" -z_$(TILENAME)_%.zip.info: $(TILENAME)_tile_list.% +z_$(TILENAME)_%.zip.info: z_$(TILENAME)_%.zip + @echo "[$@]" @echo "-----------------------------------" @echo "Post processing info:" - comm --total -3 <( unzip -l $(basename $@) *.dsf | awk -F/ '/.*\.dsf/ { print $$4 }' | sort ) <( cat $< | sort ) + @comm --total -3 <( unzip -l $(basename $@) *.dsf | awk -F/ '/.*\.dsf/ { print $$4 }' | sort ) <( cat $(TILENAME)_tile_list.$* | sort ) @echo "-----------------------------------" - export EXPECTED=$$(cat $< | wc -l); \ - export ACTUAL=$$(unzip -l $(basename $@) *.dsf | grep dsf | wc -l); \ - echo "Expected tile len: $$EXPECTED"; \ - echo "Actual tile len: $$ACTUAL"; \ + @export EXPECTED=$$(cat $(TILENAME)_tile_list.$* | wc -l); \ + export ACTUAL=$$(unzip -l $(basename $@) *.dsf | grep dsf | wc -l); \ + echo "Expected tile len: $$EXPECTED"; \ + echo "Actual tile len: $$ACTUAL"; \ [ $$EXPECTED -eq $$ACTUAL ] + # # Ortho4XP setup # ortho4xp.diff: + @echo "[$@]" cd Ortho4XP && git diff > ../ortho4xp.diff Ortho4XP: + @echo "[$@]" git clone --depth=1 https://github.com/oscarpilote/Ortho4XP.git cd $@ && patch -p1 -u < ../ortho4xp.diff cp extract_overlay.py $@/. cp Ortho4XP.cfg $@/. - mkdir $@/tmp + @mkdir $@/tmp + @echo "Setting up symlinks in order to not care about Ortho4XP's expected directory structure in ./Elevation_data..." + @mkdir -p $@/Elevation_data && cd $@/Elevation_data \ + && bash -c 'for lat in {-9..9}; do for lon in {-18..18}; do ln -snfr ./ "./$$(printf "%+d0%+03d0" "$$lat" "$$lon")"; done; done' +# +# Custom tile elevation +# + +# generates the targets var/run/neighboursOfTile_%.elevation with surrounding tiles' elevations +# as prerequisites (takes a little while, 360*180 rules): +var/run/Makefile.elevationRules: | $$(@D)/ + @echo "[$@]" + @bin/genMakefileElevationRules > $@ +include var/run/Makefile.elevationRules + +var/run/tile_%.elevation: var/cache/elevation/elevation_%.zip Ortho4XP | $$(@D)/ + @# Unzips if file not empty, but fails on unzip error. + @# Ignores the .zip if empty + @if [ -s "var/cache/elevation/elevation_$*.zip" ]; then \ + printf "[$@] unzipping custom elevation: %s\n" \ + "$$(unzip -o -d Ortho4XP/Elevation_data/ var/cache/elevation/elevation_$*.zip | tr "\n" " | ")"; \ + else \ + echo "[$@] no custom elevation for this tile"; \ + fi + @touch $@ + +var/run/elevationRelease.json: | $$(@D)/ + @echo "[$@]" + @json="$$(gh api $(ELEV_RELEASE_JSON_ENDPOINT) --paginate)" \ + && echo "$$json" > $@ \ + && printf "[$@] got %s\n" "$$(jq -r '.assets[].name' $@ | tr --delete "elevation_" | tr --delete ".zip" | tr "\n" ",")" + +var/cache/elevation/elevation_%.zip: var/run/elevationRelease.json | $$(@D)/ + @# Fails if we expect a file but download failed. + @# Creates an empty .zip file if there is no custom elevation. + @url=$$(jq -r '.assets[] | select$(OP).name == "elevation_$*.zip"$(CP) .browser_download_url' \ + var/run/elevationRelease.json); \ + if [ -n "$$url" ]; then \ + echo "[$@] downloading custom elevation"; \ + wget --continue --quiet -O $@ "$$url" && touch $@; \ + else \ + echo "[$@] no custom elevation for this tile"; \ + touch $@; \ + fi + +# +# Split tile list +# #$(TILENAME)_tile_list.%: $(TILENAME)_tile_list_chunks + $(TILENAME)_tile_list_chunks: $(TILENAME)_tile_list + @echo "[$@]" split $< -d -l $(SPLITSIZE) $<. - # # Tile pack setup # -#Ortho4XP/Tiles/zOrtho4XP_%: Ortho4XP/Tiles/zOrtho4XP_%/.done -#.PHONY: %.dsf -#%.dsf: Ortho4XP/Tiles/zOrtho4XP_%/.done -# echo $< -#Ortho4XP/Tiles/zOrtho4XP_%/.done: Ortho4XP -Ortho4XP/Tiles/*/*/*/%.dsf: Ortho4XP - @echo "Make tile $*" +Ortho4XP/Tiles/*/*/*/%.dsf: Ortho4XP var/run/neighboursOfTile_%.elevation + @echo [$@] + @mkdir -p Ortho4XP/Tiles/zOrtho4XP_$* @echo "Setup per tile config, if possible" - mkdir -p Ortho4XP/Tiles/zOrtho4XP_$* - -cp Ortho4XP_$*.cfg Ortho4XP/Tiles/zOrtho4XP_$*/. - @echo "Make tile $(@)" - set -e;\ + @cp Ortho4XP_$*.cfg Ortho4XP/Tiles/zOrtho4XP_$*/. 2>/dev/null || true + @echo "Available elevation data for this tile before Ortho4XP run (25M is HD 1\", 2.8M is 3\"):" + @#ls Ortho4XP/Elevation_data/ -sh + @hgtLat="$$(grep -Eo '^.{3}' <<< $* | tr "+" "N" | tr "-" "S")" \ + && hgtLon="$$(grep -Eo '.{4}$$' <<< $* | tr "+" "E" | tr "-" "W")" \ + && hgtFilePath=Ortho4XP/Elevation_data/"$$hgtLat$$hgtLon".hgt \ + && ( [ -e "$$hgtFilePath" ] && ls -sh "$$hgtFilePath" || true ) + # this silences deprecation warnings in Ortho4XP for more concise output + @set -e;\ export COORDS=$$(echo $(@) | sed -e 's/.*\/\([-+][0-9]\+\)\([-+][0-9]\+\).dsf/\1 \2/g');\ - echo $$COORDS; \ - cd $< && python3 Ortho4XP_v130.py $$COORDS BI $(ZL) || ( echo "ERROR DETECTED! Retry tile $@ with noroads config."; cp $(CURDIR)/Ortho4XP_noroads.cfg $(CURDIR)/Ortho4XP/Tiles/zOrtho4XP_$*/Ortho4XP_$*.cfg && python3 Ortho4XP_v130.py $$COORDS BI $(ZL) ) - #touch $@ + cd Ortho4XP \ + && python3 Ortho4XP_v130.py $$COORDS BI $(ZL) 2>&1 | grep -v 'is deprecated' \ + || ( \ + echo "ERROR DETECTED! Retry tile $@ with noroads config."; \ + cp $(CURDIR)/Ortho4XP_noroads.cfg $(CURDIR)/Ortho4XP/Tiles/zOrtho4XP_$*/Ortho4XP_$*.cfg \ + && python3 Ortho4XP_v130.py $$COORDS BI $(ZL) 2>&1 | grep -v 'is deprecated' \ + ); + +var/run/z_aosingle_%: Ortho4XP/Tiles/*/*/*/%.dsf + @echo "[$@]" + @cp -r Ortho4XP/Tiles/zOrtho4XP_$*/ var/run/z_aosingle_$* + +z_aosingle_%.zip: var/run/z_aosingle_% + @echo "[$@]" + @cd var/run/ && zip -r ../../$@ z_aosingle_$*/ .SECONDARY: $(TILE_FILES) # Static pattern rule for the zip files $(ZIPS): z_%.zip: z_% - mkdir -p $< - cp -r Ortho4XP/Tiles/zOrtho4XP_*/'Earth nav data' $ $@ clean: + @echo "[$@]" + -rm -rf Ortho4XP/Tiles/* + -rm -rf var/run + -rm -f $(ZIPS) + -rm -rf z_$(TILENAME)* + -rm -rf z_aosingle_* + -rm -f $(TILENAME)_tile_list.* + +distclean: clean + @echo "[$@]" -rm -rf Ortho4XP - -rm $(ZIPS) - -rm -rf z_$(TILENAME) - -rm $(TILENAME)_tile_list.* + -rm -rf var + -rm -f z_* + -rm -f *_tile_list.* diff --git a/bin/genMakefileElevationRules b/bin/genMakefileElevationRules new file mode 100755 index 0000000..6a769ce --- /dev/null +++ b/bin/genMakefileElevationRules @@ -0,0 +1,25 @@ +#!/bin/bash +# Outputs Makefile rules for elevations. +# Ortho4XP uses all surrounding tiles' elevations for generation of a tile. +# The generated rules look like this: +# var/run/neighboursOfTile_+12+123.elevation: var/run/tile_+12+123.elevation ... |$(@D) + +# saner programming env: these switches turn some bugs into errors +set -o errexit -o pipefail -o noclobber -o nounset + +for lat in $(seq -90 90); do + for lon in $(seq -180 179); do + printf "var/run/neighboursOfTile_%+03d%+04d.elevation:" "$lat" "$lon" + for dLon in -1 0 1; do + for dLat in -1 0 1; do + _lat="$((lat + dLat))" + # wrap around although not needed in 100 years. Elevation data for the Aleutians anybody? + _lon="$(( ($lon + $dLon + 540) % 360 - 180))" + printf "var/run/tile_%+03d%+04d.elevation " "$_lat" "$_lon" + done + done + echo '|$(@D)' + echo ' @echo "[$@]"' + echo ' @touch $@' + done +done diff --git a/bin/prepareAssetsElevationData b/bin/prepareAssetsElevationData new file mode 100755 index 0000000..c8d9c7a --- /dev/null +++ b/bin/prepareAssetsElevationData @@ -0,0 +1,30 @@ +#!/bin/bash +# saner programming env: these switches turn some bugs into errors +set -o errexit -o pipefail -o noclobber -o nounset + +zipsDir="${1:-}" +dir="$(dirname "$0")" +targetDir="$(readlink -f "$dir/../var/cache/elevation")" + +if ! [ -d "$zipsDir" ]; then + cat <<-EOL + Usage: $0 + + The source .zips will be copied to + ‹$targetDir› + and renamed to tile name format for being uploaded to a release. + + Example with the Github CLI: + ‹for i in var/cache/elevation/*; do gh release upload elevation-v0.0.1 \$i; done› + EOL + exit 1 +fi + +mkdir -p "$targetDir" + +for filePath in "$zipsDir"/*.zip; do + fileNameElevationFormat="$(basename "$filePath")" + fileNameTile="elevation_$(sed -E -e 's/N|E/+/g' -e 's/S|W/-/g' <<< "$fileNameElevationFormat")" + printf "%s\n → %s\n" "$fileNameElevationFormat" "$fileNameTile" + cp "$filePath" "$targetDir/$fileNameTile" +done diff --git a/eur_tile_list b/eur_tile_list index c7c2968..d3b2b84 100644 --- a/eur_tile_list +++ b/eur_tile_list @@ -1513,469 +1513,139 @@ +59-004.dsf +59+005.dsf +59-005.dsf -+59+006.dsf -+59-006.dsf -+59+007.dsf -+59-007.dsf -+59+008.dsf -+59+009.dsf -+59+010.dsf -+59+011.dsf -+59+012.dsf -+59+013.dsf -+59+014.dsf -+59+015.dsf -+59+016.dsf -+59+017.dsf -+59+018.dsf -+59+019.dsf -+59+020.dsf -+59+021.dsf -+59+022.dsf -+59+023.dsf -+59+024.dsf -+59+025.dsf -+59+026.dsf -+59+027.dsf -+59+028.dsf -+59+029.dsf -+59+030.dsf -+59+031.dsf -+59+032.dsf -+59+033.dsf -+59+034.dsf -+59+035.dsf -+59+036.dsf -+59+037.dsf -+59+038.dsf -+59+039.dsf -+59+040.dsf -+59+041.dsf -+59+042.dsf -+59+043.dsf -+59+044.dsf -+59+045.dsf -+59+046.dsf -+59+047.dsf -+59+048.dsf -+59+049.dsf -+60-001.dsf -+60-002.dsf -+60-003.dsf -+60+004.dsf -+60+005.dsf -+60+006.dsf -+60+007.dsf -+60+008.dsf -+60+009.dsf -+60+010.dsf -+60+011.dsf -+60+012.dsf -+60+013.dsf -+60+014.dsf -+60+015.dsf -+60+016.dsf -+60+017.dsf -+60+018.dsf -+60+019.dsf -+60+020.dsf -+60+021.dsf -+60+022.dsf -+60+023.dsf -+60+024.dsf -+60+025.dsf -+60+026.dsf -+60+027.dsf -+60+028.dsf -+60+029.dsf -+60+030.dsf -+60+031.dsf -+60+032.dsf -+60+033.dsf -+60+034.dsf -+60+035.dsf -+60+036.dsf -+60+037.dsf -+60+038.dsf -+60+039.dsf -+60+040.dsf -+60+041.dsf -+60+042.dsf -+60+043.dsf -+60+044.dsf -+60+045.dsf -+60+046.dsf -+60+047.dsf -+60+048.dsf -+60+049.dsf -+61+004.dsf -+61+005.dsf -+61+006.dsf -+61+007.dsf -+61-007.dsf -+61+008.dsf -+61-008.dsf -+61+009.dsf -+61+010.dsf -+61+011.dsf -+61+012.dsf -+61+013.dsf -+61+014.dsf -+61+015.dsf -+61+016.dsf -+61+017.dsf -+61+021.dsf -+61+022.dsf -+61+023.dsf -+61+024.dsf -+61+025.dsf -+61+026.dsf -+61+027.dsf -+61+028.dsf -+61+029.dsf -+61+030.dsf -+61+031.dsf -+61+032.dsf -+61+033.dsf -+61+034.dsf -+61+035.dsf -+61+036.dsf -+61+037.dsf -+61+038.dsf -+61+039.dsf -+61+040.dsf -+61+041.dsf -+61+042.dsf -+61+043.dsf -+61+044.dsf -+61+045.dsf -+61+046.dsf -+61+047.dsf -+61+048.dsf -+61+049.dsf -+62+004.dsf -+62+005.dsf -+62+006.dsf -+62+007.dsf -+62-007.dsf -+62+008.dsf -+62-008.dsf -+62+009.dsf -+62+010.dsf -+62+011.dsf -+62+012.dsf -+62+013.dsf -+62+014.dsf -+62+015.dsf -+62+016.dsf -+62+017.dsf -+62+018.dsf -+62+020.dsf -+62+021.dsf -+62+022.dsf -+62+023.dsf -+62+024.dsf -+62+025.dsf -+62+026.dsf -+62+027.dsf -+62+028.dsf -+62+029.dsf -+62+030.dsf -+62+031.dsf -+62+032.dsf -+62+033.dsf -+62+034.dsf -+62+035.dsf -+62+036.dsf -+62+037.dsf -+62+038.dsf -+62+039.dsf -+62+040.dsf -+62+041.dsf -+62+042.dsf -+62+043.dsf -+62+044.dsf -+62+045.dsf -+62+046.dsf -+62+047.dsf -+62+048.dsf -+62+049.dsf -+63+007.dsf -+63+008.dsf -+63+009.dsf -+63+010.dsf -+63+011.dsf -+63+012.dsf -+63+013.dsf -+63+014.dsf -+63+015.dsf -+63+016.dsf -+63+017.dsf -+63+018.dsf -+63+019.dsf -+63+020.dsf -+63+021.dsf -+63+022.dsf -+63+023.dsf -+63+024.dsf -+63+025.dsf -+63+026.dsf -+63+027.dsf -+63+028.dsf -+63+029.dsf -+63+030.dsf -+63+031.dsf -+63+032.dsf -+63+033.dsf -+63+034.dsf -+63+035.dsf -+63+036.dsf -+63+037.dsf -+63+038.dsf -+63+039.dsf -+63+040.dsf -+63+041.dsf -+63+042.dsf -+63+043.dsf -+63+044.dsf -+63+045.dsf -+63+046.dsf -+63+047.dsf -+63+048.dsf -+63+049.dsf -+64+009.dsf -+64+010.dsf -+64+011.dsf -+64+012.dsf -+64+013.dsf -+64+014.dsf -+64+015.dsf -+64+016.dsf -+64+017.dsf -+64+018.dsf -+64+019.dsf -+64+020.dsf -+64+021.dsf -+64+023.dsf -+64+024.dsf -+64+025.dsf -+64+026.dsf -+64+027.dsf -+64+028.dsf -+64+029.dsf -+64+030.dsf -+64+031.dsf -+64+032.dsf -+64+033.dsf -+64+034.dsf -+64+035.dsf -+64+036.dsf -+64+037.dsf -+64+038.dsf -+64+039.dsf -+64+040.dsf -+64+041.dsf -+64+042.dsf -+64+043.dsf -+64+044.dsf -+64+045.dsf -+64+046.dsf -+64+047.dsf -+64+048.dsf -+64+049.dsf -+65+010.dsf -+65+011.dsf -+65+012.dsf -+65+013.dsf -+65+014.dsf -+65+015.dsf -+65+016.dsf -+65+017.dsf -+65+018.dsf -+65+019.dsf -+65+020.dsf -+65+021.dsf -+65+022.dsf -+65+023.dsf -+65+024.dsf -+65+025.dsf -+65+026.dsf -+65+027.dsf -+65+028.dsf -+65+029.dsf -+65+030.dsf -+65+031.dsf -+65+032.dsf -+65+033.dsf -+65+034.dsf -+65+035.dsf -+65+036.dsf -+65+037.dsf -+65+039.dsf -+65+040.dsf -+65+041.dsf -+65+042.dsf -+65+043.dsf -+65+044.dsf -+65+045.dsf -+65+046.dsf -+65+047.dsf -+65+048.dsf -+65+049.dsf -+66+011.dsf -+66+012.dsf -+66+013.dsf -+66+014.dsf -+66+015.dsf -+66+016.dsf -+66+017.dsf -+66+018.dsf -+66+019.dsf -+66+020.dsf -+66+021.dsf -+66+022.dsf -+66+023.dsf -+66+024.dsf -+66+025.dsf -+66+026.dsf -+66+027.dsf -+66+028.dsf -+66+029.dsf -+66+030.dsf -+66+031.dsf -+66+032.dsf -+66+033.dsf -+66+034.dsf -+66+035.dsf -+66+036.dsf -+66+037.dsf -+66+038.dsf -+66+039.dsf -+66+040.dsf -+66+041.dsf -+66+042.dsf -+66+043.dsf -+66+044.dsf -+66+045.dsf -+66+046.dsf -+66+047.dsf -+66+048.dsf -+66+049.dsf -+67+011.dsf -+67+012.dsf -+67+013.dsf -+67+014.dsf -+67+015.dsf -+67+016.dsf -+67+017.dsf -+67+018.dsf -+67+019.dsf -+67+020.dsf -+67+021.dsf -+67+022.dsf -+67+023.dsf -+67+024.dsf -+67+025.dsf -+67+026.dsf -+67+027.dsf -+67+028.dsf -+67+029.dsf -+67+030.dsf -+67+031.dsf -+67+032.dsf -+67+033.dsf -+67+034.dsf -+67+035.dsf -+67+036.dsf -+67+037.dsf -+67+038.dsf -+67+039.dsf -+67+040.dsf -+67+041.dsf -+67+043.dsf -+67+044.dsf -+67+045.dsf -+67+046.dsf -+67+047.dsf -+67+048.dsf -+67+049.dsf -+68+012.dsf -+68+013.dsf -+68+014.dsf -+68+015.dsf -+68+016.dsf -+68+017.dsf -+68+018.dsf -+68+019.dsf -+68+020.dsf -+68+021.dsf -+68+022.dsf -+68+023.dsf -+68+024.dsf -+68+025.dsf -+68+026.dsf -+68+027.dsf -+68+028.dsf -+68+029.dsf -+68+030.dsf -+68+031.dsf -+68+032.dsf -+68+033.dsf -+68+034.dsf -+68+035.dsf -+68+036.dsf -+68+037.dsf -+68+038.dsf -+68+039.dsf -+68+043.dsf -+68+044.dsf -+68+045.dsf -+68+046.dsf -+68+048.dsf -+68+049.dsf -+69+015.dsf -+69+016.dsf -+69+017.dsf -+69+018.dsf -+69+019.dsf -+69+020.dsf -+69+021.dsf -+69+022.dsf -+69+023.dsf -+69+024.dsf -+69+025.dsf -+69+026.dsf -+69+027.dsf -+69+028.dsf -+69+029.dsf -+69+030.dsf -+69+031.dsf -+69+032.dsf -+69+033.dsf -+69+034.dsf -+69+035.dsf -+69+036.dsf -+69+048.dsf -+69+049.dsf -+70+018.dsf -+70+019.dsf -+70+020.dsf -+70+021.dsf -+70+022.dsf -+70+023.dsf -+70+024.dsf -+70+025.dsf -+70+026.dsf -+70+027.dsf -+70+028.dsf -+70+029.dsf -+70+030.dsf -+70+031.dsf -+71+023.dsf -+71+024.dsf -+71+025.dsf -+71+026.dsf -+71+027.dsf -+71+028.dsf -+74+018.dsf -+74+019.dsf ++51-002.dsf ++55-003.dsf ++59-002.dsf ++57-002.dsf ++58-007.dsf ++52-009.dsf ++53-002.dsf ++54-005.dsf ++58-006.dsf ++51-008.dsf ++56-007.dsf ++76+009.dsf ++76+010.dsf ++76+011.dsf ++76+012.dsf ++76+013.dsf ++76+014.dsf ++76+015.dsf ++76+016.dsf ++76+017.dsf ++76+018.dsf ++76+019.dsf ++76+020.dsf ++76+021.dsf ++76+022.dsf ++76+023.dsf ++76+024.dsf ++76+025.dsf ++76+026.dsf ++76+027.dsf ++76+028.dsf ++76+029.dsf ++76+030.dsf ++76+031.dsf ++76+032.dsf ++76+033.dsf ++77+009.dsf ++77+010.dsf ++77+011.dsf ++77+012.dsf ++77+013.dsf ++77+014.dsf ++77+015.dsf ++77+016.dsf ++77+017.dsf ++77+018.dsf ++77+019.dsf ++77+020.dsf ++77+021.dsf ++77+022.dsf ++77+023.dsf ++77+024.dsf ++77+025.dsf ++77+026.dsf ++77+027.dsf ++77+028.dsf ++77+029.dsf ++77+030.dsf ++77+031.dsf ++77+032.dsf ++77+033.dsf ++78+009.dsf ++78+010.dsf ++78+011.dsf ++78+012.dsf ++78+013.dsf ++78+014.dsf ++78+015.dsf ++78+016.dsf ++78+017.dsf ++78+018.dsf ++78+019.dsf ++78+020.dsf ++78+021.dsf ++78+022.dsf ++78+023.dsf ++78+024.dsf ++78+025.dsf ++78+026.dsf ++78+027.dsf ++78+028.dsf ++78+029.dsf ++78+030.dsf ++78+031.dsf ++78+032.dsf ++78+033.dsf ++79+009.dsf ++79+010.dsf ++79+011.dsf ++79+012.dsf ++79+013.dsf ++79+014.dsf ++79+015.dsf ++79+016.dsf ++79+017.dsf ++79+018.dsf ++79+019.dsf ++79+020.dsf ++79+021.dsf ++79+022.dsf ++79+023.dsf ++79+024.dsf ++79+025.dsf ++79+026.dsf ++79+027.dsf ++79+028.dsf ++79+029.dsf ++79+030.dsf ++79+031.dsf ++79+032.dsf ++79+033.dsf ++80+009.dsf ++80+010.dsf ++80+011.dsf ++80+012.dsf ++80+013.dsf ++80+014.dsf ++80+015.dsf ++80+016.dsf ++80+017.dsf ++80+018.dsf ++80+019.dsf ++80+020.dsf ++80+021.dsf ++80+022.dsf ++80+023.dsf ++80+024.dsf ++80+025.dsf ++80+026.dsf ++80+027.dsf ++80+028.dsf ++80+029.dsf ++80+030.dsf ++80+031.dsf ++80+032.dsf ++80+033.dsf \ No newline at end of file diff --git a/test_tile_list b/test_tile_list index c8dd3e3..e467ac4 100644 --- a/test_tile_list +++ b/test_tile_list @@ -1,2 +1,10 @@ +00-051.dsf +00-052.dsf ++64-016.dsf ++61-008.dsf ++61-007.dsf ++62-008.dsf ++62-007.dsf ++78+013.dsf ++78+014.dsf ++78+015.dsf