Looks like we are using 90dpi actually. The key code is here:

https://github.com/openstreetmap/chef/blob/master/cookbooks/tile/templates/default/export.erb#L121

We project the bounding box from EPSG:4326 lat/lon to spherical mercator which gives us coordinates on a projected sheet measuring roughly 40075016m on each edge (2 x PI x assumed earth radius).

We then divide by the scale factor and then convert metres to pixels by dividing by 0.00028 which comes from:

  1 / 39.701 / 90

Where we divide by 39.701 to convert from metres to inches and then by a further 90 to convert to pixels at 90 dpi.

Tom

On 11/01/18 08:52, Tom Hughes wrote:
Actually isn't the real problem here just needing to know what DPI is being being assumed by mapnik when rendering?

IIRC it's 96dpi?

Tom

On 11/01/18 08:50, Tom Hughes wrote:
Please don't - it has nothing to do with the web site code.

Please go and read about projections instead.

Tom

On 11/01/18 08:21, Darafei "Komяpa" Praliaskouski wrote:
Hi,

As long as there is nobody on the list can make sense of the values for almost two weeks, I'd say it should be considered a bug and filed towards https://github.com/openstreetmap/openstreetmap-website/issues

чт, 11 янв. 2018 г. в 2:05, Bjoern Hassler <bjohas...@gmail.com <mailto:bjohas%2...@gmail.com>>:

    Dear friends,

    I was just wondering whether anybody else had any thoughts on this?
    Any tips on making sense of the mapnik_scale would be greatly
    appreciated!

    Bjoern

    On 3 January 2018 at 17:21, Bjoern Hassler <bjohas...@gmail.com
    <mailto:bjohas...@gmail.com>> wrote:

        Hi Bryan, hi Darafei,

        That's helpful, thanks. So we know that the calculation from the
        bbox is correct.

        However, I guess we don't know about how pixels translate to
        real-word dims? (Or, equicvalenly, how pixels relate to the
        lat-lon extent.)

        Thanks!
        Bjoern

        On 2 January 2018 at 14:46, Bryan Housel <br...@7thposition.com
        <mailto:br...@7thposition.com>> wrote:

            Bjoern, maybe the geo functions used in iD might be a
            helpful reference:
https://github.com/openstreetmap/iD/blob/master/modules/geo/geo.js

            The numbers I got from comparing the bbox sizes are pretty
            close to your numbers.


            bbox1 = [[24.123255,49.250507], [24.234286,49.367924]]

            dLat1 = bbox1[1][0] - bbox1[0][0]
             > 0.11103100000000055
            iD.geoLatToMeters(dLat1)
             > 12359.91438226802
            dLon1 = bbox1[1][1] - bbox1[0][1]
             > 0.11741700000000321
            iD.geoLonToMeters(dLon1, (bbox1[1][0] + bbox1[0][0])/2)
             > 11884.145336433623

            (image1 is 11.884 km x 12.359 km)


            bbox2 = [[48.632228,-101.369133], [48.691074,-101.251717]]

            dLat2 = bbox2[1][0] - bbox2[0][0]
             > 0.05884600000000262
            iD.geoLatToMeters(dLat2)
             > 6550.706755221268
            dLon2 = bbox2[1][1] - bbox2[0][1]
             > 0.11741600000000574
            iD.geoLonToMeters(dLon2, (bbox2[1][0] + bbox2[0][0])/2)
             > 8604.30156213755

            (image2 is 8.604 km x 6.550 km)


            Bryan



            On Jan 1, 2018, at 6:56 AM, Bjoern Hassler
            <bjohas...@gmail.com <mailto:bjohas...@gmail.com>> wrote:

            Hi Darafei, dear all,

            Thanks, but I still cannot get this to work.

            I've now calculated real_scale = mapnik_scale / cos(lat),
            and used the real_scale, to calculate:

            pixels * (72/2.54 pixels/cm) * real_scale = real_world_dim

            However, there's still a latitude-dependent discrepancy
            (see below). I could try to fit that to latitude, to see
            what the formula is, but I'm hoping somebody has the
            answer (or can let me know what I got wrong!)

            Happy new year!
            Bjoern

            *Example 1:*
            http://www.openstreetmap.org/#map=13/24.1788/49.3092
            bbox = [24.123255,49.250507; 24.234286,49.367924]
            bbox size in degrees (lon, lat) = 0.117416, 0.111031
            *Pixels ('Image ... at'):* 1945 x 2016;
            *mapnik_scale* 1 : 24000; *real scale *1 : 26308
            Image dim (1 : 26308, 72dpi): 686 mm x 711 mm
            Real world dim (1:1, from pixels): *18.051 km x 18.71 km*
            Real world dim (1:1, latlon): *11.911 km x 12.346 km*
            Ratio (dim pixels/ dim latlon): 1.516 ; 1.515

            *Example 2:*
            http://www.openstreetmap.org/#map=13/48.6617/-101.3104
            bbox = [48.632228,-101.369133; 48.691074,-101.251717]
            bbox size in degrees (lon, lat) = 0.117416, 0.058846
            *Pixels ('Image ... at'):* 1945 x 1476;
            *mapnik_scale* 1 : 24000; *real scale *1 : 36336
            Image dim (1 : 36336, 72dpi): 686 mm x 521 mm
            Real world dim (1:1, from pixels): *24.932 km x 18.92 km*
            Real world dim (1:1, latlon):*8.624 km x 6.543 km*
            Ratio (dim pixels/ dim latlon): 2.891 ; 2.891



            On 31 December 2017 at 18:59, Darafei "Komяpa"
            Praliaskouski <m...@komzpa.net <mailto:m...@komzpa.net>> wrote:

                Images are in Spherical Mercator EPSG:3857 projection,
                so linear scale is off by cos(lat).


                On Sun, Dec 31, 2017, 20:07 Bjoern Hassler
                <bjohas...@gmail.com <mailto:bjohas%2...@gmail.com>>
                wrote:

                    Dear friends,

                    I'm trying to make sense of the scales for map
                    images downloaded from OSM. For the download, you
                    can choose the scale, and I had assumed that I
                    could use this to convert to an actual map scale.

                    The downloaded png/jpg etc seem to be at 72dpi. I
                    had assumed I could just convert pixels at 72dpi
                    to actual dimensions (using the scale).

                    However - as far as I can tell - this doesn't
                    work. Maybe I've made a mistake somewhere, but the
                    dimensions calculated from

                      * "feature in pixels" / (72/2.54 pixels/cm) *
                        scale = "feature size" in cm
                      * lat-lon (e.g. bounding box provided)

                    Doesn't match. Moreover, the difference doesn't
                    seem to be a constant offset or ratio, but
                    possibly latitude dependent.

                    Maybe the scale offered during download is not
                    meant to be a geographic scale? Maybe I've
                    misunderstood something?
                    There are two worked examples below, that show the
                    issue.

                    Any thoughts?
                    Bjoern

                    (and a Happy New Year!!)


                    *Example 1:*

                    I had a look for long straight roads ... (Trivia:
http://www.dangerousroads.org/rankings23/3759-the-10-longest-straight-roads-in-the-world.html
                    - "Located in the heart of Saudi Arabia, the
                    Highway 10  is 120 miles (193km) stretch of
                    straightness. This asphalted road links Haradh and
                    Al Batha. It’s a straight road running right
                    through the desert for 2 h 1 min.")

                    - Open 'share',
                    - set scale to 1:50000,
                    - adjust view port so that "Image will show
                    standard layer at 932x..."
                    - Go here:
http://www.openstreetmap.org/#map=13/24.1349/49.3083

                    On the map, there's a road (East/West), with two
                    turn-off: First, a power line at the Eastern edge
                    (running North/South). In the west, there are two
                    turn-off, the second (straight one) being 11.9 km
                    from the power line (according to JOSM). In the
                    image, you've got those right at the edges. From
                    the bounding box (hidden fields), I calculate
                    11.62km. Given that the roads are just showing
                    either side of the image, that's bang on.

                    Now download PNG, which will have with 932. I am
                    assuming I have a PNG (72dpi = 28.35 dots per cm),
                    at scale 1:50,000. I calculate:

                    932 pixels / (72/2.54 pixels/cm) * 50000 = 16.4 km.

                    So there's a difference between the dimensions
                    calculated from the pixels and the distance
                    calculated from lat/lon.

                    *Full details for Example 1:*

                    Z/L/L #13/24.1727/49.3090
                    bbox = [24.119651808471247,49.249992370605476 ->
                    24.22567631717543,49.368095397949226]
                    Pixel dim: 939 x 924;
                    Natural image dim (72dpi): 331 mm x 326 mm, 1 : 50000
                    Real world dim (from pixels): 16.563 km x 16.298
                    km, 1 : 1
                    Real world dim (latlon): 11.981 km x 11.789 km, 1 : 1
                    Ratio: 1.382438861530757 ; 1.3824751887352615

                    *Example 2:*

                    Another example from the above list:

                    Z/L/L #13/48.6536/-101.3485
                    bbox = [48.615207636211146,-101.44741058349611 ->
                    48.69198023486001,-101.24965667724611]
                    Pixel dim: 1572 x 924;
                    Natural image dim (72dpi): 555 mm x 326 mm, 1 : 50000
                    Real world dim (from pixels): 27.728 km x 16.298
                    km, 1 : 1
                    Real world dim (latlon): 14.526 km x 8.537 km, 1 : 1
                    Ratio: 1.908853091009225 ; 1.909101557924329

                    The distance (along the highway) from the turnoffs
                    to Undip / Lansford airstrips is 8.1km in JOSM. So
                    the latlon calculation is correct. However, the
                    dimension calculated from the pixels isn't.
                    _______________________________________________
                    dev mailing list
                    dev@openstreetmap.org <mailto:dev@openstreetmap.org>
                    https://lists.openstreetmap.org/listinfo/dev


            _______________________________________________
            dev mailing list
            dev@openstreetmap.org <mailto:dev@openstreetmap.org>
            https://lists.openstreetmap.org/listinfo/dev





_______________________________________________
dev mailing list
dev@openstreetmap.org
https://lists.openstreetmap.org/listinfo/dev







--
Tom Hughes (t...@compton.nu)
http://compton.nu/

_______________________________________________
dev mailing list
dev@openstreetmap.org
https://lists.openstreetmap.org/listinfo/dev

Reply via email to