Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
059ca52
initial commit
shred86 Jun 3, 2024
155ffdf
save custom_dem and fill_nodata to global cfg and clean up unused met…
shred86 Jun 4, 2024
c495573
add dependencies for windows and initial commit for .bat
shred86 Jun 4, 2024
1f150c8
update windows bat files
shred86 Jun 5, 2024
0dd91ee
separate requirements for win based on gdal version issue
shred86 Jun 5, 2024
432262a
clean up windows install batch
shred86 Jun 5, 2024
1ebb13d
support for pyinstaller
shred86 Jun 5, 2024
ae50f19
Merge pull request #3 from shred86/dev
shred86 Jun 5, 2024
bc92fc9
fix issue with convert_texture
shred86 Jun 6, 2024
92fc5b5
Merge pull request #5 from shred86/dev
shred86 Jun 6, 2024
27c1f7f
separate O4XP data from libraries when using PyInstaller
shred86 Jun 7, 2024
939f1ce
Merge pull request #6 from shred86/dev
shred86 Jun 7, 2024
32ca9e7
add zoom level asterik
shred86 Jun 8, 2024
b409bed
typo and wording
shred86 Jun 8, 2024
ce3f8b1
auto remove symlink on tile deletion
shred86 Jun 8, 2024
ba472a0
single requirements and update windows bat
shred86 Jun 9, 2024
eb4c0c1
Merge pull request #7 from shred86/dev
shred86 Jun 10, 2024
38d9bdb
fix zone_list issue with tile configuration
shred86 Jun 10, 2024
cd54573
add accidently removed changes from previous merge
shred86 Jun 10, 2024
a14f356
add versioning and save on exit
shred86 Jun 10, 2024
be0611a
update readme with changes
shred86 Jun 10, 2024
de578aa
Merge pull request #10 from shred86/dev
shred86 Jun 10, 2024
428f3c2
include gdal for linux
shred86 Jun 10, 2024
eb79f95
Merge pull request #13 from shred86/dev
shred86 Jun 10, 2024
103a0a5
fix console feedback placement and verbosity in try statement
shred86 Jun 10, 2024
bc7776f
add batch delete for cached data
shred86 Jun 11, 2024
0ca8ef5
Use os.path.join for data path
ColinM9991 Jun 13, 2024
dbece9f
initial commit for config window restructure
shred86 Jun 13, 2024
5f6b3db
Merge pull request #16 from ColinM9991/bugfix/ortho-data-path
shred86 Jun 14, 2024
2031ff9
Use os.path.join for data path
ColinM9991 Jun 13, 2024
af7e8a7
Use os.path.join for data path
ColinM9991 Jun 13, 2024
ca3fa44
auto load tile config, bug fixes, confirm dialog for removing zones
shred86 Jun 15, 2024
142017e
update cfg_vars, fix global_cfg issue, readability changes, more fixes
shred86 Jun 15, 2024
690dfc7
remove global_cfg dict and use globals, clean up cfg_vars
shred86 Jun 15, 2024
7ba4d29
clean up popup window
shred86 Jun 15, 2024
9dfd3b6
add tile zone fix to Tile class, minor visual tweaks
shred86 Jun 16, 2024
a84efee
Merge pull request #18 from shred86/config_window_update
shred86 Jun 16, 2024
087c9a5
fix tab loading issue, move protocol method, minor visual tweaks, bum…
shred86 Jun 16, 2024
c9a9ca5
add unsaved changes check, custom_dem fix, create default config
shred86 Jun 17, 2024
a4b3feb
prompt only if tile has zones on reset
shred86 Jun 17, 2024
f70ab39
info debug level by default
shred86 Jun 17, 2024
1ccf9e4
set value types before comparing
shred86 Jun 18, 2024
309c25c
Merge pull request #19 from shred86/dev
shred86 Jun 18, 2024
607c036
backup cfg buttons, always use tile config by default, override tile …
shred86 Jun 20, 2024
8f5c499
tile tab config status text and field availability update
shred86 Jun 20, 2024
11f568f
readme updates, text updates, bump to version 1.40.03
shred86 Jun 20, 2024
997aa44
fix method called for closing config window
shred86 Jun 20, 2024
520d745
Merge pull request #22 from shred86/dev
shred86 Jun 20, 2024
907ee04
fix for cfg state listener
shred86 Jun 21, 2024
5b5eb06
fix issue with cancel on close_window
shred86 Jun 21, 2024
9b52a6e
revert cfg_var changes
shred86 Jun 21, 2024
33e6107
check unsaved changes on all build options, add viewfinder panoramas …
shred86 Jun 29, 2024
5ba60ab
fix for lat lon variables
shred86 Jun 29, 2024
97afd19
Merge pull request #25 from shred86/dev
shred86 Jun 29, 2024
8b06f93
check unsaved changes on app close, fix viewfinderpanorama
shred86 Jun 29, 2024
fdb7a6a
add symlink to overlays
shred86 Jun 30, 2024
e56fc4e
update readme and minor code clean up
shred86 Jun 30, 2024
9af6496
Merge pull request #31 from shred86/dev
shred86 Jun 30, 2024
4dc253c
fix Here provider API key
shred86 Jul 1, 2024
d1f9c11
Account for new sea tiles
andrewpucci Jul 1, 2024
72a6bca
Merge pull request #35 from andrewpucci/fix-33
shred86 Jul 2, 2024
6181f80
remove image sources no longer available
shred86 Jul 2, 2024
1cf5df3
update readme and bump version
shred86 Jul 5, 2024
ece7e98
Merge pull request #34 from shred86/dev
shred86 Jul 5, 2024
9eafb99
fix path space issue on Windows
shred86 Jul 8, 2024
4fdf600
remove FR OSM server, update to https
shred86 Jul 9, 2024
3395319
update OSM RU overpass server, and default to KU
shred86 Jul 9, 2024
1f88dad
Merge pull request #37 from shred86/dev
shred86 Jul 13, 2024
1695bd7
include 7zz for mac, update copyright, default imprint_mask_to_dds to…
shred86 Jul 20, 2024
5747a80
random OSM server selection
shred86 Nov 26, 2024
d06b7b3
fix url_template for EOX
shred86 Nov 26, 2024
6a19fab
fix mouse right-click for macOS
shred86 Nov 26, 2024
49b96ab
find and retry bad images
shred86 Jun 29, 2025
d708102
revert mouse fix for macos
shred86 Jul 4, 2025
a1980b5
Merge branch 'retry_incomplete_imgs' into dev
shred86 Jul 4, 2025
d8fb6b9
fix mouse right-click for latest Python version
shred86 Jul 6, 2025
8dd120d
remove incomplete test
shred86 Jul 6, 2025
dd94963
updated macos nvcompress to universal binary
shred86 Jul 6, 2025
601f96e
fix save tile zone confirmation
shred86 Jul 6, 2025
bdffd9b
remove unused tools, update readme, add fix for proj, updated require…
shred86 Jul 11, 2025
0135e60
update whl files, windows install bat and requirements
shred86 Jul 14, 2025
b45d372
Merge pull request #39 from shred86/dev
shred86 Jul 14, 2025
d749c15
fix for using manual installed custom dem
shred86 Sep 4, 2025
d1f34a4
fix mouse buttons for older python versions
shred86 Sep 4, 2025
c4c1b79
fix auto delete white square orthos
shred86 Sep 4, 2025
917c216
fix for the fix to using custom dem
shred86 Sep 5, 2025
c0f0d67
update readme
shred86 Oct 4, 2025
1453bca
Merge pull request #52 from shred86/dev
shred86 Oct 4, 2025
b05ccdd
```
tlinkin Oct 8, 2025
48129ee
Merge pull request #56 from tlinkin/master
shred86 Oct 9, 2025
888a3c7
feat(windows): replace nvcompress with new 64-bit CUDA-enabled version
tlinkin Oct 10, 2025
af41b6f
wrong file copied in this commit
tlinkin Oct 10, 2025
3596ea7
feat: add max_download_slots configuration with dynamic worker setup
tlinkin Oct 10, 2025
c689700
feat: enhance parallel download handling (#download_parallel)
tlinkin Oct 10, 2025
a93b27a
fix build issue with complex mesh
shred86 Oct 11, 2025
a5c3f0c
Merge pull request #58 from tlinkin/download_parallel
shred86 Oct 12, 2025
369f317
Merge pull request #57 from tlinkin/dev
shred86 Oct 12, 2025
bd499b7
update DFSTool and version number
shred86 Oct 12, 2025
0c8ea32
update nvcompress for linux, add more max_download_slots options
shred86 Oct 13, 2025
0fe05b9
update overpass urls
shred86 Oct 13, 2025
8219ac8
fix for path check
shred86 Oct 14, 2025
f1bb23a
add second RU OSM server
shred86 Oct 14, 2025
8f0bdc9
check for delimiters explicitly
shred86 Oct 14, 2025
876164d
fix key error with deleting whole tile where a tile did not exist
shred86 Oct 15, 2025
a20ad62
fix issue with automatic reattempt at min_angle=0
shred86 Oct 15, 2025
7a67165
fix for symlink when custom_scenery_dir and custom_build_dir are the …
shred86 Oct 17, 2025
7867c6b
fix path handling for tile_coords and clean up imports
shred86 Oct 17, 2025
f1d64b7
user definable max_convert_slots
shred86 Oct 17, 2025
8c492e1
user definable max_download_slots
shred86 Oct 17, 2025
fccb272
more graceful decrease in min_angles for retries
shred86 Oct 18, 2025
3c28d2a
revert to previous triangle.exe to fix issue
shred86 Oct 18, 2025
145328d
Merge pull request #62 from shred86/dev
shred86 Oct 18, 2025
99f3c9e
fix tile coord message when saving config
shred86 Oct 19, 2025
ae8e857
use DDSTool instead of nvcompress for mac
shred86 Oct 25, 2025
5722cc4
add redownload texture with white squares to build all
shred86 Oct 25, 2025
29e478d
fix key error if cfg file is missing settings when checking for unsav…
shred86 Oct 26, 2025
99d63fb
limit quadtree max level to 14 to fix issue with complex meshes
shred86 Oct 27, 2025
b6e4a6f
update readme, requirements, gitignore, max_downloads_slots info and …
shred86 Oct 27, 2025
987fe7f
remove auto reattempt orthophoto download feature
shred86 Oct 29, 2025
b7c2658
fix auto reattempt of orthophoto download feature
shred86 Oct 29, 2025
1af3f67
update read me
shred86 Oct 30, 2025
c3893ff
Merge pull request #72 from shred86/dev
shred86 Oct 30, 2025
a4a75b6
fix for updated shapely
shred86 Nov 21, 2025
c178e60
fix for OSM preview
shred86 Mar 14, 2026
511755f
Merge branch 'master' into dev
d41k4n Mar 14, 2026
6897488
fix here provider
shred86 Mar 29, 2026
282e99e
update readme, fix typos, update version
shred86 Mar 29, 2026
e88d3a3
update requirements
shred86 Mar 29, 2026
542c482
fix for proj.db issue
shred86 Mar 29, 2026
97e6640
update spec
shred86 Mar 29, 2026
42f1d47
update requirements and win gdal whl
shred86 Mar 29, 2026
9c2c0b4
fix for mac CoreFoundation error
shred86 Mar 29, 2026
5e21216
remove old whl
shred86 Mar 29, 2026
467bdd0
update spec
shred86 Mar 29, 2026
5f0f7df
fix issue with Triangle4XP and recompile executables
shred86 Mar 30, 2026
fd62847
update requirements and readme
shred86 Mar 30, 2026
5c73008
additional fixes for mac CoreFoundation error
shred86 Apr 1, 2026
937fb28
bug fixes
shred86 Apr 4, 2026
77981ba
comment out broken overpass servers
shred86 Apr 4, 2026
00d978c
update requirements and readme
shred86 Apr 4, 2026
d05b483
Merge pull request #86 from shred86/dev
shred86 Apr 4, 2026
9bba4eb
specify user-agent with overpass data requests
shred86 Apr 27, 2026
193c133
fix memory leak with preview window
shred86 Apr 27, 2026
c41f13b
check for 429 response and more aggressive back off
shred86 Apr 27, 2026
9fcfc11
refactor clean up
shred86 Apr 27, 2026
21ee9f9
adjust verbosity level for overpass response
shred86 Apr 27, 2026
7718de9
set default max_threads
shred86 May 1, 2026
d7f1c54
refactored requesting overpass data
shred86 May 1, 2026
d428286
update version
shred86 May 1, 2026
3cff870
Merge pull request #88 from shred86/dev
shred86 May 1, 2026
a2af60e
Fix tile.dem=None crash when Overpass airport query fails
samsoir May 7, 2026
2d4c8dc
Fix Earth preview crash on macOS with Python <= 3.12
shizumaat Jul 3, 2026
d1e2ce5
Merge pull request #92 from shizumaat/fix-earth-preview-delpol
shred86 Jul 4, 2026
86f0964
minor clean up
shred86 Jul 4, 2026
c363134
Merge pull request #90 from samsoir/fix/dem-load-survives-osm-failure
shred86 Jul 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
Binary/
build/
dist/
Elevation_data/
Geotiffs/
Masks/
Expand All @@ -9,9 +11,11 @@ Previews/
Extents/Auto
tmp/
Tiles/
venv*/
**/Ortho4XP.log
**/__pycache__
**/Thumbs.db
**/*.bak
**/*.swp
.last_gui_params.txt
.DS_Store
87 changes: 0 additions & 87 deletions Install_Instructions.txt

This file was deleted.

59 changes: 42 additions & 17 deletions Licence/copyright.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,24 +56,22 @@ http://dev.x-plane.com/cgit/cgit.cgi/xptools.git/

------------------------------------------------------------------------------
7-Zip
Igor Pavlov

~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

7-Zip Copyright (C) 1999-2018 Igor Pavlov.

Licenses for files are:
7-Zip Copyright (C) 1999-2023 Igor Pavlov.

1) 7z.dll: GNU LGPL + unRAR restriction
2) All other files: GNU LGPL
The licenses for 7zz and 7zzs files are:

The GNU LGPL + unRAR restriction means that you must follow both
GNU LGPL rules and unRAR restriction rules.
- The "GNU LGPL" as main license for most of the code
- The "GNU LGPL" with "unRAR license restriction" for some code
- The "BSD 3-clause License" for some code

Redistributions in binary form must reproduce related license information from this file.

Note:
You can use 7-Zip on any computer, including a computer in a commercial
Note:
You can use 7-Zip on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.


Expand All @@ -90,21 +88,48 @@ GNU LGPL information
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You can receive a copy of the GNU Lesser General Public License from
You can receive a copy of the GNU Lesser General Public License from
http://www.gnu.org/

BSD 3-clause License
--------------------

The "BSD 3-clause License" is used for the code in 7z.dll that implements LZFSE data decompression.
That code was derived from the code in the "LZFSE compression library" developed by Apple Inc,
that also uses the "BSD 3-clause License":

----
Copyright (c) 2015-2016, Apple Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder(s) nor the names of any contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----

unRAR restriction
-----------------
unRAR license restriction
-------------------------

The decompression engine for RAR archives was developed using source
The decompression engine for RAR archives was developed using source
code of unRAR program.
All copyrights to original unRAR code are owned by Alexander Roshal.

The license for original unRAR code has the following restriction:

The unRAR sources cannot be used to re-create the RAR compression algorithm,
which is proprietary. Distribution of modified unRAR sources in separate form
The unRAR sources cannot be used to re-create the RAR compression algorithm,
which is proprietary. Distribution of modified unRAR sources in separate form
or as a part of other software is permitted, provided that it is clearly
stated in the documentation and source comments that the code may
not be used to develop a RAR (WinRAR) compatible archiver.
Expand Down
67 changes: 38 additions & 29 deletions Ortho4XP.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
#!/usr/bin/env python3
import sys
import os
Ortho4XP_dir='..' if getattr(sys,'frozen',False) else '.'
sys.path.append(os.path.join(Ortho4XP_dir,'src'))

Ortho4XP_dir = '..' if getattr(sys, 'frozen', False) else '.'

if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
_proj_data_path = os.path.join(sys._MEIPASS, "pyproj", "proj_dir", "share", "proj")
_lib_path = os.path.join(sys._MEIPASS, "_internal")
os.environ["PROJ_DATA"] = _proj_data_path
os.environ["DYLD_LIBRARY_PATH"] = _lib_path + ":" + os.environ.get("DYLD_LIBRARY_PATH", "")

from pyproj import datadir

if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
datadir.set_data_dir(_proj_data_path)

sys.path.append(os.path.join(Ortho4XP_dir, 'src'))

import O4_File_Names as FNAMES
sys.path.append(FNAMES.Provider_dir)
Expand All @@ -14,53 +27,51 @@
import O4_GUI_Utils as GUI
import O4_Config_Utils as CFG # CFG imported last because it can modify other modules variables


cmd_line="USAGE: Ortho4XP.py lat lon imagery zl (won't read a tile config)\n OR: Ortho4XP.py lat lon (with existing tile config file)"
cmd_line = "USAGE: Ortho4XP.py lat lon imagery zl (won't read a tile config)\n OR: Ortho4XP.py lat lon (with existing tile config file)"

if __name__ == '__main__':
if not os.path.isdir(FNAMES.Utils_dir):
print("Missing ",FNAMES.Utils_dir,"directory, check your install. Exiting.")
sys.exit()
print("Missing ", FNAMES.Utils_dir, "directory, check your install. Exiting.")
sys.exit()
for directory in (FNAMES.Preview_dir, FNAMES.Provider_dir, FNAMES.Extent_dir, FNAMES.Filter_dir, FNAMES.OSM_dir,
FNAMES.Mask_dir,FNAMES.Imagery_dir,FNAMES.Elevation_dir,FNAMES.Geotiff_dir,FNAMES.Patch_dir,
FNAMES.Tile_dir,FNAMES.Tmp_dir):
FNAMES.Mask_dir, FNAMES.Imagery_dir, FNAMES.Elevation_dir, FNAMES.Geotiff_dir, FNAMES.Patch_dir,
FNAMES.Tile_dir, FNAMES.Tmp_dir):
if not os.path.isdir(directory):
try:
try:
os.makedirs(directory)
print("Creating missing directory",directory)
except:
print("Could not create required directory",directory,". Exit.")
print("Creating missing directory", directory)
except:
print("Could not create required directory", directory, ". Exit.")
sys.exit()
IMG.initialize_extents_dict()
IMG.initialize_color_filters_dict()
IMG.initialize_providers_dict()
IMG.initialize_combined_providers_dict()
if len(sys.argv)==1: # switch to the graphical interface
if len(sys.argv) == 1: # switch to the graphical interface
Ortho4XP = GUI.Ortho4XP_GUI()

Ortho4XP.mainloop()
Ortho4XP.mainloop()
print("Bon vol!")
else: # sequel is only concerned with command line
if len(sys.argv)<3:
else: # sequel is only concerned with command line
if len(sys.argv) < 3:
print(cmd_line); sys.exit()
try:
lat=int(sys.argv[1])
lon=int(sys.argv[2])
lat = int(sys.argv[1])
lon = int(sys.argv[2])
except:
print(cmd_line); sys.exit()
if len(sys.argv)==3:
if len(sys.argv) == 3:
try:
tile=CFG.Tile(lat,lon,'')
tile = CFG.Tile(lat, lon, '')
except Exception as e:
print(e)
print("ERROR: could not read tile config file."); sys.exit()
else:
try:
provider_code=sys.argv[3]
zoomlevel=int(sys.argv[4])
tile=CFG.Tile(lat,lon,'')
tile.default_website=provider_code
tile.default_zl=zoomlevel
provider_code = sys.argv[3]
zoomlevel = int(sys.argv[4])
tile = CFG.Tile(lat, lon, '')
tile.default_website = provider_code
tile.default_zl = zoomlevel
except:
print(cmd_line); sys.exit()
try:
Expand All @@ -70,6 +81,4 @@
TILE.build_tile(tile)
print("Bon vol!")
except:
print("Crash!")


print("Crash!")
Loading