Skip to content

ahmadibrahim4geo/GeoVision

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ—ΊοΈ GEO Vision - Mobile GIS Viewer

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.

Version Kotlin Compose License Android


✨ Key Features

  • πŸ—‚οΈ 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

Screenshots

---

🎯 Supported GIS Formats

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

πŸ“‹ System Requirements

Android

  • 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)

Development

  • Kotlin: 2.0.21+
  • Gradle: 8.13.2+
  • Java: JDK 17+
  • Build Tools: Android Gradle Plugin 8.13.2

πŸš€ Getting Started

Prerequisites

# 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 & Run

Using Gradle (Recommended)

# Build the app
./gradlew build

# Run debug build on connected device
./gradlew installDebug

# Run with ESRI variant (optional - includes ArcGIS Runtime)
./gradlew installDebugEsri

Using Android Studio

  1. Open the project in Android Studio
  2. Select Build β†’ Make Project
  3. Run β†’ Run 'app' (or press Shift+F10)

πŸ”§ Build Variants

GEO Vision supports two build variants:

1. Core Variant (Default)

  • Lightweight, minimal dependencies
  • No ArcGIS Runtime library
  • Min SDK: Android 8.0
  • Recommended for: Most users, lower device specs
./gradlew installDebugCore

2. ESRI Variant (Optional)

  • 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 installDebugEsri

πŸ“± Architecture Overview

GeoVision/
β”œβ”€β”€ 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

Key Architectural Components

1. Data Layer (data/ package)

  • Format Parsers: Streaming-based parsers for each format

    • GeoJsonParser.kt - RFC 7946 compliant JSON parsing
    • ShapefileParser.kt - Binary SHP/DBF parsing
    • KmlParser.kt - XML KML parsing with style support
    • GdbParser.kt - FileGDB catalog reading
    • Others: GPX, WKB, GeoTIFF, CSV parsers
  • Data Management

    • LayerRepository.kt - Central data access
    • MetadataDatabase.kt - SQLite metadata storage
    • CacheEvictionManager.kt - Memory management
    • ProjectStorageManager.kt - File I/O handling

2. Coordinate Transform (data/CrsTransform.kt, CoordinateConverter.kt)

  • Uses Proj4j for CRS transformations
  • Supports: EPSG codes, UTM, Web Mercator, WGS84
  • Automatic reprojection for GeoPackage layers

3. UI Layer (ui/ package)

  • 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)

4. Core Utilities (core/ package)

  • AppLogger.kt - Structured logging
  • MemoryMonitor.kt - RAM/heap monitoring
  • GpsLifecycleManager.kt - Location services
  • UserFriendlyErrors.kt - Error message handling

🎨 Performance Optimizations

Streaming Architecture

  • βœ… 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

Example Performance Metrics

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

Caching Strategy

  • Layer cache with LRU eviction
  • Metadata stored in SQLite for fast retrieval
  • Temporary extraction for ZIP files

πŸ”’ Security & Data Privacy

πŸ›‘οΈ Security Features

  • βœ… 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

⚠️ Important Privacy Warnings

  • EXIF Metadata: Photo files may contain GPS coordinates in metadata

    • App displays warning before processing image files
    • Use ExifGpsParser.kt for dedicated EXIF reading
  • Database Encryption: Local metadata NOT encrypted by default

    • Recommendation: Use device-level encryption or move sensitive projects
    • Future: EncryptedSharedPreferences integration planned

πŸ“‹ Data Handling

  • 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

πŸ› Known Issues & Limitations

⚠️ Current Limitations

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

βœ… Tested Configurations

  • βœ… 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

❌ Not Supported

  • ❌ 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)

πŸ—‚οΈ Example Use Cases

1. Field Survey Work

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

2. Quick Data Preview

1. Receive GeoJSON file via email
2. Open in GEO Vision
3. Inspect geometry and attributes
4. Decide if full QGIS/ArcGIS analysis needed

3. Site Inspection

1. Load infrastructure layer (Shapefile)
2. Open inspection checklist
3. Navigate to inspection sites
4. View historical photos in metadata

πŸ› οΈ Development Guide

Setting Up Development Environment

# 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

Running Tests

# Unit tests
./gradlew test

# Android instrumented tests
./gradlew connectedAndroidTest

# Specific test class
./gradlew test -Dtest.single=GeoJsonParserTest

Common Development Tasks

Add a new GIS format parser:

  1. Create src/main/java/com/geovision/mobile/data/NewFormatParser.kt
  2. Implement streaming parse function
  3. Return GeoJsonParser.ParseResult
  4. Update FileTypeDetector.kt to recognize format
  5. Add integration test

Modify UI layout:

  1. Edit corresponding Composable in ui/screens/
  2. Use Compose preview for instant feedback
  3. Test on multiple screen sizes (tablet, phone)

πŸ“Š Resource Consumption

Memory Usage (per operation)

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  | -

Disk Space

Component              | Typical Size
-----------------------|-------------
App installation       | 25-40MB (core), 60-80MB (ESRI)
Project cache          | Dynamic (cleared on exit)
Metadata database      | <5MB per project

Battery Impact

  • 🟒 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

🀝 Contributing

We welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.

Before You Start

  1. Read CONTRIBUTING.md
  2. Check existing Issues
  3. Review Code of Conduct

Contribution Process

# 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

Code Style Guidelines

  • 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

Areas Needing Contribution

  • βœ… 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

πŸ†˜ Known Issues and Help Wanted

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.

Current Areas That Need Improvement

1. πŸ—„οΈ Esri Geodatabase Support

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


2. πŸ“Š Large Geographic Files

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

3. βš™οΈ Heavy Data Performance

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

4. πŸ“‹ Shapefile Attribute Table Issues

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

How Contributors Can Help

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:

  1. Choose an issue - Pick one of the areas above
  2. Analyze the code - Use debugging tools and AI analysis
  3. Test locally - Run on real devices with different file sizes
  4. Create a fix - Implement improvements with tests
  5. Submit PR - Follow contribution guidelines and testing procedures

When Reporting a Problem, Please Include

βœ… 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


πŸ“š Documentation & Resources

Official Resources

GIS Format Specifications

Community


πŸ“ˆ Roadmap & Future Plans

Version 1.1 (Next)

  • Enhanced layer styling UI
  • Vector data editing (points, lines, polygons)
  • Attribute table with filtering
  • Search within features
  • Performance improvements for large files

Version 2.0 (Planned)

  • 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)

Future (Beyond 2.0)

  • 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

πŸ“ License

This project is licensed under the MIT License - see LICENSE file for details.

Third-Party Licenses

  • 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)

πŸ™ Acknowledgments

Contributors

  • Development team members
  • Community testers and bug reporters
  • GIS community for standards and specifications

Inspiration & Tools

  • QGIS - Desktop GIS reference
  • GDAL/OGR - Format specifications
  • OSGeo - Open standards
  • OpenStreetMap community for tile services

❓ FAQ

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.


πŸ“ž Support & Contact

  • πŸ“§ 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

About

Mobile GIS viewer for Android that opens and displays local geospatial files such as Shapefile, GeoJSON, KML, GeoPackage, and Esri Geodatabase.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors

Languages