[ncl-talk] Problem with plotting station data in DMS-coordinates
MeteoBB
info at meteo-bb.de
Sun Feb 3 16:27:22 MST 2019
Hi Dennis,
thx. Seems to be work fine except for cases where the lat or lon is in
western or southern hemisphere.
I added some code for this and so this is my final function for
conversion of DMS to DD:
(if this is incorrect, please tell me)
;========================================================================
function dms2dd(dms:string)
;========================================================================
local dms_str, degrees, MINUTES, minutes, dd, cminutes
begin
dms_str = str_strip(dms)
degrees = totype(str_get_field(dms_str, 1, "."), "float")
cminutes = tochar(str_get_field(dms_str, 2,"."))
minutes = totype(tostring(cminutes(0:1)), "float") ; 2 places only!
if (any(minutes.ge.60)) then
print("dms2dd: illegal minutes value >= 60")
exit
end if
dd = abs(degrees) + (abs(minutes)/60.0)
if (any(tofloat(degrees).le.0.0)) then ; degrees in western or
southern hemisphere
dd = dd*(-1.0)
end if
return(dd)
end
;========================================================================
Am 24.01.2019 um 21:12 schrieb Dennis Shea:
>
> Well, of course, NCL [other languages also] would treat the following
> as 'real' numbers
> ===
>
> undef ("dm_to_deg")
> function dm_to_deg(DM:numeric)
> ; DM: latitude or longitude: structure: mantissa.characteristic
> ; Example: 54.41: degrees.minute: mantissa=51, characteristic=41
> local delim, dm_str, mantissa, CHARACTERISTIC, characteristic, deg
>
> begin
> delim = "."
> dm_str = tostring(DM)
> mantissa = totype(str_get_field(dm_str, 1, delim), typeof(DM))
> CHARACTERISTIC = tochar(str_get_field(dm_str, 2, delim))
> characteristic = totype(tostring(CHARACTERISTIC(0:1)),typeof(DM))
> ; 2 places
> if (any(characteristic.ge.60)) then
> print("dm_to_deg: illegal characteristic value >= 60")
> exit
> end if
> deg = mantissa + (characteristic/60.0)
> deg at long_name = "degree coordinates"
> deg at NCL_tag = "dm_to_deg"
> deg at info = "global locations in degrees: derived from dm"
> return(deg)
> end
> ;========================================================================
> ; MAIN: dms ==> degrees_minute_second
> ;========================================================================
>
> lat_dm = 54.41 ; not 'real' number, rather (54° 41')
> lat_deg = dm_to_deg(lat_dm)
> print(lat_deg)
> print("")
> print("===============")
> print("")
> lon_dm = 13.26 ; not 'real' number, rather (13°
> 26')
> lon_deg = dm_to_deg(lon_dm)
>
>
> On Thu, Jan 24, 2019 at 9:54 AM MeteoBB <info at meteo-bb.de
> <mailto:info at meteo-bb.de>> wrote:
>
> Hello,
>
> i have station data with lat/lon-coordinates in DMS (degree,
> minutes).
> I suppose NCL/NCAR always want's decimal coordinates as input?
> That's why my plotted data points appears at a wrong position.
>
> Example (this is my data looks like):
> lat = 54.41 (54° 41')
> lon = 13.26 (13° 26')
>
> I think I have to transform the coordinates from DMS to decimal,
> to have:
> lat = 54.68
> lon = 13.43
>
> Then the location will be placed correctly on map.
>
> My question:
> Just wondering - is there really no built-in procedure/function
> for the conversion from DMS to decimal coordinates? I found
> nothing about these stuff in the mailing lists or on the web.
> Furthermore, I am irritated that the tick labels are DMS in my
> example program (see at the end), but he expects decimal coordinates.
> If there is no built-in function, has anyone a funtion to convert
> DMS to decimal or a workaround?
>
> Thanks a lot.
>
> Regards,
> Robert
>
>
> begin
>
> wks = gsn_open_wks ("png","test")
> res = True
> res at gsnMaximize = True
> res at gsnFrame = False
> res at mpGridAndLimbOn = True
> res at pmTickMarkDisplayMode = "Always"
> res at mpMinLatF = 54
> res at mpMaxLatF = 55
> res at mpMinLonF = 13
> res at mpMaxLonF = 14
>
> res at mpGridSpacingF = 0.25
> res at mpGridLineThicknessF = 2.0
> res at mpGridLineColor = "Gray30"
> res at mpOutlineBoundarySets = "AllBoundaries"
> res at mpDataBaseVersion = "MediumRes"
> res at mpDataSetName = "Earth..4"
> res at mpGridAndLimbOn = True
>
> mkres = True
> mkres at gsMarkerIndex = 16 ; Filled circle
> mkres at gsMarkerSizeF = 0.008
>
> plot = gsn_csm_map(wks,res)
> gsn_polymarker(wks,plot,13.26,54.41,mkres)
> frame(wks)
>
> end
>
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu>
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190204/ca97a4e9/attachment.html>
More information about the ncl-talk
mailing list