Page MenuHomePhabricator

<mapframe> has inconsistent handling while crossing the antimeridian
Open, Needs TriagePublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • Make a mapframe with JSON to display markers and lines.
  • Put four markers on opposite sides of the antimeridian
  • Marker 1 at 173, 1.5
  • Marker 2 at -173, 1.5
  • Marker 3 at 187, -1.5 (outside of domain)
  • Marker 4 at -187, -1.5 (outside of domain)
  • Draw 5 latitude lines
  • Line red 1: 175 to 185 at 1.0 N (escapes Eastern Hemi)
  • Line red 2: 175 to 179.99 and -179.99 to -175 at 0.0 N (following advice https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.9)
  • Line red 3: -185 to -175 at 1.0 S (escapes Western Hemi)
  • Line blue 4: 175 to 179.99 and 180.01 to 185 at 2.0 S (escapes Eastern Hemi)
  • Line blue 5: 185 to 180.01 and 179.99 to 175 at 2.5 S (Line blue 5 reversed)

Here's the wikimarkup:

<mapframe text="try several options"
          width=700 height=350
          zoom=5
          latitude=0 longitude=179>
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": 
        { 
            "marker-symbol": "-number", 
            "marker-color": "46ea5f", 
            "marker-size": "medium"
        }, 
      "geometry": 
        { 
            "type": "Point",
            "coordinates": [173.0, 1.5] 
        }
    },
    {
      "type": "Feature",
      "properties": 
        { 
            "marker-symbol": "-number", 
            "marker-color": "46ea5f", 
            "marker-size": "medium"
        }, 
      "geometry": 
        { 
            "type": "Point",
            "coordinates": [-173.0, 1.5] 
        }
    },
    {
      "type": "Feature",
      "properties": 
        { 
            "marker-symbol": "-number", 
            "marker-color": "46ea5f", 
            "marker-size": "medium"
        }, 
      "geometry": 
        { 
            "type": "Point",
            "coordinates": [187.0, -1.5] 
        }
    },
    {
      "type": "Feature",
      "properties": 
        { 
            "marker-symbol": "-number", 
            "marker-color": "46ea5f", 
            "marker-size": "medium"
        }, 
      "geometry": 
        { 
            "type": "Point",
            "coordinates": [-187.0, -1.5] 
        }
    },

      {
        "type": "Feature",
        "geometry": { "type": "MultiLineString",
                       "coordinates": [
                           [ [175.0, 1.5], [185.0, 1.5] ],

                           [ [175.0, 0.0], [179.99, 0.0] ],
                           [ [-179.99, 0.0], [-175.0, 0.0] ],

                           [ [-185.0, -1.5], [-175.0, -1.5] ],
                       ]
        },
        "properties": {
          "title": "test lines",
          "prop0": "value0",
          "prop1": 0.0,
          "stroke": "#ff0000"
        },
      },
      {
        "type": "Feature",
        "geometry": { "type": "MultiLineString",
                       "coordinates": [
                            [ [175.0, -2.0], [179.99, -2.0] ],
                           [ [180.01, -2.0], [185.0, -2.0] ],

                            [ [185.0, -2.5], [180.01, -2.5] ],
                            [ [179.99, -2.5], [175.0, -2.5] ]
                       ]
        },
        "properties": {
          "title": "break continuous values",
          "prop0": "value0",
          "prop1": 0.0,
          "stroke": "#0000ff"
        },
      },

  ],
}
</mapframe>
`

Markup also available at https://en.wikipedia.org/wiki/User:Glrx/sandbox#Isolated_test

What happens?:
Markers 1 and 2 display. Markers 3 and 4 do not.
Line red 1 displays left half.
Line red 2 displays entirely.
Line red 3 displays right half
Line blue 4 displays left half.
Line blue 5 displays left half.

Click on the map to bring it up in new window.
Markers 1 and 3 show. Markers 2 and 4 do not.
Line red 1 displays entirely.
Line red 2 displays left half.
Line red 3 disappears.
Line blue 4 displays entirely.
Line blue 5 displays entirely.

(Missing pieces can be found by zooming out.)

Different but similar results if longitude attribute is changed from 179 to -179.

What should have happened instead?:
First, the mapframe display and the display when clicked should be consistent; they are not.

Second, Line red 2 follows the GeoJSON spec, so it should display correctly. Also, Markers 1 and 2 should display correctly because they are within a reasonable domain.

When the clicked display is zoomed out to display more than one circumference, it should duplicate the symbols.

Software version (skip for WMF-hosted wikis like Wikipedia):

Other information (browser name/version, screenshots, etc.):