Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Projected to Geographical conversion breaks with Lambert_Conformal_Conic_2SP

Open
#26 2 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python
Domain
backend

Research direction

Start with the supplied Python reproduction and the mikecore.Projections.MapProjection entry point, comparing Proj2Geo with Geo2Proj for the Lambert_Conformal_L擎Conic_2SP projection. Trace why the inverse conversion returns (444.87039857071056, nan), then verify that the same coordinate pair converts to the expected geographic values without breaking the working Transverse_Mercator case.

Written by the indexing model from the issue text.

Description

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!

Dominant language
Python
Stars
5
Forks
1
Avg merge
1h 18m
Merged PRs (30d)
5

Getting set up

  • Ships a Dockerfile or Docker Compose file
  • No pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from DHI/mikecore-python

All issues in DHI/mikecore-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.