[OpenLayers-Dev] formatting in sexagesimal (dms) format

Ivan Grcic ivan.grcic at geofoto.hr
Wed Feb 11 07:19:37 EST 2009


Merci Didier,

i knew that wih my simple deg2DMS function ill have some problems with
rounding, but I think in yours everything is included :)

Tnx again,

best regards

On Wed, Feb 11, 2009 at 1:23 PM, Richard didier <didier.richard at ign.fr> wrote:
> Le Mercredi 11 Février 2009 12:51, Christopher Schmidt a écrit :
>> On Wed, Feb 11, 2009 at 12:48:43PM +0100, Ivan Grcic wrote:
>> > Hi,
>> >
>> > i needed to show my mouse coordinates in sexagesimal format ( DMS ),
>> > but couldnt find any method that would format it like that, nor in
>> > mosuePosition control nor in OpenLayers.Number.format function. So i
>> > ended writing my custom control...
>> >
>> > Is this functionality implemented somewhere in OL 2.7 (or in trunk)?
>>
>> Nope.
>>
>> > it seems they have all these methods there, can we maybe make use of
>> > it (if its not allready somewhere in OL2.7)
>>
>> IGN's code is not open source, and they are not in a position to offer
>> patches to the project.
>>
> Hi all,
>
> @Christ, you should have hit that before (since the API's openning on april,
> 28th 2008) :
> https://api.ign.fr/geoportail/doc/webmaster/license.html
>
> The full source is downloable there :
> https://api.ign.fr/geoportail/doc/developpeur/download.html
>
> And you are right we have not yet been in a position to offer patches cause we
> have still problems in signing the CCLA. We are talking with the french local
> chapter of OSGeo for resolving this issue cause with need to localize CLA
> (even if we can sign it in english, it is not a legal document if we have not
> the localized (french in our case) counterpart).
>
> @Ivan, we have developped for the next API's release two methods :
> Geoportal.Util.dmsToDeg(<String>) and
> Geoportal.UtildegToDMS(<Number>,Array(<String>))
>
> for converting forth and back to DMS.
>
> Here is an extract of Geoportal.Util (See license too) :
>
> /*
>  * Copyright 2008 Institut Geographique National France, released under the
>  * BSD license.
>  */
> /**
>  * Header: Geoportal Utilities
>  * Geoportal functions for handling Geoportal theme, degrees convertions and
>  * cookies.
>  */
> /**
>  * Namespace: Geoportal.Util
>  * Convenience methods for the Geoportal API.
>  */
> Geoportal.Util = {
>
>    /**
>     * APIFunction: dmsToDeg
>     * Convert a string representation of a sexagecimal degree into a numeric
>     * representation of decimal degree.
>     *
>     * Parameters:
>     * dms - {String} a sexagecimal value. The supported syntax is :
>     *
>     * (start code)
>     *
> \s?-?(\d{1,3})[.,°d]?\s?(\d{0,2})[']?\s?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?
>     *      |
>     *
> \s?(\d{1,3})[.,°d]?\s?(\d{0,2})[']?\s?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?\s?([NSEW])?
>     * (end)
>     *
>     * Returns:
>     * {Number} the decimal value or Number.NaN if error occurs.
>     */
>    dmsToDeg: function(dms) {
>        if (!dms) {
>            return Number.NaN;
>        }
>        var neg= dms.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0;
>        dms= dms.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
>        dms= dms.replace(/\s/g,'');
>        var parts=
> dms.match(/(\d{1,3})[.,°d]?(\d{0,2})[']?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?/);
>        if (parts==null) {
>            return Number.NaN;
>        }
>        // parts:
>        // 0 : degree
>        // 1 : degree
>        // 2 : minutes
>        // 3 : secondes
>        // 4 : fractions of seconde
>        var d= (parts[1]?         parts[1]  : '0.0')*1.0;
>        var m= (parts[2]?         parts[2]  : '0.0')*1.0;
>        var s= (parts[3]?         parts[3]  : '0.0')*1.0;
>        var r= (parts[4]? ('0.' + parts[4]) : '0.0')*1.0;
>        var dec= (d + (m/60.0) + (s/3600.0) + (r/3600.0))*neg;
>        return dec;
>    },
>
>    /**
>     * APIMethod: degToDMS
>     * Convert decimal degrees number into sexagecimal degrees string.
>     *
>     * Parameters:
>     * dec - {Number} decimal degrees
>     * locals - {Array} the axis direction (N, S) or (E, W).
>     *      If undefined, null or empty, the leading minus will prefix the
>     *      decimal degrees string.
>     *
>     * Returns:
>     * {String} the sexagecimal value whose syntax conforms with
>     *      <Geoportal.Util.dmsToDeg>() function.
>     */
>    degToDMS: function(dec, locals) {
>        var positive_degrees= Math.abs(dec);
>        var degrees= Math.round(positive_degrees + 0.5) - 1;
>        var decimal_part= 60*(positive_degrees - degrees);
>        var minutes= Math.round(decimal_part + 0.5) - 1;
>        decimal_part= 60*(decimal_part - minutes);
>        var seconds= Math.round(decimal_part + 0.5) - 1;
>        var remains= 10 * (decimal_part - seconds);
>        remains= remains.toFixed(this.numDigits);
>        if (remains>=10) {
>            seconds= seconds+1;
>            remains= 0;
>        }
>        if (seconds==60) {
>            minutes= minutes+1;
>            seconds= 0;
>        }
>        if (minutes==60) {
>            degrees= degrees+1;
>            minutes= 0;
>        }
>        var sig= '';
>        var dir= '';
>        if (locals && (locals instanceof Array) && locals.length==2) {
>            dir= ' ' + (dec > 0 ? locals[0] : locals[1]);
>        } else {
>            sig= (dec >= 0 ? '' : '-');
>        }
>
>        var s= sig +
>               (degrees < 10 ? "0" + degrees : degrees) + "&deg; " +
>               (minutes < 10 ? "0" + minutes : minutes) + "' " +
>               (seconds < 10 ? "0" + seconds : seconds) + "." +
>               remains + "\"" +
>               dir;
>        return s;
>    }
> };
>
>
> Regards,
>
> didier
>> Regards,
>
> --
> Didier RICHARD, chef du pôle technique Géoportail pour l'IGN
> Institut Geographique National           tel: +33/0 1.43.98.83.23
> 2/4 Avenue Pasteur                       fax: +33/0 1.43.98.80.88
> F-94165 St-Mande Cedex                e-mail: Didier.Richard at ign.fr
>
>



-- 
Ivan Grcic



More information about the Dev mailing list