ProjPicker (projection picker) is a Python module that allows the user to select all coordinate reference systems (CRSs)

Overview

ProjPicker

PyPI version Documentation Status

ProjPicker (projection picker) is a Python module that allows the user to select all coordinate reference systems (CRSs) whose extent completely contains given points, polylines, polygons, and bounding boxes using set-theoretic logical operators in a postfix notation. The goal is to make it easy and visual to select a desired projection by location. This project was motivated by a GRASS GIS feature request. See its documentation. The project uses a copy of GetOSM to download OpenStreetMap tiles.

ProjPicker Web is online at https://projpicker.pythonanywhere.com/.

For GRASS GIS, a new module g.projpicker that wraps around this project is available.

image image

ProjPicker running on Android using Termux

  1. Install Termux from F-Droid
  2. Run it from Android
  3. Install Python: pkg install python
  4. Install ProjPicker: pip install projpicker
  5. Start the ProjPicker web server: projpicker -S
  6. Open http://localhost:8000/ in the browser

Workshop

Change log

See here.

Subprojects

Ideas

  1. Client-only web application that doesn't require Python in the backend
  2. CRS hints: Crowdsourcing agency and product information? Is usage from PROJ enough?

Versioning

N(.N)*[{a|b|rc}N][.postN][.devN]

Sponsor

This project was kindly funded by the Institute for Environmental and Spatial Analysis (IESA) at the University of North Georgia (UNG).

License

Copyright (C) 2021 Huidae Cho and Owen Smith

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.

Comments
  • Sentence case in the documentation

    Sentence case in the documentation

    Is it possible to convert this Title Case to Sentence case to be consistent?

    https://projpicker.readthedocs.io/en/latest/command_line_options.html#Positional%20Arguments

    "Positional Arguments" => "Positional arguments"? I guess, this is sphinx, not even argparse because argparse says "optional arguments", not "Named Arguments".

    documentation 
    opened by HuidaeCho 28
  • More tool ideas for ArcGIS Pro Toolbox

    More tool ideas for ArcGIS Pro Toolbox

    These tools will be useful:

    • Guess Raster Projection (Current tool renamed to Guess Feature Class Projection)
    • Reproject Raster
    • Reproject Feature Class
    enhancement 
    opened by HuidaeCho 9
  • Sphinx external link issue

    Sphinx external link issue

    @ocsmit Please look into this issue https://github.com/sphinx-doc/sphinx/issues/9351. The link to GRASS GIS module in the sidebar doesn't work. Maybe, we should leave it like that for a while so the sphinx devs can check it? Anyway, we need to either fix this issue or just create an almost-empty page that simply forwards to the external link, which I don't prefer personally. I guess, it could be a theme issue?

    documentation 
    opened by HuidaeCho 5
  • CRS Info widget

    CRS Info widget

    image

    @ocsmit Is CRS Info too small for you? I hardcoded its height to 125, but I guess it's system-dependent, so I need to grow it a little bit.

    Also, is there a way to add a small padding to the left of the info text other than adding a space to the text itself (ugly...)?

    Also, as is CRS Info is not copyable. Is there a better widget type, like <textarea> that can be read-only?

    enhancement 
    opened by HuidaeCho 4
  • OSM: Smooth navigation

    OSM: Smooth navigation

    • Tile caching
    • Multithreaded downloads
    • Partial zoom levels between integers using scaled tiles
    • Zoom first using the current tiles and switch to the new image later (double buffering)
    enhancement 
    opened by HuidaeCho 3
  • Option to display PROJ wkt if proj install is found?

    Option to display PROJ wkt if proj install is found?

    Similar to how GRASS and QGIS show the PROJ wkt, we could have an option to switch between the ProjPicker Query info and the PROJ wkt if a PROJ isntallation is found.

    image

    image Potential button placement are shown at [1] and [2]

    We could implement a bootstrap version of pyprojs code to detect if PROJ is installed found here.

    enhancement 
    opened by ocsmit 3
  • Wx GUI Zoom Error

    Wx GUI Zoom Error

    Getting this error when trying to Zoom.

    Traceback (most recent call last):
      File "/home/ocsmit/Work/projpicker/projpicker/gui_wx.py", line 255, in on_zoom
        geoms_bbox = calc_geoms_bbox()
    TypeError: calc_geoms_bbox() missing 1 required positional argument: 'geoms'
    
    bug 
    opened by ocsmit 2
  • TODO: Repo cleanup

    TODO: Repo cleanup

    @ocsmit I'm going to create a new archive branch for my JS files in the core repo. Do you have anything to keep in the gui repo? Is the wxpython branch there the same as the archived_gui branch in the core repo? What about electron and main? This project was really fun and I learned a lot. I don't want to lose any significant code.

    question 
    opened by HuidaeCho 2
  • Away from wxPython?

    Away from wxPython?

    I found many issues with the wx.html2.WebView API while trying to work around the 1000-character limit. Some functions just didn't work as documented. See my comments following XXX in gui.py. Maybe, we still have to figure out how to use those functions? I thought about some alternatives:

    Also, what about this idea? Implement the entire UI in HTML and JavaScript, and run a HTTP server? Yeah... it sounds heavy, but in this case, we can implement both the web and desktop versions in the same code base.

    question 
    opened by HuidaeCho 2
  • Doc: Document any features missing in the documentation

    Doc: Document any features missing in the documentation

    • Core GUI
    • Server: different modes
    • ProjPicker Web
    • Environment variables
      • PROJPICKER_VERBOSE
      • PROJPICKER_GUI
      • PROJPICKER_LATITUDE
      • PROJPICKER_LONGITUDE
      • PROJPICKER_ZOOM
      • PROJPICKER_DZOOM
    documentation 
    opened by HuidaeCho 1
  • Advanced Desktop GUI

    Advanced Desktop GUI

    • Tabs between CRS Info (read-only user-copyable) and Query Builder (user-typable)
    • Draw geometries => Insert geometry strings at the current cursor location in the query builder
    • At the bottom of the query builder, "Query" button or live query with no buttons?
    • What to do with the logical buttons? They just add "and", "or", "xor" to the first line (overwrite or insert). Once the first line is changed to "postfix" by the user, deactivate all three buttons? If the first word "postfix" is removed, reactivate them?
    enhancement 
    opened by HuidaeCho 1
  • WKT not working in GRASS GIS

    WKT not working in GRASS GIS

    WKT output from ProjPicker:

    GEOGCRS["Korean 1995",
        DATUM["Korean Datum 1995",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        CS[ellipsoidal,2],
            AXIS["geodetic latitude (Lat)",north,
                ORDER[1],
                ANGLEUNIT["degree",0.0174532925199433]],
            AXIS["geodetic longitude (Lon)",east,
                ORDER[2],
                ANGLEUNIT["degree",0.0174532925199433]],
        USAGE[
            SCOPE["Geodesy."],
            AREA["Republic of Korea (South Korea) - onshore."],
            BBOX[33.14,124.53,38.64,131.01]],
        ID["EPSG",4166]]
    

    The following change is needed to make the ProjPicker WKT work:

    1. Change GEOGCRS to GEOGCS

    Working WKT:

    GEOGCS["Korean 1995",
        DATUM["Korean Datum 1995",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        CS[ellipsoidal,2],
            AXIS["geodetic latitude (Lat)",north,
                ORDER[1],
                ANGLEUNIT["degree",0.0174532925199433]],
            AXIS["geodetic longitude (Lon)",east,
                ORDER[2],
                ANGLEUNIT["degree",0.0174532925199433]],
        USAGE[
            SCOPE["Geodesy."],
            AREA["Republic of Korea (South Korea) - onshore."],
            BBOX[33.14,124.53,38.64,131.01]],
        ID["EPSG",4166]]
    
    bug 
    opened by HuidaeCho 1
  • WKT not working in ArcGIS Pro

    WKT not working in ArcGIS Pro

    WKT output from ProjPicker:

    GEOGCRS["Korean 1995",
        DATUM["Korean Datum 1995",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        CS[ellipsoidal,2],
            AXIS["geodetic latitude (Lat)",north,
                ORDER[1],
                ANGLEUNIT["degree",0.0174532925199433]],
            AXIS["geodetic longitude (Lon)",east,
                ORDER[2],
                ANGLEUNIT["degree",0.0174532925199433]],
        USAGE[
            SCOPE["Geodesy."],
            AREA["Republic of Korea (South Korea) - onshore."],
            BBOX[33.14,124.53,38.64,131.01]],
        ID["EPSG",4166]]
    

    EPSG:4166 defined by ArcGIS Pro (with added newlines for formatting; ArcGIS Pro doesn't like formatted WKT):

    GEOGCS["GCS_Korean_Datum_1995",
    	DATUM["D_Korean_Datum_1995",
    		SPHEROID["WGS_1984",6378137.0,298.257223563]],
    	PRIMEM["Greenwich",0.0],
    	UNIT["Degree",0.0174532925199433]]
    

    The following changes are needed to make the ProjPicker WKT work:

    1. Change GEOGCRS to GEOGCS
    2. Add UNIT["Degree",0.0174532925199433]
    3. Remove newlines

    Working WKT with added newlines:

    GEOGCS["Korean 1995",
        DATUM["Korean Datum 1995",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        CS[ellipsoidal,2],
            AXIS["geodetic latitude (Lat)",north,
                ORDER[1],
                ANGLEUNIT["degree",0.0174532925199433]],
            AXIS["geodetic longitude (Lon)",east,
                ORDER[2],
                ANGLEUNIT["degree",0.0174532925199433]],
        USAGE[
            SCOPE["Geodesy."],
            AREA["Republic of Korea (South Korea) - onshore."],
            BBOX[33.14,124.53,38.64,131.01]],
        UNIT["Degree",0.0174532925199433],
        ID["EPSG",4166]]
    
    bug 
    opened by HuidaeCho 1
Owner
Huidae Cho
Huidae Cho (/hidɛ t͡ɕo/, 조희대, 曺喜大) is an Assistant Professor of Geospatial Science and Computing at the University of North Georgia and GRASS GIS developer.
Huidae Cho
Python interface to PROJ (cartographic projections and coordinate transformations library)

pyproj Python interface to PROJ (cartographic projections and coordinate transformations library). Documentation Stable: http://pyproj4.github.io/pypr

null 832 Dec 31, 2022
pure-Python (Numpy optional) 3D coordinate conversions for geospace ecef enu eci

Python 3-D coordinate conversions Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. API similar to

Geospace code 292 Dec 29, 2022
Construct and use map tile grids in different projection.

Morecantile +-------------+-------------+ ymax | | | | x: 0 | x: 1 | | y: 0 | y: 0

Development Seed 67 Dec 23, 2022
Bacon - Band-limited Coordinate Networks for Multiscale Scene Representation

BACON: Band-limited Coordinate Networks for Multiscale Scene Representation Proj

Stanford Computational Imaging Lab 144 Dec 29, 2022
gpdvega is a bridge between GeoPandas and Altair that allows to seamlessly chart geospatial data

gpdvega gpdvega is a bridge between GeoPandas a geospatial extension of Pandas and the declarative statistical visualization library Altair, which all

Ilia Timofeev 49 Jul 25, 2022
Script that allows to download data with satellite's orbit height and create CSV with their change in time.

Satellite orbit height ◾ Requirements Python >= 3.8 Packages listen in reuirements.txt (run pip install -r requirements.txt) Account on Space Track ◾

Alicja Musiał 2 Jan 17, 2022
Python module to access the OpenCage geocoding API

OpenCage Geocoding Module for Python A Python module to access the OpenCage Geocoder. Build Status / Code Quality / etc Usage Supports Python 3.6 or n

OpenCage GmbH 57 Nov 1, 2022
Python module and script to interact with the Tractive GPS tracker.

pyTractive GPS Python module and script to interact with the Tractive GPS tracker. Requirements Python 3 geopy folium pandas pillow usage: main.py [-h

Dr. Usman Kayani 3 Nov 16, 2022
User friendly Rasterio plugin to read raster datasets.

rio-tiler User friendly Rasterio plugin to read raster datasets. Documentation: https://cogeotiff.github.io/rio-tiler/ Source Code: https://github.com

null 372 Dec 23, 2022
Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF.

google-maps-at-88-mph The folks maintaining Google Maps regularly update the satellite imagery it serves its users, but outdated versions of the image

Noah Doersing 111 Sep 27, 2022
This GUI app was created to show the detailed information about the weather in any city selected by user

WeatherApp Content Brief description Tools Features Hotkeys How it works Screenshots Ways to improve the project Installation Brief description This G

TheBugYouCantFix 5 Dec 30, 2022
Program that shows all the details of the given IP address. Build with Python and ipinfo.io API

ip-details This is a program that shows all the details of the given IP address. Build with Python and ipinfo.io API Usage To use this program, run th

null 4 Mar 1, 2022
This is a simple python code to get IP address and its location using python

IP address & Location finder @DEV/ED : Pavan Ananth Sharma Dependencies: ip2geotools Note: use pip install ip2geotools to install this in your termin

Pavan Ananth Sharma 2 Jul 5, 2022
GeoIP Legacy Python API

MaxMind GeoIP Legacy Python Extension API Requirements Python 2.5+ or 3.3+ GeoIP Legacy C Library 1.4.7 or greater Installation With pip: $ pip instal

MaxMind 230 Nov 10, 2022
Python bindings and utilities for GeoJSON

geojson This Python library contains: Functions for encoding and decoding GeoJSON formatted data Classes for all GeoJSON Objects An implementation of

Jazzband 765 Jan 6, 2023
Geocoding library for Python.

geopy geopy is a Python client for several popular geocoding web services. geopy makes it easy for Python developers to locate the coordinates of addr

geopy 3.8k Dec 30, 2022
Python Data. Leaflet.js Maps.

folium Python Data, Leaflet.js Maps folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js

null 6k Jan 2, 2023
Python tools for geographic data

GeoPandas Python tools for geographic data Introduction GeoPandas is a project to add support for geographic data to pandas objects. It currently impl

GeoPandas 3.5k Jan 3, 2023
Python bindings and utilities for GeoJSON

geojson This Python library contains: Functions for encoding and decoding GeoJSON formatted data Classes for all GeoJSON Objects An implementation of

Jazzband 763 Dec 26, 2022