Giter Club home page Giter Club logo

epsg.io's Introduction

EPSG.io

This service allows you to discover and transform coordinate systems from all over the world. Created and maintained by the MapTiler team.

Installation

$ virtualenv venv
$ source venv/bin/activate
$ pip install -r requirements.txt

Copy the content of "index" directory from the .zip from the latest project release.

Start the server with:

$ export FLASK_APP=app.py
$ export FLASK_ENV=development
$ flask run

or use the gunicorn startup scripts (./epsgio start)

Create your own index from EPSG export

Note: This is not required, as you can easily download the ready-to-use index from releases.

  1. Download the newest EPSG database from [http://epsg-registry.org]
    • a. After login it will able to export registry as Export GML 3.2.1 with EPSG metadata
  2. Make sure that these files(folder) are in one folder
    • a. folder extra_codes_proj4_4.8.0.2
    • b. file CRS_exceptions.csv
    • c. file CRS_exceptions.py
    • d. file gml_parser.py
    • e. file GmlDictionary.xml (downloaded EPSG database from http://epsg-registry.org)
  3. Start indexing via python gml_parser.py
  4. Move created gml.sqlite into gml folder

Types of URLs:

CRS and Transformations are just codes (5514, 1623, 4326, 27700) Other are codes with suffix like:

  • for datums e.g. 9315-datum
  • for prime meridian e.g. 8901-primem
  • for ellipsoid e.g. 7004-ellipsoid
  • for method e.g. 9840-method
  • for coordinate system e.g. 6422-cs
  • for axis e.g. 106-axis
  • for area e.g. 1262-area
  • for units e.g. 9001-units

API for results

For result page exist a export in JSON and JSONP for example

[http://epsg.io/?q=czech&format=json&trans=1&callback=jsonpFunction]

where:

  • format=json for export in json (obligatory)
  • trans=1 for more detailed transformation in each coordinate reference system (optional)
  • callback=jsonpFunction for jsonp where "jsonpFunction" is name of Javascript function (optional)

API for /trans

For one point

[http://epsg.io/trans?x=50&y=17&z=0&s_srs=4326&t_srs=5514&callback=jsonpFunction]

where everything is optional:

  • x, y, z are coordinates of point, which going to be transformed (default is 0,0,0)
  • s_srs represent source coordinate reference system (default is EPSG:4326)
  • t_srs represent target coordinate reference system (default is EPSG:4326)
  • callback=jsonpFunction is for jsonp where "jsonpFunction" is name of JavaScript function

e.g. [http://epsg.io/trans] will transform point on coordinates 0,0,0 from EPSG:4326 to EPSG:4326

For many points

[http://epsg.io/trans?data=17,50;17,50,300;17.132,50.456&s_srs=4326&&t_srs=5514]

Where

  • data=x,y;x,y,z;x.x,y.y (for example)
  • Delimiter between points is ;
  • Delimiter between x,y,z is ,
  • Delimiter between decimal is .

Types of queries

  • kind:
value meaning value meaning
CRS(default) All coordinate reference systems ELLIPSOID Ellipsoid
PROJCRS Projected coordinate systems PRIMEM Prime meridian
GEOGCRS Geodetic coordinate systems METHOD Method
GEOG3DCRS Geodetic 3D coordinate systems CS Coordinate systems
GCENCRS Geocentric coordinate systems VERTCS Vertical coordinate system
VERTCRS Vertical coordinate systems SPHERCS Spherical coordinate system
ENGCRS Engineering coordinate systems CARTESCS Cartesian coordinate system
COMPOUNDCRS Compound coordinate systems ELLIPCS Ellipsoidal coordinate system
COORDOP All operations AXIS Axis
COPTRANS Transformations AREA Area
COPCONOP Compound operations UNIT Unit
COPCON Conversions ANGUNIT Angle unit
DATUM All datums SCALEUNIT Scale unit
VERTDAT Vertical datums LENUNIT Length unit
ENGDAT Engineering datums TIMEUNIT Time unit
GEODDAT Geodetic datums
  • deprecated: 0(default), 1
  • code: number of EPSG (5514, 4326,...)
  • name: string of name (wgs 84, jtsk, s-jtks)
  • area: string area of use (czech republic, world)
  • area_trans: string area of use of transformation
  • alt_title: alternative title (wgs84,...)

combinations: 8901 kind:PRIMEM, 1623 kind:COORDOP, code:1625 kind:COORDOP deprecated:1,...

epsg.io's People

Contributors

daliborjanak avatar dependabot[bot] avatar dudaerich avatar fabioknoedt avatar keosak avatar klokan avatar petrsloup avatar radimkacer avatar ricardoonly avatar tompohys avatar vaclavjanak avatar xkomczax avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

epsg.io's Issues

Documentation

Update the readme.md with sections:

  • Installation of ready to use index (download from GitHub)
  • Creating a custom index - dependencies

SEO: title tag + h1 + meta description

Better head title on the web.

Front page:
title:"EPSG.io: Coordinate systems worldwide"
description: TODO

Results page
H1/title: Coordinate systems for "Czech Republic"
Vertical coordinate systems for "Czech Republic"
Geodetic datums for "Czech Republic"
Transformations for "Czech Republic"
where "Czech republic" is the query - and prefix is adjusted by the type.
description: TODO

Detail page
title: EPSG:5514 - S-JTSK / Krovak East North - Alternative title
description: "Projected coordinate systems for Czech Republic, Slovakia. Greenwwich based- altenrative to ... "

Map page
title: "WGS84 and S-JTSK / Krovak East North - transform coordinates for position on a map - converting latitude / longitude degrees"
description: Transform coordinates ...
h1: EPSG:5514 S-JTSK / Krovak ...

update proj4js code

as of 2.0.0 we do proj4.defs('name', 'projString'); not proj4js.defs['name'] = 'projString';

EPSG GML - import

We need a list of all values from EPSG database GML export stored and displayed, not indexed by fulltext.

Let's import the GML epsg-registry.org exports into an SQLite database with structure:

urn = 'urn:ogc:def:deprecation:EPSG::833'
id = 'epsg-deprecation-833'
xml = valid XML as in #18

#18

This will be displayed as "OGC GML" for all EPSG codes - especially for transformations, datums, etc.

New redirects:
http://epsg.io/urn:ogc:def:deprecation:EPSG::833 -> http://epsg.io/833-deprecation
http://epsg.io/epsg-deprecation-833 -> http://epsg.io/833-deprecation

Caching

We will use CDN for caching - but we shall explore options for speeding up the server as well (multiple processes, memcached, improved HTTP headers)

Advertisements

Let's add Google AdSense to earn some money to cover costs of the hosting:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- EPSG.io -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:90px"
     data-ad-client="ca-pub-0328423815528922"
     data-ad-slot="6564733120"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

Results: UTM - drop down

.. a set of dropdowns adjusting the query for UTM - dropdowns for ellipsoids, and zones - similar to MapTiler - placed on the top of result list in case the query contains "utm" string.

Preview map for world maps wrong

For world coverage (such as in /4326 or /3857) we need to display the coordinates differently.

In the image link
http://maps.googleapis.com/maps/api/staticmap?size=265x215&scale=2&sensor=false&visual_refresh=true&center=0.0,0.0&path=color:0xff0000ff|fillcolor:0xff000022|weight:2|-90.0,-180.0|90.0,-180.0|90.0,180.0|-90.0,180.0|-90.0,-180.0
the
-90.0,-180.0|90.0,-180.0|90.0,180.0|-90.0,180.0|-90.0,-180.0
must be replaced by
-85,-179.9|85,-179.9|85,0|85,179.9|-85,179.9|-85,0|-85,-179.9

To be tested on 180,90 in the bounds.

About page

.. missing.

Links to GitHub Issues & Project page - open-source project.

Credits to:

  • Klokan Technologies GmbH, Switzerland
  • Moravian Library in Brno (research project TEMAP.cz)
  • Petr Pridal (KlokanTech + MZK, PhD candidate at Czech Technical University of Technology - Geodesy and Cartography)
  • Tomas Pohanka (Internship at KlokanTech, Master degree candiate at Palacky University Olomouc - Geoinformatics)
  • Radim Kacer (designer)

JSON export from GML

JSON export is going to be a conversion of XML (OGC GML) to JSON.

Use: https://github.com/hay/xml2json

like:
python xml2json.py --strip_newlines --strip_text --pretty ~/Downloads/5514.xml
on XML with removed namespaces (e.g. xlink:, epsg: lowercase!, xmlns:.*", gml:)

Example:

{
    "ProjectedCRS": {
        "@id": "ogp-crs-5514",
        "baseGeodeticCRS": {
            "@href": "urn:ogc:def:crs::4156"
        },
        "cartesianCS": {
            "@href": "urn:ogc:def:cs::4499"
        },
        "conversion": {
            "@href": "urn:ogc:def:coordinateOperation::5510"
        },
        "domainOfValidity": {
            "@href": "urn:ogc:def:area::1306"
        },
        "identifier": {
            "#text": "urn:ogc:def:crs::5514",
            "@codeSpace": "OGP"
        },
        "metaDataProperty": {
            "CommonMetaData": {
                "alias": {
                    "@alias": "S-JTSK / Krovak EN (G)",
                    "@code": "17802",
                    "@codeSpace": "urn:ogc:def:naming-system::7302",
                    "remarks": "Uses Greenwich meridian."
                },
                "changes": {
                    "changeID": {
                        "@href": "urn:ogc:def:change-request::2011.039"
                    }
                },
                "informationSource": "Land Survey Office (ZU), Prague. www.cuzk.cz/zu",
                "isDeprecated": "false",
                "revisionDate": "2011-05-09",
                "show": "true",
                "type": "projected"
            }
        },
        "name": "S-JTSK / Krovak East North",
        "remarks": "Greenwich-based alternative to S-JTSK (Ferro) / Krovak East North, CRS code 5221.",
        "scope": "GIS. Due to distortions in survey network introduced after the initial realisation the projection has an inaccuracy of several decimetres."
    }
}

for

<?xml version="1.0" encoding="UTF-8"?>
<gml:ProjectedCRS xmlns:epsg="urn:x-ogp:spec:schema-xsd:EPSG:1.0:dataset"
                  xmlns:gml="http://www.opengis.net/gml/3.2"
                  xmlns:xlink="http://www.w3.org/1999/xlink"
                  gml:id="ogp-crs-5514">
   <gml:metaDataProperty>
      <epsg:CommonMetaData>
         <epsg:type>projected</epsg:type>
         <epsg:alias code="17802" codeSpace="urn:ogc:def:naming-system:EPSG::7302"
                     alias="S-JTSK / Krovak EN (G)">
            <epsg:remarks>Uses Greenwich meridian.</epsg:remarks>
         </epsg:alias>
         <epsg:informationSource>Land Survey Office (ZU), Prague. www.cuzk.cz/zu</epsg:informationSource>
         <epsg:revisionDate>2011-05-09</epsg:revisionDate>
         <epsg:changes>
            <epsg:changeID xlink:href="urn:ogc:def:change-request:EPSG::2011.039"/>
         </epsg:changes>
         <epsg:show>true</epsg:show>
         <epsg:isDeprecated>false</epsg:isDeprecated>
      </epsg:CommonMetaData>
   </gml:metaDataProperty>
   <gml:identifier codeSpace="OGP">urn:ogc:def:crs:EPSG::5514</gml:identifier>
   <gml:name>S-JTSK / Krovak East North</gml:name>
   <gml:remarks>Greenwich-based alternative to S-JTSK (Ferro) / Krovak East North, CRS code 5221.</gml:remarks>
   <gml:domainOfValidity xlink:href="urn:ogc:def:area:EPSG::1306"/>
   <gml:scope>GIS. Due to distortions in survey network introduced after the initial realisation the projection has an inaccuracy of several decimetres.</gml:scope>
   <gml:conversion xlink:href="urn:ogc:def:coordinateOperation:EPSG::5510"/>
   <gml:baseGeodeticCRS xlink:href="urn:ogc:def:crs:EPSG::4156"/>
   <gml:cartesianCS xlink:href="urn:ogc:def:cs:EPSG::4499"/>
</gml:ProjectedCRS>

GeoIP suggestion: states of Germany

Germany has in EPSG.io mentioned also the individual states - so the GeoIP should query better "Bayern" or "Nordrhein-Westfalen" as "Germany". We will get more relevant results then.

Similarly we could create a list of locations which are satellites for other countries - such as "Corsica" or "Reunion".

This may be useful in suggesting relevant coordinate systems from full postal address via reverse geocoding on the /map application.

ESRI WKT for 3857

Until OGR/GDAL supports the export of EPSG:3857 to expected ESRI WKT (http://trac.osgeo.org/gdal/ticket/3962)

we implement a hack returning for code 3857 the ESRI definition:

PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]

Coordinates button under Attributes

Can we try to move the button "Get coordinates on the map" down under Attributes line, in case there are no transformations to chose from - and it is otherwise alone above in the div?

I hope it may look better then - but did not discuss it yet with designer. What do you think?

EPSG/ESRI 37203 corrections (missing towgs84!)

This may be a problem of other from Proj4 ESRI derived systems in the EPSG.io database. May be solved properly by #24

Reported by:
[Dr.Sharad Lele, Senior Fellow, ATREE www.atree.org]
[email protected]

EPSG 37203 (or ESRI 37203) corresponds to GCS Everest India Nepal, which refers to Everest 1956 spheroid and India_nepal datum. This spheroid-datum combination is used in Survey of India toposheets of the 1960-2000 period.

The problem is that the proj.4 specification of 37203 is incomplete. It only specifies:

+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs ...........................[1]

This implies there is no displacement of the datum with respect to the WGS84 centre of earth. But in fact, the India-Nepal datum is displaced significantly w.r.t WGS84. The displacement values are given in various documents (one such document is attached--search for Nepal). Accordingly, the correct proj.4 specification of this spheroid-datum combination would be:

+proj=longlat +a=6377301.243 +b=6356100.2284 +towgs84=295.00,736.00,257.00,0,0,0,0 +no_defs ...................... [2]

[PERHAPS a more accurate representation would be

+proj=longlat +a=6377301.243 +b=6356100.2284 +towgs84=295.00,736.00,257.00,12.00,10.00,15.00,7.00 +no_defs ............. .[3]

I am not sure about this].

As you know, QGIS software uses the proj.4 definitions directly. I have experimented in QGIS with using just 37203 as it is to geo-rectify scanned toposheets. But this results in the geo-rectified toposheet being displaced from its correct position by about 200meters. When i use my 'corrected proj.4 specification' [2], the geo-rectified toposheet sits perfectly in position. I have tested this with several toposheets and the same thing happens.

I hope I am making my point clear. I am not an expert on projections or GIS software as such, but I have over many years figured out how to correctly geo-rectify Indian toposheets. When I was using ERDAS Imagine to do this, I was explicitly defining the 'reference projection system' as "Geographic lat-long with Everest 1956 spheroid and India-Nepal datum", and things worked just fine. When I shifted to QGIS, I noticed this problem (because QGIS uses the proj.4 definitions), and so I thought of bringing it to your notice.

I would be happy to correspond further if any clarifications are required.

Transformation: 3 parameters / 7 parameters / Grid file

In the list of transformations please add behind the code" [3]", "[7]" or " [grid]".

Under the Name of the transformation, Accuracy and Code in the middle column please add "Grid shift:" and one of "3 parameters" / "7 parameters" / "Grid file" / (maybe "Other"?)

Degree from greenwich wrong

http://epsg.io/8905-primem

It tells:

Degree from Greenwich: -3.411658

and later in the GML:

 <gml:greenwichLongitude uom="urn:ogc:def:uom:EPSG::9102">3.687938888889</gml:greenwichLongitude>

together with

          <epsg:sexagesimalValue uom="urn:ogc:def:uom:EPSG::9110">
           <epsg:degrees>3</epsg:degrees>
           <epsg:minutes>41</epsg:minutes>
           <epsg:seconds>16.58</epsg:seconds>
           <epsg:hemisphere>W</epsg:hemisphere>

so the first value is probably wrong?

User comments included for every code

We will use Disqus for now:

    <div id="disqus_thread"></div>
    <script type="text/javascript">
        /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
        var disqus_shortname = 'epsg'; // required: replace example with your forum shortname

        /* * * DON'T EDIT BELOW THIS LINE * * */
        (function() {
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
        })();
    </script>
    <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
    <a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>

Suggest state or country for typed address

People type into search box often an address.
We could detect this with Google Geocoder in JavaScript.

In case the address is detected, and we have no results, then we can show coordinate system for the country (state for USA or Germany) from detected address and suggest "coordinates on a map" at given location.

Map: Postal address

This is also retrievable via Google Maps API reverse geocoding.

We may need it for suggesting alternative "coordinate systems" anyway - as mentioned in #4.

Bounds on the Map: zoom to + highlight the area of transformation

The Map page (e.g. /4326/coordinates) should display bounds of transformation - and zoom the these by default. (now the zoom is fixed :-().

The bounds should be passed instead of the center lon/lat from the HTML to JavaScript.

For displaying the bounds on the map we may use the trick similar to http://www.kartenportal.ch/kartensammlungen/ - as it is described at:

http://stackoverflow.com/questions/2956355/highlight-polygon-and-tint-rest-of-map-using-google-maps

Results: NAD suggestion

If the query contains word "nad" we should on the top of the result list suggest:

Did you mean "NAD83" or "NAD27"?

where these two are are links replacing word "nad" by "nad83" or "nad27" in the query and triggering new result list.

API: multiple /trans in one request

It would be very useful to have the ability to do multiple transformations in one API request.

Parameters would be similar to https://github.com/klokantech/epsg.io#api-for-trans, but instead of passing x,y and z, maybe a single array could be passed (with semi-colon separating records and comma separating individual components ?:
?data=x1,y1,z1;x2,y2,z2;x3,y3;x4,y4,z5;... (with z being optional)).

This would highly optimize efficiency of certain application on both client-side (less requests) and even server-side (less requests + maybe lower overhead (shared transformation instance for multiple points))

Grid shift transformations

For Czech Republic, Switzerland, France and New Zealand are available grid files which would be cool to list under transformations.

These do not have records in official EPSG database.

Czech: http://grass.fsv.cvut.cz/gwiki/S-JTSK-Grid
Swiss CHENyx06: http://www.swisstopo.admin.ch/internet/swisstopo/en/home/products/software/products/chenyx06.html
New Zealand: nzgd2kgrid0005.gsb: http://help.maptiler.org/coordinates/australasia/new-zealand
France, ntf_r93: ..
Canada, ...
UK, ostn02: http://www.ordnancesurvey.co.uk/business-and-government/help-and-support/navigation-technology/os-net/ostn02-ntv2-format.html

more at http://trac.osgeo.org/proj/

ESRI WKT - import

Proper solution SQLite database with all ESRI WKT codes - including the hierarchy.

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.