Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Projected to Geographical conversion breaks with Lambert_Conformal_Conic_2SP #26

Open
stephankistner opened this issue Apr 6, 2023 · 2 comments

Comments

@stephankistner
Copy link

stephankistner commented Apr 6, 2023

Hi,

I had issues in mikeio when trying to create a Dfs2 file with a Lambert_Conformal_Conic_2SP projection. I can do this succesfully when trying manually (i.e. in MIKE Zero GUI), and in mikecore. So I traced the issue to the mikecore.projections.MapProjection class used to setup the Dfs2 projection info for the Dfs2 builder: when it tries to convert projected coordinates it runs into numerical issues. See example below:

Fail case: Lambert_Conformal_Conic_2SP projection

from mikecore.Projections import MapProjection

# The projected and geographic coordinates here are the same
# This can be converted back and forth using the Datum Converter tool in MIKE Zero
origin_projected = [  -65900.32888812723, -678217.039068304]
origin_geographic = [  24.01529,-34.987278]

# Custom projection string
proj_str = 'PROJCS["Custom",GEOGCS["Unused",DATUM["User defined",SPHEROID["WGS 1984",6378137,298.257223563]],'+\
    'PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],'+\
    'PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",24.751587],'+\
    'PARAMETER["Standard_Parallel_1",-40],PARAMETER["Standard_Parallel_2",-10],'+\
    'PARAMETER["Latitude_Of_Origin",-28.702538],UNIT["Meter",1]]'

# Try conversion using MIKE MapProjection
proj_core = MapProjection.Create(proj_str)

# Projected to Geographic Fails
print(proj_core.Proj2Geo(*origin_projected))

# Geographic to Projected works
print(proj_core.Geo2Proj(*origin_geographic))
>>> (444.87039857071056, nan)
>>> (-65900.2668223073, -678217.0403999202)

As you can see the Lambert_Conformal_Conic_2SP coordinate pairs fail when trying to converted from projected to geographical coordinates, while the reverse works just fine. I haven't tested this in the .NET/C# code, but I'm confident this isn't correct behaviour.

Working case: Transverse_Mercator projection

from mikecore.Projections import MapProjection

# Coordinate info
# The projected and geographic coordinates here are the same
# This can be converted back and forth using the Datum Converter tool in MIKE Zero
origin_projected = [  -89907.8133323,-3873624.5460040]
origin_geographic = [  24.01529,-34.987278]

# Custom projection string
proj_str = 'PROJCS["WG25",GEOGCS["Unused",DATUM["User defined",SPHEROID["WGS 1984",6378137,298.257223563]],'+\
    'PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],'+\
    'PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",25],PARAMETER["Scale_Factor",1],'+\
    'PARAMETER["Latitude_Of_Origin",0],UNIT["Meter",1]]'

# Try conversion using MIKE MapProjection
proj_core = MapProjection.Create(proj_str)

# Projected to Geographic Fails
print(proj_core.Proj2Geo(*origin_projected))

# Geographic to Projected works
print(proj_core.Geo2Proj(*origin_geographic))
>>> (24.015290000000082, -34.9872779999965)
>>> (-89907.81333230426, -3873624.5460043526)

Success - works as expected!

@stephankistner
Copy link
Author

Solution/Fix:
The problem is the MzCart.dll version 20.0.0.15310. It's encrypted, so I can't trace the issue further, but I replaced it with the version 21.0.0.16308 from the MIKE 2023 SDK and that solves the issue.

@JesperGr
Copy link
Collaborator

Thanks for finding a solution. I think it is time to bump the references to the MIKE Core/SDK components from 20.0 to 21.0. I will put that on my todo-list.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants