[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) + "° " +
> (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