GEO Vision is a powerful, open-source Android GIS viewer for exploring and analyzing local geospatial files directly on your mobile device. Perfect for field work, quick GIS review, and offline data exploration without needing a desktop GIS application.
- ποΈ Multiple Format Support: GeoJSON, Shapefile, KML, GeoPackage, GeoTIFF, GPX, FileGDB, and more
- π¦ Offline-First: Full functionality without internet connection
- β‘ High Performance: Streaming parsers for handling large files efficiently
- π¨ Modern UI: Built with Jetpack Compose for smooth, responsive interface
- π Multi-Language: Arabic and English support with RTL/LTR layout support
- πΊοΈ Multiple Basemaps: OpenStreetMap, MapLibre GL, and ArcGIS integration (optional)
- π Coordinate Systems: Support for CRS transformation (UTM, Web Mercator, EPSG codes)
- π Dark Mode: Full dark mode support for comfortable viewing
---
| Format | Status | Capabilities | Notes |
|---|---|---|---|
| GeoJSON | β Full | Read, streaming parse, 100K+ features | RFC 7946 compliant |
| Shapefile | β Full | Read .shp/.shx/.dbf/.prj | Streaming with charset detection |
| KML/KMZ | β Full | Read with styling, placemarks, paths | Google Earth format |
| GeoPackage | β Full | Read vector/raster layers, auto-reprojection | GPKG v1.0+ |
| GeoTIFF | β Full | Read georeference raster data | GeoLocation embedded |
| FileGDB | β Partial | Read catalogs, geometry layers | FGDB v10/v13 |
| GPX | β Full | Read tracks, waypoints, routes | GPS Exchange Format |
| CSV | β Full | Read with lat/lon columns | XY coordinate support |
| WKB | β Full | Binary geometry parsing | EWKB compatible |
| SVG/Geospatial | π Planned | Future enhancement | Vector drawing support |
- Minimum SDK: Android 8.0 (API 26) for Core variant
- Minimum SDK: Android 9.0 (API 28) for ESRI variant
- Target SDK: Android 15 (API 36)
- Recommended RAM: 2GB+ (for large file handling)
- Kotlin: 2.0.21+
- Gradle: 8.13.2+
- Java: JDK 17+
- Build Tools: Android Gradle Plugin 8.13.2
# Ensure you have Java 17+ installed
java -version
# Clone the repository
git clone https://github.com/YOUR-USERNAME/GEO-Vision.git
cd "GEO-Vision"# Build the app
./gradlew build
# Run debug build on connected device
./gradlew installDebug
# Run with ESRI variant (optional - includes ArcGIS Runtime)
./gradlew installDebugEsri- Open the project in Android Studio
- Select Build β Make Project
- Run β Run 'app' (or press Shift+F10)
GEO Vision supports two build variants:
- Lightweight, minimal dependencies
- No ArcGIS Runtime library
- Min SDK: Android 8.0
- Recommended for: Most users, lower device specs
./gradlew installDebugCore- Includes ArcGIS Runtime for advanced mapping
- Additional features: dynamic layers, web maps
- Min SDK: Android 9.0
- Recommended for: Advanced users, field survey applications
./gradlew installDebugEsriGeoVision/
βββ app/ # Main application
β βββ src/main/
β β βββ java/com/geovision/mobile/
β β β βββ data/ # Data layer (41 files)
β β β β βββ *Parser.kt # Format-specific parsers
β β β β βββ *Manager.kt # Business logic
β β β β βββ *Service.kt # External integrations
β β β βββ ui/ # Jetpack Compose UI
β β β β βββ screens/
β β β β βββ components/
β β β β βββ theme/
β β β βββ core/ # Shared utilities
β β β β βββ AppLogger.kt
β β β β βββ MemoryMonitor.kt
β β β β βββ ...
β β β βββ MainActivity.kt # Entry point
β β βββ res/ # Resources (layouts, strings, etc)
β βββ build.gradle.kts # App-level build config
β
βββ geovision-esri-viewer/ # ESRI ArcGIS integration module
βββ mylibrary/ # Shared library utilities
β
βββ build.gradle.kts # Root build configuration
βββ settings.gradle.kts # Module configuration
βββ gradle/wrapper/ # Gradle wrapper scripts
-
Format Parsers: Streaming-based parsers for each format
GeoJsonParser.kt- RFC 7946 compliant JSON parsingShapefileParser.kt- Binary SHP/DBF parsingKmlParser.kt- XML KML parsing with style supportGdbParser.kt- FileGDB catalog reading- Others: GPX, WKB, GeoTIFF, CSV parsers
-
Data Management
LayerRepository.kt- Central data accessMetadataDatabase.kt- SQLite metadata storageCacheEvictionManager.kt- Memory managementProjectStorageManager.kt- File I/O handling
- Uses Proj4j for CRS transformations
- Supports: EPSG codes, UTM, Web Mercator, WGS84
- Automatic reprojection for GeoPackage layers
-
Screens: Composables for different views
- MapScreen - Main map view
- LayerManagerScreen - Layer list and properties
- DetailsScreen - Feature attribute viewer
- SettingsScreen - App preferences
-
Maps Integration
- OSMDroid (OpenStreetMap tiles)
- MapLibre GL (vector tiles)
- ArcGIS Runtime (when ESRI variant)
AppLogger.kt- Structured loggingMemoryMonitor.kt- RAM/heap monitoringGpsLifecycleManager.kt- Location servicesUserFriendlyErrors.kt- Error message handling
- β No full file loading: Files parsed token-by-token
- β Memory-efficient: Typical overhead per file: 1-5MB
- β Coroutine-aware: Cancellation support for long operations
- β Progressive rendering: Features displayed as they parse
File Size | Memory Usage | Parse Time | Device
----------|--------------|-----------|-------
100 MB | 45 MB | 8 sec | Snapdragon 845
50 MB | 22 MB | 3 sec | Snapdragon 888
10 MB | 8 MB | 0.5 sec | Snapdragon 888
- Layer cache with LRU eviction
- Metadata stored in SQLite for fast retrieval
- Temporary extraction for ZIP files
- β No cloud upload or tracking
- β All processing is local/offline
- β No telemetry or analytics
- β Path traversal validation for file operations
β οΈ Temporary files created in app cache directory only
-
EXIF Metadata: Photo files may contain GPS coordinates in metadata
- App displays warning before processing image files
- Use
ExifGpsParser.ktfor dedicated EXIF reading
-
Database Encryption: Local metadata NOT encrypted by default
- Recommendation: Use device-level encryption or move sensitive projects
- Future: EncryptedSharedPreferences integration planned
- Network: No internet required (fully offline)
- Storage: Data stored in
context.getFilesDir()and cache - Sharing: Use Android Share intent to export; built-in no-upload architecture
| Issue | Impact | Workaround |
|---|---|---|
| GDB Partial Support | Some geometry types not supported | Use GeoPackage export instead |
| Large File Parsing | >500MB files need high-end devices | Split large datasets |
| DBF Encoding | Non-UTF8 encodings detected heuristically | Ensure UTF-8 or CP1256 encoding |
| Shapefile Variants | Some variants may not parse | Verify with GDAL/QGIS first |
| KML Network Links | External URLs not fetched | Merge KML files offline |
| Styling Limitations | Complex KML styles simplified | Pre-style in QGIS if needed |
- β Files up to 500MB (with 2GB+ RAM)
- β Feature counts up to 100K per layer
- β All Android versions 8.0-15
- β Both portrait and landscape orientations
- β Dark mode on all supported versions
- β Real-time data streaming
- β WMS/WFS layer services
- β Raster data editing
- β Vector data editing (planned for v2.0)
- β 3D visualization
- β Network-based tile services (requires internet)
1. Pre-load survey area boundaries (Shapefile/GeoJSON)
2. Open survey form dataset (GeoPackage)
3. Use GPS tracking to navigate
4. Review attribute data in real-time
5. Export results back to office
1. Receive GeoJSON file via email
2. Open in GEO Vision
3. Inspect geometry and attributes
4. Decide if full QGIS/ArcGIS analysis needed
1. Load infrastructure layer (Shapefile)
2. Open inspection checklist
3. Navigate to inspection sites
4. View historical photos in metadata
# 1. Clone repository
git clone https://github.com/YOUR-USERNAME/GEO-Vision.git
cd GEO-Vision
# 2. Set up local.properties (required for ESRI variant)
# Create file: local.properties
# Add: sdk.dir=/path/to/Android/SDK
# 3. Build and install
./gradlew build
./gradlew installDebug# Unit tests
./gradlew test
# Android instrumented tests
./gradlew connectedAndroidTest
# Specific test class
./gradlew test -Dtest.single=GeoJsonParserTestAdd a new GIS format parser:
- Create
src/main/java/com/geovision/mobile/data/NewFormatParser.kt - Implement streaming parse function
- Return
GeoJsonParser.ParseResult - Update
FileTypeDetector.ktto recognize format - Add integration test
Modify UI layout:
- Edit corresponding Composable in
ui/screens/ - Use Compose preview for instant feedback
- Test on multiple screen sizes (tablet, phone)
Operation | Min RAM | Typical | Peak
-----------------------|---------|---------|------
Parse 10MB GeoJSON | 64MB | 120MB | 180MB
Parse 50MB Shapefile | 128MB | 250MB | 350MB
Display 100K features | 100MB | 200MB | 280MB
Cache layer metadata | - | 5-10MB | -
Component | Typical Size
-----------------------|-------------
App installation | 25-40MB (core), 60-80MB (ESRI)
Project cache | Dynamic (cleared on exit)
Metadata database | <5MB per project
- π’ Minimal (<1% per hour) for static viewing
- π‘ Moderate (3-5% per hour) with GPS tracking active
- π΄ High (10-20% per hour) with continuous rendering + GPS
We welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
- Read
CONTRIBUTING.md - Check existing Issues
- Review Code of Conduct
# 1. Fork the repository
# 2. Create feature branch
git checkout -b feature/my-new-feature
# 3. Make changes and commit
git commit -am "Add new feature: description"
# 4. Push to your fork
git push origin feature/my-new-feature
# 5. Open Pull Request on GitHub
# Include: description, testing performed, related issues- Kotlin: Follow official style guide
- Naming: Use descriptive camelCase for variables
- Comments: Write comments in English; code comments may be Arabic for team knowledge
- Tests: Aim for >80% code coverage for parsers
- Documentation: Update README for UI changes
- β High Priority: Fix GDB parser memory issues
- β High Priority: Add comprehensive unit tests
- β Performance optimization for large files
- β UI/UX improvements
- β Localization (more languages)
- β Documentation and tutorials
GEO Vision is open for contributions. We welcome developers, GIS users, and testers to help improve the application, test different geospatial files, report problems, and submit fixes.
GEO Vision is intended to support reading data from Esri Geodatabase files, but there are still issues with reading and displaying the layers correctly.
What needs improvement:
- File Geodatabase (FileGDB) support completeness
- Layer reading and parsing accuracy
- Attribute data handling
- Map rendering of GDB layers
Impact: Developers working with ArcGIS data need better FileGDB compatibility
Large datasets, such as world-level Shapefiles or files with many features, may cause rendering or reading problems. In some cases, the data may not appear correctly on the map.
What needs improvement:
- Rendering performance for 100K+ features
- Geometry handling and simplification
- Memory usage optimization
- Data streaming and chunking
Common Issues:
- Slow loading on large files (>100MB)
- UI freezing during rendering
- Features not displaying correctly
- Memory crashes on low-end devices
Some large or complex files may make the app slow or unresponsive during loading or map display.
What needs improvement:
- File loading optimization
- Progressive rendering (render while loading)
- Background processing architecture
- Memory management and garbage collection
- Spatial indexing for faster queries
Performance Targets:
- Load 100MB+ files in <30 seconds
- Render 1M+ features smoothly
- Maintain <200MB memory footprint for large files
The attribute table of Shapefile data may not always be read correctly, especially with DBF files, field names, encoding, or large tables.
What needs improvement:
- DBF file encoding detection and conversion
- Field name parsing and display
- Large attribute table rendering
- Data type handling (integer, float, string, date)
- Character encoding support (UTF-8, CP1252, CP1256, etc.)
Common Issues:
- Arabic/special characters showing as garbled text
- Field names truncated or not displayed
- Large tables cause app slowdown
- Numeric fields formatted incorrectly
Contributors can use AI tools to analyze the code, find the causes of these issues, suggest fixes, improve performance, and submit Pull Requests.
Steps to Contribute:
- Choose an issue - Pick one of the areas above
- Analyze the code - Use debugging tools and AI analysis
- Test locally - Run on real devices with different file sizes
- Create a fix - Implement improvements with tests
- Submit PR - Follow contribution guidelines and testing procedures
β Required Information:
- The file type used (e.g., Shapefile, GeoJSON, Geodatabase, etc.)
- File size (MB or GB)
- Number of features/records in the file
- Device model (e.g., Samsung Galaxy S21)
- Android version (e.g., Android 12)
- App version (check About section)
β Helpful Additional Information:
- A screenshot or screen recording
- A small public test file (if available and not confidential)
- Clear steps to reproduce the issue
- Expected vs. actual behavior
- Error messages or crash logs (see Settings β Logs)
β Performance Issues Specifically:
- Available device RAM
- Device storage status (full/available space)
- Whether the app becomes unresponsive
- Approximate loading/rendering time
- Whether it worked with smaller files
π Use the Bug Report Template for structured issue reporting
- π Android Developer Guide
- π Jetpack Compose Documentation
- π Kotlin Coroutines
- π OSGeo GIS Formats
- π¬ GitHub Discussions
- π Report Issues
- β Star on GitHub if you like the project!
- Enhanced layer styling UI
- Vector data editing (points, lines, polygons)
- Attribute table with filtering
- Search within features
- Performance improvements for large files
- WMS/WFS service support
- Real-time GPS tracking with route recording
- Advanced CRS support (all EPSG codes)
- Online tile service integration
- User-generated annotations
- Export to multiple formats (GeoJSON, Shapefile, GeoPackage)
- 3D visualization (point clouds, DEMs)
- Machine learning-based feature detection
- Cloud sync (optional, with privacy options)
- Augmented Reality (AR) overlay
- AI-powered data quality analysis
This project is licensed under the MIT License - see LICENSE file for details.
- Jetpack Compose: Apache 2.0
- OSMDroid: Apache 2.0
- MapLibre GL: BSD 2-Clause
- JTS Topology Suite: LGPL
- Proj4j: Apache 2.0
- ArcGIS Runtime (optional): Proprietary (ESRI)
- Development team members
- Community testers and bug reporters
- GIS community for standards and specifications
- QGIS - Desktop GIS reference
- GDAL/OGR - Format specifications
- OSGeo - Open standards
- OpenStreetMap community for tile services
Q: Can I edit features in the app?
A: Not in v1.0. Editing is planned for v2.0. Currently, the app is read-only.
Q: Does the app work without internet?
A: Yes! GEO Vision is completely offline. You need internet only to download files initially.
Q: What's the maximum file size I can open?
A: Depends on device RAM. Tested up to 500MB on phones with 2GB+ RAM.
Q: How do I report a bug?
A: Please open an Issue with steps to reproduce.
Q: Can I use this app commercially?
A: Yes, under MIT License terms. See LICENSE file.
Q: How do I request a new feature?
A: Open a Discussion or submit an Issue with details.
- π§ Email: ahmadibrahim.geo@gmail.com
- π¬ GitHub Discussions: For Q&A and feature requests
- π Issues: For bug reports
- π Website: [Your website if available]
Happy mapping! πΊοΈ
Last Updated: January 2026
Version: 1.0.0





