Git Product home page Git Product logo

hoche / splat Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jmcmellen/splat

27.0 8.0 6.0 35.09 MB

SPLAT! is an RF Signal Propagation, Loss, And Terrain analysis tool for the spectrum between 20 MHz and 20 GHz. This is a copy of the code written by John Magliacane, heavily modified to clean up the code and take advantage of multithreading. This incorporates John's antenna height modifications from the as-yet-unreleased SPLAT 1.4.3.

Home Page: http://www.qsl.net/kd2bd/splat.html

License: GNU General Public License v2.0

Shell 0.28% C 40.96% C++ 55.64% Emacs Lisp 0.32% Makefile 0.15% Python 0.56% CMake 0.27% CSS 1.48% HTML 0.17% JavaScript 0.17%

splat's Introduction

SPLAT!

A Terrestrial RF Path and Terrain Analysis Tool for Unix/Linux

About

This version is a refactoring of the code in 1.5, along with some enhancements to support GDAL. It otherwise does exactly the same calculations, and has the bugfixed and enhancements of 1.5, including multithreading and GDAL support.

The "classic" SPLAT version 1.5 is also available as a separate branch. It is based off John Magliacane's 1.4.2 release, but with a few bugfixes. However, we recommend this 2.0 branch for both stability and performance.

Future version may either use OpenCL or Vulkan to hand computation off to a graphics card in the hopes of even more speed improvements. In preparation for this, itwom3.0 was made fully C99-compliant, as all the current implementations of OpenCL drivers require that. (Later versions of OpenCL allow C++, but none of the common GPU drivers support that).

Building

For this version, you must have CMake and either gcc or clang installed, and it must be a version that supports at least C++11 .

You also need several utility libraries:

  • libbzip2
  • zlib
  • libpng
  • libjpeg
  • libgdal

and gnuplot for generating graphs.

You can generally get these via system packages. For instance:

Centos 7:

yum install cmake bzip2-devel zlib-devel libpng-devel libjpeg-turbo-devel libgdal-devel gnuplot

Debian (Buster) and Ubuntu (18.04 LTS):

apt-get install cmake libbz2-dev zlib1g-dev libjpeg-dev libpng-dev libgdal-dev gnuplot

OSX (High Sierra):

Homebrew

brew install cmake jpeg libpng libgdal gnuplot

MacPorts

port install cmake jpeg libpng libgdal gnuplot

Example Build on Ubuntu 18.04 LTS

As an example, a build on Ubuntu 18.04 LTS might look like this:

sudo apt install git cmake
git clone https://github.com/hoche/splat.git
sudo apt install libbz2-dev zlib1g-dev libjpeg-dev libpng-dev libgdal-dev gnuplot
cd splat/build
cmake ..
make

Microsoft Windows

See README_VisualStudio.md

Installation

After building, run

make install

Running

Topography data must be downloaded and SPLAT Data Files must be generated using the included srtm2sdf, postdownload, or usgs2sdf utilities before using SPLAT! Instructions for doing so are included in the documentation.

It is a good practice to create a working directory for SPLAT! use under your home directory:

mkdir $HOME/splat-work

Then:

cd $HOME/splat-work

before invoking SPLAT!

In this manner, all associated SPLAT! working files can be kept in a common directory.

It is important to realize that when analyzing regional coverage areas of transmitters, repeaters, or cell sites, SPLAT! Data Files need to be available for the entire region surrounding the site(s) being analyzed. SPLAT! Data Files can be placed under your SPLAT! working directory, or under a separate directory specified in your $HOME/.splat_path file so SPLAT! can easily find them.

Please read the README file under the utils directory for information on the utilities included with SPLAT!.

Please read the documentation under docs directory, or consult the program's man page for more information and examples of SPLAT! use.

Changes

  • Build system

The build system has been converted to CMake.

  • SDF file names

    In order to accommodate Windows filesystems, the basic format of the SDF file naming has changed. The colon has been changed to an underline. For instance, instead of having a file named 46:47:122:123.sdf it should now be 46_47_122_123.sdf. The various unix versions (including OSX) will handle either version, but by default srtm2sdf will now create names with the underline. If you don't want this, a "-c" flag has been added to srtm2sdf to preserve your colon.

  • splat.cpp

    • Incorporate John's antenna height changes from SPLAT 1.4.3 (unreleased).

    • Revert to using the ITM model by default, in accordance with SPLAT 1.4.3.

    • The PlotLOSMap() and PlotLRMap() functions have been converted to run multithreaded if a "-mt" flag is passed on the command line. If you want to run single-threaded, use "-st" on the command line.

    • WritePPM(), WritePPMSS(), etc were converted to WriteImage(), WriteImageSS(), etc, and functionality was added to allow them to emit png or jpg images instead of pixmaps. png's are now the default. Add "-ppm" or "-jpg" to the command line if you want to generate the others. The generated jpg's are smaller but the text can be hard to read in some instances. The png's are, of course, lossless, and nice and crisp, but they are larger and take slightly longer to generate. Both are an order of magnitude smaller than the pixmaps though.

    • All the DEMs and Paths are allocated on the heap rather than using pre-sized arrays and stack allocations. This means the same code can be used for 1x1 through 8x8 grids, and/or 3-deg (Normal) or 1-deg (High Definition) modes without recompiling. It also means that the code can adjust itself (or error out nicely) depending on the available memory of the host machine.

    • I did some minor fixup to the antenna azimuth (.az) and elevation (.el) reading so that you can now put a value of 0 in those files to indicate your antenna blocks that area perfectly.

  • ITWOM 3.0

    • itwom3.0.cpp was renamed to itwom3.0.c and is now compiled with the C compiler rather than the C++ one. In addition, every effort was made to make it fully C99-compliant rather than the peculiar amalgam of C and C++ syntax that it was using.

      itwom3.0 no longer uses the C++ complex number templates (obtained by doing #include ). Instead a small complex-number library is introduced. This was done as part of the effort to make it fully C99 compliant.

    • All the static variables were removed from function scopes within itwom3.0.c in an effort to make the code fully reentrant. This had resulted in a number of changes: - There are a few cases where these were actually consts; those have been defined as such and moved to the global scope. - In a few cases this means that we recalculate variables multiple times. - In other cases, new "state" structs have been introduced that act as local contexts for repeated calls to the same function. All these changes are geared towards making the code multithread-safe.

    • A few variables that are not modified by the various functions have been declared as const. This includes pfl[] arrays.

    • A number of minor fixes were made to itwom3.0 that were disguised by using the C++ compiler. For instance, in a number of places abs() was called when fabs() was meant.

    • Much much code documenting was done. There remains a lot to do though.

To Do

  • Since we have to link to zlib for the pngs, we might as well create kmz files if asked.
  • More code cleanup.
  • Reformat tabs to four spaces.

Acknowledgements

This project and code is based on the original SPLAT! version 1.4.2 by John A. Magliacane, KD2BD: http://www.qsl.net/kd2bd/splat.html

splat's People

Contributors

der-stefan avatar dbitech avatar jmcmellen avatar watkipet avatar jsr38 avatar

Stargazers

Yutian Pang @ASU  avatar  avatar Kyle Maas avatar  avatar Stanislav Lechev [0xAF] avatar  avatar Sergey Golovin avatar Adrien Demarez avatar Vladyslav Burzakovskyy avatar Jayrah DeVore avatar Marzypan avatar Hans Arndt avatar  avatar  avatar  avatar  avatar Sander Haukelidsæter avatar Pripyat Automations avatar  avatar Bryan Fields avatar CAI WENZHE avatar Justin avatar  avatar Jamie Wark avatar Max Manning avatar  avatar  avatar

Watchers

Jamie Wark avatar Kyle Maas avatar  avatar  avatar Sander Haukelidsæter avatar  avatar  avatar  avatar

splat's Issues

Break backward compatibility

Dear folks,

after having hands-on at Splat! and considering myself as being still somehow unbiased, I would suggest to change a few things in future 2.0 release that will break backward compatibility:

  • Give all parameters in SI units as default. That includes: lengths/heights in meter, frequency in Hz (but e.g. with correct parsing of 433M or 1.8G) freq in MHz should be fine
  • Use standard geographical coordinates. The zero meridian goes through Greenwich. Eastern is positive, Western negative longitude. Alternatively, parse 122.4192W correctly, if Americans have a strong feeling about "negative" coordinates.
  • Abolish annotated map for coverage predictions. The technical possibilities changed during the last 20 years and a georeferenced image can be easily loaded into web maps or offline GIS nowadays. (Wait for my work done in #5...)
  • Abolish in-picture legend.
  • Abolish "-hd" option. Nowadays, a global 30m DEM is standard and the old resolution of 90m is superseded.
  • Abolish "-sdelim" and just use "_" as default delimiter. Or even better: read geotiff DEMs.
  • Rename "-c" to "-los" as this calculates a line of sight coverage.
  • Rename "-L" to "-radio" as this calculates a radio propagation coverage.
  • Use EIRP instead of ERP - or just TX power and antenna pattern? (see #24).
  • Use logarithmic antenna pattern instead of normalized voltage (!) radiation patterns (see #24).

Please consider my thoughts as proposals only. It's just a good time to reconsider the status quo. I won't break up with Splat! if you have different plans. 😃

Please also note that I will edit and add items from the list above in the future.

The Windows version does not handle spaces in path names gracefully.

The Windows version does not handle spaces in path names gracefully. For example:

K:\hoche\Documents\C++ Projects\Splat\splat.EXE -hd -d ....\srtm1 -t tx -L 10.0 -R 15 -o K:\hoche\Documents\C++ Projects\Splat\test\tests\coverage_1deg_15mi_itm\coverage

            --==[ Welcome To SPLAT! MT HD v1.5.0b3 ]==--

Loading "....\srtm1/40_41_111_112-hd.sdf.bz2"... Done!
Loading tx.lrp
Default parameters have been assumed for this analysis.

Computing ITM path loss contours of "tx"
out to a radius of 15.00 miles with an RX antenna at 10.00 feet AGL

...

0% to 25% .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo
25% to 50% .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo
50% to 75% .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo
75% to 100% .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo
Done!

Site analysis report written to: "tx-site_report.txt"

Writing LR map "K:\hoche\Documents\C++.png" (3600x3630 image)... Done!

The png file got written to the wrong path.

Implement a code style

Use clang-format tool (part of the LLVM projects) to enforce a consistent style for new and refactored code.

Add a pre-commit hook to ensure style is consistent. The issue was opened to allow for discussion, PR for consideration forthcoming.

Encapsuling in C++ classes and cleaning folder structure

As far as I can overview it to this point, @watkipet rewrote most of the code in a nice native C++ style with classes and objects. However, the differences with @hoche's code must be merged totally manually.

Furthermore, a standard folder structure (as of 2020) should be used (see https://github.com/kriasoft/Folder-Structure-Conventions/blob/master/README.md):

splat/
├── build/
├── demo/
├── docs/
├── include/
├── src/
├── utils/
├── AUTHORS
├── CHANGELOG
├── CMakeLists.txt
├── COPYING
└── README.md

BUG - 2.0-alpha Segfault under FreeBSD

2.0-alpha faults on FreeBSD (built using clang)

Using 8 threads...

 0% to  25% Process 55587 stopped
* thread #7, name = 'splat', stop reason = signal SIGSEGV: invalid address (fault address: 0xa0)
    frame #0: 0x0000000801c3d96f libc.so.7`_flockfile + 15
libc.so.7`_flockfile:
->  0x801c3d96f <+15>: cmpq   %rax, 0xa0(%rbx)
    0x801c3d976 <+22>: je     0x801c3d99a               ; <+58>
    0x801c3d978 <+24>: movq   %rax, %r14
    0x801c3d97b <+27>: leaq   0x98(%rbx), %rdi
(lldb) bt
* thread #7, name = 'splat', stop reason = signal SIGSEGV: invalid address (fault address: 0xa0)
  * frame #0: 0x0000000801c3d96f libc.so.7`_flockfile + 15
    frame #1: 0x0000000801c41fff libc.so.7`fwrite + 63
    frame #2: 0x000000000021d58e splat`ElevationMap::PlotLRPath(Site const&, Site const&, unsigned char, __sFILE*, AntennaPattern const&, Lrp const&) + 3486
    frame #3: 0x000000000021e7f0 splat`std::__1::__function::__func<std::__1::__bind<void (ElevationMap::*)(Site const&, Site const&, unsigned char, __sFILE*, AntennaPattern const&, Lrp const&), ElevationMap*, Site const&, Site&, unsigned char&, __sFILE*&, std::__1::reference_wrapper<AntennaPattern const>, Lrp const&>, std::__1::allocator<std::__1::__bind<void (ElevationMap::*)(Site const&, Site const&, unsigned char, __sFILE*, AntennaPattern const&, Lrp const&), ElevationMap*, Site const&, Site&, unsigned char&, __sFILE*&, std::__1::reference_wrapper<AntennaPattern const>, Lrp const&> >, void ()>::operator()() + 80
    frame #4: 0x000000000023f20c splat`WorkQueue::doWork() + 444
    frame #5: 0x000000000023fd3d splat`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (WorkQueue::*) (), WorkQueue*> >(void*) + 61
    frame #6: 0x000000080039c82b libthr.so.3`___lldb_unnamed_symbol11$$libthr.so.3 + 331
(lldb)

Improve codebase for JSON input and output for multi-purpose usage

edit notice: The primary goal of having a JSON output file for georeferencing PNG images is now superseded by the idea of a multi-purpose input/output functionality. The discussion below develops accordingly.

An interactive map that shows the coverage simulations is a useful feature. Splat will generate a HTML file that can be opened locally and just adds a Leaflet map with various OpenStreetMap tiles as background.
Further requirements:

  • The output must be PNG, JPEG or GeoTIFF
  • An additional json file is written that includes the simulation parameters (qth, lrp) and the extent of the image for georeferencing.

I implemented that already, but need to change some things and will push it next week.

Discussion: output projection

The default output of Splat maps is in EPSG:4326 projection. Nowadays, most online maps (typical OpenStreetMap maps or Google Maps) are in EPSG:3857. Up to now Splat users had to transform the output on their own, for example with gdalwarp, after georeferencing the output png as a geotif:
gdal_translate -of Gtiff -a_ullr $x1 $y1 $x2 $y2 -a_srs EPSG:4326 map.png map_4326.tif (not necessary any more when using -tif output)
gdalwarp -s_srs EPSG:4326 -t_srs EPSG:3857 map_4326.tif map_3857.tif
Should Splat produce EPSG:3857 projected maps as default?

Use standard geographical coordinates

The zero meridian goes through Greenwich. Eastern is positive, Western negative longitude. Alternatively, parse 122.4192W correctly, if Americans have a strong feeling about "negative" coordinates.

Set up Continuous Integration

Notes:

  • GitHub's free level service is 500MB and 2000min/month of CPU time.
  • They have VMs for Windows Server 2019, Ubuntu 18.04, Ubuntu 16.04, and MacOS 10.15.
  • Windows CPU time is billed at 2x Linux time, and MacOS time is billed at 10x.

This is probably good enough to do a basic per-checkin level qualification, but the limited number of OSes available and very limited disk space means that it's not sufficient to do a full qualification, particularly since running splat-testsuite is both a CPU hog and requires about 400MB of disk.

I have a number of VMs (Vagrants) already set up on a moderately high-end host (Core i7-9700, 32GB, SSD), so I'm thinking I'll set that up to do automatically do extended checking and testing runs on that. I'll have to figure out how to report back errors though.

Add a --help command line switch

It would be nice if there were some basic usage instructions that could be activated with a --help switch like most other command line programs.

Increase 32 contour regions limit

It would be useful to have an output mode where the dBm or dBuV/m can have more than 32 steps. Given we output at least 24bit image files, we easily increase the number of contours.

Further, if we do this within the GeoTIFF realm, we can multiband, and have the 1 file contain both path loss as well as field strength information. This GeoTIFF can easily then be used by other tools like Rio-RGB to produce datasets that can be used for high performance, mapping through for example Mapbox Terrain-RGB inspired frameworks accessible through Mapbox-GL for both the web and native

Build issue in 2.0-develop - (JSON parser)

2.0-alpha doesn't build - it looks like there's a commandline parsing routine that was expected to set the "args" variable, but it got commented out. If that parser isn't stable we should leave it and everything that depends on it out.

~/src/splat/build$ make
[  2%] Building CXX object src/CMakeFiles/splat.dir/main.cpp.o
/home/hoche/src/splat/src/main.cpp: In function ‘int main(int, const char**)’:
/home/hoche/src/splat/src/main.cpp:1204:24: error: ‘args’ was not declared in this scope; did you mean ‘argc’?
 1204 |         json.WriteJSON(args, tx_site[0], lrp, mapfile);
      |                        ^~~~
      |                        argc
make[2]: *** [src/CMakeFiles/splat.dir/build.make:225: src/CMakeFiles/splat.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:216: src/CMakeFiles/splat.dir/all] Error 2
make: *** [Makefile:149: all] Error 2

Improve JSON support

2.0-alpha has some example support for JSON.

  • Strongly consider using a library instead of rolling our own. Every line of code we write comes with maintenance cost. Consider using a library that doesn't assume a particular development framework (such as Boost, Qt, or GLib). Consider using a library that is available in most package managers such as nlohmann-json or json-cpp.

Can the limit on number of transmitter sites be eliminated?

I'd like to be able to run coverage studies with more than 30 transmitter sites. Is there a reason why the 30 transmitter limit is still necessary now that computers have larger RAM?

" -t txsite(s).qth (max of 4 with -c, max of 30 with -L)\n"

while (z <= y && argv[z][0] && argv[z][0] != '-' && tx_site.size() < 30) {

The documentation says it's supposed to be 4 for coverage map studies, but that no longer seems to be enforced now that this line is no longer there:

https://github.com/jmcmellen/splat/blob/08f06f56470a8361a5609503a6b1cb02f07f48dc/splat.cpp#L8032

Either way, the 30 site limit seems kind of arbitrary, and if I'd think if I'm individually passing QTH files to it on the command line, that as a user, if I specify a lot of them it takes a long time to calculate, it comes with the territory.

Merge splat 1.4.3 into refactor

@hoche did some work before @watkipet and me started development in his unpublished 1.4.3 version. This includes:

  • antenna height changes
  • antenna azimuth and elevation reading
  • ITM instead of ITWOM used
  • DEM dynamic memory allocation
  • ...

It would be useful if we can merge those changes into the refactor branch. Changes are deep-going and must be merged carefully by hand.
@hoche: Do you plan to do the merging, as you know your changes best? Or should @watkipet and me go through it? I think it would be useful to wait for my pull request from the "json" branch, which introduces the geotiff and json output.

PNG and PGW

It would be very convenient to generate a .pgw world file when a .png plot file is made.
I have to do this manually to import as a raster file into QGIS and the details of the .pgw keep changing as plot radius is changed.

Multiple warnings (ignoring return value)

@hoche: Do you consider the warnings "ignoring return value" of numerous fgets and fscanf calls as relevant to be fixed? Should we add the compiler flag -Wno-unused-variable to cmake or rather catch their return values? It is desirable to compile without warnings in order to not lose sight of more important warnings like #14.

Clean up WriteImage functions

Currently, splat.cpp contains four functions for writing raster map outputs:

  • WriteImage
  • WriteImageDBM
  • WriteImageLR
  • WriteImageSS

Most of their code is identical, just the details differ. It would make sense to combine those in one function. That would make it easier to include new image formats (like GeoTiff or World Files, see #8 ). edit: was no problem.

Clean up string handling

Much of the code uses char* with malloc/free and strcpy, strdup, etc for filenames and for reading parameters from files. This should all be converted to std::string.

Refactor ElevationMap and Dem to separate elevation data from calculation data

Presently, Dem holds data, mask, and signal. Only data contains elevation data. mask and signal are the results of calculations or loading place markers, etc. Likewise, ElevationMap isn't just concerned with elevation--that's where all the calculations take place.

I propose the following:

  1. Rename ElevationMap to Workspace
  2. Pull mask and signal out into separate layers
  3. Make MapComputation and PathComputation abstract base classes. Concrete subclasses of these can operate in the Workspace and output to a layer.

I'm hoping this will accomplish a few things:

  1. Decouple the results of the computation from the elevation data
  2. Allow for adding new computations
  3. Prevent one computation from overwriting data from another (unless desired)

Something I still need to think about is that there are multiple Dems per Workspace (see sr.maxpages). All the Dems have the same resolution (see sr.ippd). This is fine. Likewise, there should still be a 1:1 correspondence between Dems and pieces of output layer data. However, a Computation doesn't care about pages. All it cares about is latitude, longitude, and its output layer.

So I'm thinking that a Workspace defines the number of pages, and the resolution of each. Then layers can be added to the Workspace so long as each layer exposes the appropriate number of data pages each with the appropriate resolution.

It would be nice if SDF, SRTMGL, etc. were also just layers which provide elevation data. That would fulfill a desire I saw elsewhere to support loading elevation data from more than one source (i.e. high resolution data from one source, and low resolution data from another). If the elevation data sources are in layers, the Workspace can get data from whatever the top layer is. If there are holes in the top layer, the Workspace can get data from the next layer down. If a layer isn't at the appropriate resolution, it's responsible for interpolating. The bottom layer is always present, and it's sea-level.

By retaining the use of pages, each layer can perform sparse operations. If the Workspace asks an SDF layer for page 4, it can load it from the disk and cache it in memory on the fly. If the Workspace asks an SRTGML layer for page 5, it can load that page from an HTTP source if so configured and cache it on disk, in memory, or both.

Likewise, if a computation wants to write to a certain latitude and longitude, the Layer can determine which page that is, and create only a single page of output data rather than allocating all the pages of output data at runtime for all the layers (like we do now).

QTH file altitude as absolute altitude instead of AGL

It would be really handy if I could specify transmitter sites using absolute height data (which I already have) instead of having to find the average ground level of the site and subtract it to get an AGL value.

Best server plot

A useful improvement to the coverage plot optionfeature with multiple transmitters would be to be able to plot a map of best server.
I have modified Johns original code to add an extra field in the map array. When coverage -c is plotted, it recorded the transmitter number and for each transmitter updated this field if the new calculation had stronger signal. I then assigned a colour to the transmitter number and plotted.

Add support for CMake

This task is to add CMake support to the refactor branch (or a branch off of that one).

Document -hd command-line switch

I'm glad to see it was implemented, but I had to dig through the code to figure out how to use it. The old version relied on the binary's name, and that's still how it's shown in the docs.

Remove old unnecessary files

Since the advent of the CMake build system (#4), some of the existing files are obsolete:

  1. vstudio - Can now be generated using cmake -G "Visual Studio 15 2017 Win64"
  2. install - After running cmake, you can now just run make install
  3. README - Any reason this information can't be merged into README.md?
  4. Makefile - Now generated by cmake
  5. utils\Makefile - Now generated by cmake
  6. utils\install - After running cmake, you can now just run make install
  7. Subfolders under docs\* - The cmake build system automatically generates the .txt, .pdf, .ps and man-page outputs from splat.man

Any reason to keep what I've listed above? Is there anything else I should remove?

Discussion: Text output templating engine for XML/Javascript/etc files

Right now there's a bunch of different functions where XML is generated by doing sprintfs. Much is redundant and could be combined together. However, it occurs to me that it might be better to incorporate some sort of template engine for that. I'm not talking about sucking in a full-bore templating engine like Jinja or Jade (wrong language anyway), just creating a simple substitution engine where key tags in the text file get replaced with something out of std::unordered_map.

I'll have to analyze the code some, but I don't think we need much more than that.

If we have complex data it'd get complicated, but even then we could suck in something like https://github.com/pantor/inja.

Use a command-line parsing library

The present command-line parsing is difficult to understand and brittle. It's also subject to all sorts of buffer-overrun attacks (bad news for people putting a web interface in front of Splat! who don't sanitize their input). I suggest using a the 3rd party library for parsing command line arguments. The ones that seem reasonable (in order of what I think I'd prefer) are:

  1. CLI11
  2. gflags
  3. tclap

Any concerns about using the 3rd party library? Any preference for one of these (or another)?

Add GDAL input for DEM files

I'm still wondering if the SPLAT data files (*.sdf) are really necessary. Wouldn't it be possible to load a digital elevation model (DEM) into the RAM on the fly just after calculating the geographical extent?
In any case, it would be very useful to read geotiffs or other DEM file formats supported by GDAL directly without invoking srtm2sdf.
As a side note: For OpenTopoMap I prefer to have a global single geotif file, that is internally tiled. Selection of some extents is very fast.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.