OSGeo / PROJ

PROJ - Cartographic Projections and Coordinate Transformations Library
https://proj.org
Other
1.72k stars 777 forks source link

prj with "local" projection from ArcGIS #4147

Closed jjimenezshaw closed 1 month ago

jjimenezshaw commented 4 months ago

I have a couple of "prj" files from ArcGIS that use a "local" projection:

PROJCS["Red_Mountain_LOCAL",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Local"],PARAMETER["False_Easting",123789.347],PARAMETER["False_Northing",123075.771],PARAMETER["Scale_Factor",1.00032],PARAMETER["Azimuth",0.076568],PARAMETER["Longitude_Of_Center",-106.8143525],PARAMETER["Latitude_Of_Center",39.66056579],UNIT["Foot_US",0.3048006096012192]]

This is formatted with projnfo:

PROJCS["Red_Mountain_LOCAL",
    GEOGCS["NAD83(2011)",
        DATUM["NAD83_National_Spatial_Reference_System_2011",
            SPHEROID["GRS 1980",6378137,298.257222101,
                AUTHORITY["EPSG","7019"]],
            AUTHORITY["EPSG","1116"]],
        PRIMEM["Greenwich",0],
        UNIT["Degree",0.0174532925199433]],
    PROJECTION["Local"],
    PARAMETER["False_Easting",123789.347],
    PARAMETER["False_Northing",123075.771],
    PARAMETER["Scale_Factor",1.00032],
    PARAMETER["Azimuth",0.076568],
    PARAMETER["Longitude_Of_Center",-106.8143525],
    PARAMETER["Latitude_Of_Center",39.66056579],
    UNIT["US survey foot",0.304800609601219,
        AUTHORITY["EPSG","9003"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH]]

(I have a set of points both projected and in lat-lon to test it)

That "local" method is not supported by PROJ.

The documentation at https://desktop.arcgis.com/en/arcmap/latest/map/projections/local.htm says that it is an orthographic projection, but it has more parameters that the orthographic in PROJ (https://proj.org/en/9.4/operations/projections/ortho.html). In particular an scale factor and an azimuth angle.

Could we support it in PROJ? (Does it make sense?)

melitakennedy commented 4 months ago

Hi all!

After much delay, strictly due to procrastination by me, it's being added to EPSG , and is currently in the QA/QC stage. So once Guidance Note 7-2 is republished, the math and example will be available. It's ellipsoidal and has a non-iterative inverse. The EPSG name for the operation method is Local Orthographic.

The CR will also add the San Francisco Airport PCS--here are the parameters supported by the projection:

Latitude of projection centre | 37.6289691889 | degree Longitude of projection centre | 122.3939415472 | degree Azimuth of initial line | 27.7927777 | degree Scale factor on initial line | 0.9999968 | unity Easting at projection centre | 0 | US survey foot Northing at projection centre | 0 | US survey foot

jjimenezshaw commented 4 months ago

@melitakennedy that sounds good! Please, keep us up to date.

jjimenezshaw commented 4 months ago

BTW @melitakennedy I would be useful jet another example where some parameters are not 0, like the false easting and northing in San Francisco Airpot PCS. Otherwise cannot check that those parameters are added correctly.

jjimenezshaw commented 3 months ago

@melitakennedy any news?

melitakennedy commented 3 months ago

@jjimenezshaw

Unfortunately, there's a delay in publishing the updated version of 7-2 document. I promise I'll post as soon as possible!

jjimenezshaw commented 1 month ago

As mentioned in #4226 , this is finally published in EPSG 11.015 I will proceed with a PR implementing it as a modification of +proj=ortho with 2 new parameters (scale factor and azimuth) as @rouault suggested.

jjimenezshaw commented 1 month ago

Looking in detail to the formulas, as @melitakennedy mentioned, the inverse transformation is not iterative. I understand that it is a simplification.

What should I do implementing it as a modification of +proj=ortho for the inverse case? Should I use always the iterative implementation shown in section "3.6.5 Orthographic", or should I check if azimuth != 0 or k != 1 to use the simplified non-iterative formula from section "3.6.6 Local Orthographic"?