pygmalion69 / opentopomapviewer Goto Github PK
View Code? Open in Web Editor NEWOpenTopoMap viewer for Android
License: Apache License 2.0
OpenTopoMap viewer for Android
License: Apache License 2.0
To use the app on my e-bike I would like to have a setting to keep the screen on.
It would be nice when the OpenTopoMap Viewer would support to zoom in and out via the volume plus and minus keys of a smartphone.
Hi @Pygmalion69
I'm using your great app for a few years. And I really enjoy it daily ๐
However the addition of a (optional) dark mode would be great to further improve the UX. osmdroid has a (basic) support for dark map tiles included. Please also see here: osmdroid/osmdroid#1804 (comment)1
Also the ability to toggle the visibility of the app bar as requested in #21 would be such a huge improvement for devices featuring a small screen.
If you're interested in (further) translations of the app please let my know. I'd be happy to support you.
Their using a ColorMatrixColorFilter
for this see: https://github.com/osmdroid/osmdroid/blob/dbb20901cac30b28a6a9349da097c22d9a962311/osmdroid-android/src/main/java/org/osmdroid/views/overlay/TilesOverlay.java#L95 โฉ
Hello,
first of all: I love your simple and clean map viewer.
Due to the poor mobile reception (here in Germany), I often have no data reception or only EDGE which is not really useable. It would be nice to have the option to save a area or use prepared area/images for these situations. Mordern mobile phones should have enough space to save a whole country without a problem.
Also nice would be an option that if I use a gpx file I could safe the area of the gpx file for offline usage. I nice feature if I would make a pre-planed a tour.
It is somehow very confusing to see at the beginning always a blue screen indicating the coordinates 0/0 somewhere in the Atlantic near Africa. Wouldn't it be better to show the last position used until the GPS signal is found?
This is by the way also the case when you rotate the device.
Hi Pygmalion69,
awesome app for the outdoors, I use it on all the time. 2 wishes:
A major wish would be a true fullscreen mode in order to hide the green bar on top & the system bar with notifications, as - especially in horizontal screen mode - there is so much of the map hidden due to those large, green bars. The best way would be to include the choice in the options to activate full screen mode like with epub-reading-apps ร la FBReader or Readera. Then by pressing in the middle of the screen, the bar visibility can be toggled on/off [or just set fullscreen as standard], but pure map moving or zooming in/out would only show the map in fullscreen mode [like in the browser version of opentopomap]. Every square millimeter of the screen counts, thus looking at and navigating through opentopomap in fullscreen would be fantastic!
A minor issue is the fact that when I zoom in at maximum, the bar scale shows me a reference distance between 124m and 127m, very strange. Not sure if this is because of the size of my screen or some obscure imperial system conversation, but as we talk metric here, a 100m bar scale at maximum zoom no matter the screen size would be very handy in order to know what 100m represent on the map. I think the maximum zoom value of the map details is fixed, thus shortening the bar would do the trick, yet as the displayed bar scale value changes, I'm not sure if this is a bug easy to be solved. But again, this is a minor issue, fullscreen is the true missing feature of your fantastic app in my eyes.
Thank you so much, Pygmalion69!
Best,
powerrackman
Thanks for the app, it is really useful :-).
It would be a nice addition to be able to display kml files on top of the map.
Just upgraded to the latest version available on F-Droid and the app immediately crashes or stops when starting. As you are not responsible for the binary shipped via F-Droid i used your "official" build from the release section but it shows the same behaviour.
Does not happen with v1.8.
Device: Samsung SM-G960F
OS: Android 8.1, LineageOS 15.1-20190407-Nightly
Let me know if you need further info:
logcat excerpt:
01-22 07:29:27.188 D/libgps ( 4158): GpsiHook: API: gpsSetPositionMode(GpsiHookStateIdle: e,c,g) 01-22 07:29:27.188 D/libgps ( 4158): proxy__gps_set_position_mode(1, 0, 1000, 0, 0) 01-22 07:29:27.189 D/libgps ( 4158): GpsiHook: API: gpsStart(GpsiHookStateIdle: e,c,g) 01-22 07:29:27.189 D/libgps ( 4158): GpsiHookStateIdle : EXIT 01-22 07:29:27.189 D/libgps ( 4158): GpsiHookStateGps : ENTRY 01-22 07:29:27.189 D/libgps ( 4158): [proxy__gps_start][line = 1164]: called. 01-22 07:29:27.189 D/libgps ( 4158): GpsiHook: API: gpsStatusCb(GpsiHookStateGps: e,c,g) 01-22 07:29:27.189 D/gpsd ( 4142): WakeLock(Acquire,GPSD) 01-22 07:29:27.189 D/libgps ( 4158): GpsiHook: API: gpsStatusCb(GpsiHookStateGps: e,c,g) 01-22 07:29:27.189 I/Sensors ( 4102): batch - accelerometer_sensor try to batching with 50000000 01-22 07:29:27.189 I/GnssLocationProvider( 4338): WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@5455ead) 01-22 07:29:27.190 D/gpsd ( 4142): WakeLock(Release,GPSD) 01-22 07:29:27.190 D/gpsd ( 4142): WakeLock(Acquire,GPSD) 01-22 07:29:27.190 D/gpsd ( 4142): WakeLock(Release,GPSD) 01-22 07:29:27.190 D/gpsd ( 4142): WakeLock(Acquire,GPSD) 01-22 07:29:27.191 D/libgps ( 4158): OnGpsExtensionMessage: message_id(11), data(0x7a87420044), size(4) 01-22 07:29:27.191 D/libgps ( 4158): [OnGpsExtensionMessage] Received: MSG_SET_LOG_LEVEL(2) 01-22 07:29:27.191 D/libgps ( 4158): OnGpsExtensionMessage: message_id(6), data(0x0), size(0) 01-22 07:29:27.191 D/libgps ( 4158): proxy__gps_xtra_download_request_cb 01-22 07:29:27.192 I/GnssLocationProvider( 4338): WakeLock acquired by sendMessage(DOWNLOAD_XTRA_DATA, 0, null) 01-22 07:29:27.192 I/GnssLocationProvider( 4338): WakeLock acquired by handleDownloadXtraData() 01-22 07:29:27.192 I/GnssLocationProvider( 4338): WakeLock released by handleMessage(DOWNLOAD_XTRA_DATA, 0, null) 01-22 07:29:27.192 E/GpsXtraDownloader( 4338): No XTRA servers were specified in the GPS configuration 01-22 07:29:27.192 I/GnssLocationProvider( 4338): WakeLock acquired by sendMessage(DOWNLOAD_XTRA_DATA_FINISHED, 0, null) 01-22 07:29:27.192 I/GnssLocationProvider( 4338): WakeLock released by handleMessage(DOWNLOAD_XTRA_DATA_FINISHED, 0, null) 01-22 07:29:27.194 I/Sensors ( 4102): batch - geomagnetic_sensor try to batching with 10000000 01-22 07:29:27.194 I/Sensors ( 4102): batch - uncal_gyro_sensor try to batching with 5000000 01-22 07:29:27.194 I/Sensors ( 4102): GeoMagneticSensor old sensor_state 1, new sensor_state : 17 en : 1 01-22 07:29:27.196 I/Sensors ( 4102): UncalGyroSensor old sensor_state 17, new sensor_state : 32785 en : 1 01-22 07:29:27.201 D/AndroidRuntime(32186): Shutting down VM 01-22 07:29:27.201 E/AndroidRuntime(32186): FATAL EXCEPTION: main 01-22 07:29:27.201 E/AndroidRuntime(32186): Process: org.nitri.opentopo, PID: 32186 01-22 07:29:27.201 E/AndroidRuntime(32186): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.nitri.opentopo/org.nitri.opentopo.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.ActivityThread.-wrap11(Unknown Source:0) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.os.Handler.dispatchMessage(Handler.java:106) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.os.Looper.loop(Looper.java:164) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.ActivityThread.main(ActivityThread.java:6494) 01-22 07:29:27.201 E/AndroidRuntime(32186): at java.lang.reflect.Method.invoke(Native Method) 01-22 07:29:27.201 E/AndroidRuntime(32186): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440) 01-22 07:29:27.201 E/AndroidRuntime(32186): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 01-22 07:29:27.201 E/AndroidRuntime(32186): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference 01-22 07:29:27.201 E/AndroidRuntime(32186): at org.nitri.opentopo.MapFragment.onViewCreated(MapFragment.java:284) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:298) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1232) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1398) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1476) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1541) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2333) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2120) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2075) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1977) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2862) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2812) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541) 01-22 07:29:27.201 E/AndroidRuntime(32186): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1334) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.Activity.performStart(Activity.java:7029) 01-22 07:29:27.201 E/AndroidRuntime(32186): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2741) 01-22 07:29:27.201 E/AndroidRuntime(32186): ... 9 more 01-22 07:29:27.204 W/ActivityManager( 4338): Force finishing activity org.nitri.opentopo/.MainActivity 01-22 07:29:27.206 I/Process (32186): Sending signal. PID: 32186 SIG: 9 01-22 07:29:27.206 D/WifiStateMachine( 4338): fetchRssiLinkSpeedAndFrequencyNative rssi=-62 linkspeed=195 freq=5220 01-22 07:29:27.208 D/WifiScoreReport( 4338): report new wifi score 60 01-22 07:29:27.339 I/ActivityManager( 4338): Process org.nitri.opentopo (pid 32186) has died: fore TOP 01-22 07:29:27.339 D/GnssStatusListenerHelper( 4338): Remote Listener died: android.location.IGnssStatusListener$Stub$Proxy@f8b535c 01-22 07:29:27.339 I/Sensors ( 4102): batch - accelerometer_sensor try to batching with 66667000 01-22 07:29:27.340 W/zygote64( 4338): kill(-32186, 9) failed: No such process 01-22 07:29:27.340 I/zygote64( 4338): Successfully killed process cgroup uid 10210 pid 32186 in 0ms 01-22 07:29:27.344 I/Sensors ( 4102): GeoMagneticSensor old sensor_state 32785, new sensor_state : 32769 en : 0 01-22 07:29:27.352 I/Sensors ( 4102): UncalGyroSensor old sensor_state 32769, new sensor_state : 1 en : 0 01-22 07:29:27.354 D/WindowManager( 4338): relayoutVisibleWindow: Window{9d59ba4 u0 org.lineageos.trebuchet/com.android.launcher3.searchlauncher.SearchLauncher EXITING} mAnimatingExit=true, mRemoveOnExit=false, mDestroying=false 01-22 07:29:27.372 D/mali_winsys( 5127): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000 01-22 07:29:27.421 I/GnssLocationProvider( 4338): WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@e78d7c7)
Your README features some screenshots. Would you consider putting them into a fastlane structure, so F-Droid picks them up and shows them along the app's description in their clients? For details how to achieve that, see e.g. here.
Would there be any possibility to show a fixme/note layer somehow like on openstreetmap.org? It would help a lot to identify problematic parts of the map.
The app is really very simple and that makes it so cool,
Would it be able to show somewhere also the recent GPS altitude and not only the location? That would help a lot navigation in the mountains. I assume it is quite easy to obtain in addition to the position.
Many thanks
Martin
For use on my e-bike I would like to have a setting to rotate the map to match my heading.
On my device the app keeps crashing when pressing the "location detail" button.
I was not able to prevent my screen from going to sleep while using the app for navigation in fullscreen mode (Android 12).
Thank you very much for your most useful app.
normally i am with gps disabled on android (for good reasons).
when it comes to planing tours or downloading maps you always have to scroll from the start in central atlantic (west of africa) to your specific location in interest. Why not simply remember the last location and start topomaps the next time at this point, if gps is off? Small change with huge benefit for many users, i presume.
another extremly fine feature would be user-defined setting of maps directory (external SD card for instance)
with best regards
Dr. Achim Wentzel
1 ) Make the display of the used space in the cache settings (to set the desired cache size):
2.1) Make a "route construction" / "manual addition of waypoints"
2.2) Make the map download based on 2.1 + deviation in longitude and latitude
(in gmapcatcher (it is not in android) it is possible to load only by 1 point + deviation in longitude and latitude)
Hi,
Well everything is in the title. I'm trying to load a gpx file produced by another android app downloaded via F-Droid named GPSLogger.
After picking the file, the app simply crash.
Ask me if you have any question regarding this bug ;)
Thank you for this app and all the effort you put into it.
I'd like very much to have an option to choose vanilla OpenStreetMaps to be displayed. Topographic maps are very good in the country side, but maybe not first choice if you're moving in a city.
I'm using the app as a very quickly launching alternative to fat navigators - when I get out of the underground and have to find my last few meters to my destination. But on TopoMaps, you need to zoom in to the last two zoom levels to see all street names and house numbers
I used this one before LocationMapViewer, but it does not center automatically to my location and does not have the "follow" feature, both of them are definitive "must-haves".
The yellow marker is hardly visible in daylight. Besides, when direction is available the direction marker is too small on hi-res devices.
A great addition would be the possibility to display custom georeferenced files (geotiff?).
Sometimes the map is not loading at all or just very very slow - e. g. 2-3 minutes for the currently displayed map section. The issue appears to concern both OpenTopoMap as well as OpenStreeMap. Sometimes the map is not displayed at all or a previously correct displayed map section is gone after zooming in/out.
The overlays for Lonvia Hiking or Lonvia Cycling are shown without any problem.
I've attached a screenshot which shows a section after around 2 minutes of loading.
I've already tried deleting cache and reinstalling the app.
Thanks for your help ๐
The "follow" setting does not persist on configuration change. (This used to work properly at some point in the past.)
Dear team,
I'm one of the developers of a free and opensource Android app called BasicAirData GPS Logger.
Here you can find the source code: https://github.com/BasicAirData/GPSLogger
It is a lightweight offline track recorder that, for the visualization of the tracks, uses all the apps installed on the device that are capable to view GPX/KML files.
The app scans all the capable apps (in https://github.com/BasicAirData/GPSLogger/blob/master/app/src/main/java/eu/basicairdata/graziano/gpslogger/ExternalViewerChecker.java) this way:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
final PackageManager pm = context.getPackageManager();
File file = new File(getApplicationContext().getFilesDir() + "/empty.gpx");
Uri uri = FileProvider.getUriForFile(GPSApplication.getInstance(), "eu.basicairdata.graziano.gpslogger.fileprovider", file);
intent.setDataAndType(uri, "application/gpx+xml");
List<ResolveInfo> kmlLRI = pm.queryIntentActivities(intent, 0);
The kmlLRI
list contains all the apps that are capable to open the GPX files. All except OpenTopoMap Viewer.
I'm aware of the existance of your great app thanks to a user's feedback that reported the issue (BasicAirData/GPSLogger#142).
I looked into your Manifest, and I found a strange implementation of the <intent-filter>
.
What could we add to the GPS Logger's intent in order to find also your app?
Both GPS Logger and OpenTopoMap Viewer are free and open source (we are on Play Store and on F-Droid on IzzyOnDroid F-Droid Repository): it would be great to add the compatibility.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.