{"id":1687,"date":"2018-12-13T11:01:52","date_gmt":"2018-12-13T10:01:52","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=1687"},"modified":"2022-07-25T08:35:46","modified_gmt":"2022-07-25T07:35:46","slug":"typescript-lat-long-to-kilometers","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/typescript-lat-long-to-kilometers\/","title":{"rendered":"Distance Lat-Long to Kilometers"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"800\" src=\"https:\/\/solidt.eu\/site\/wp-content\/uploads\/2022\/07\/afbeelding-1024x800.png\" alt=\"\" class=\"wp-image-6372\" srcset=\"https:\/\/solidt.eu\/site\/wp-content\/uploads\/2022\/07\/afbeelding-1024x800.png 1024w, https:\/\/solidt.eu\/site\/wp-content\/uploads\/2022\/07\/afbeelding-300x234.png 300w, https:\/\/solidt.eu\/site\/wp-content\/uploads\/2022\/07\/afbeelding-768x600.png 768w, https:\/\/solidt.eu\/site\/wp-content\/uploads\/2022\/07\/afbeelding.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">How to Convert Degrees Minutes Seconds to Decimal Degrees<\/h3>\n\n\n\n<p>First of all let&#8217;s take a look at the symbols:<br><strong>\u00b0<\/strong>&nbsp;: degree<br><strong>&#8216;<\/strong>&nbsp;: minute<br><strong>&#8220;<\/strong>&nbsp;: second<\/p>\n\n\n\n<p>1 minute is equal to 60 seconds.<br><em>1 degree is equal to 1 hour<\/em>, that is equal to 60 minutes or 3600 seconds.<\/p>\n\n\n\n<p>To calculate decimal degrees, we use the DMS to decimal degree formula below:<br><strong>Decimal Degrees = degrees + (minutes\/60) + (seconds\/3600)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DD = d + (min\/60) + (sec\/3600)<\/pre>\n<\/div><\/div>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"php\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">Latitude: 52.377956\nDMS Lat: 52\u00b0 22' 40.6416'' N\n\n52.0\n22\/60 ~= .3667\n40\/3600 ~= 0.01\n\nLongitude: 4.897070\nDMS Long: 4\u00b0 53' 49.4520'' E<\/pre><\/div>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"javascript\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">(()=> {\n\tconst deg2rad = degrees => degrees * (Math.PI \/ 180);\t\n\tconst rad2deg = radians => radians * (180 \/ Math.PI);\n\tconst nm2km = nm => nm * 1.852;\n\t\n\tconst distance = (a, b) => {\n\t\tif (a[0] == b[0] &amp;&amp; a[1] == b[1])\n\t\t\treturn 0;\n\t\t\n\t\tconst radlat1 = deg2rad(a[0]);\n\t\tconst radlat2 = deg2rad(b[0]);\n\t\tconst radtheta = deg2rad(a[1] - b[1]); \/\/ diff East and West\n\t\tlet dist = \n\t\t\tMath.sin(radlat1) * Math.sin(radlat2) +  \/\/ diff North - South\n\t\t\tMath.cos(radlat1) * Math.cos(radlat2) \/\/ diff North - South\n\t\t\t* Math.cos(radtheta); \/\/ diff East and West\n\t\tif (dist > 1) \/\/ overflow\n\t\t\tdist = 1;\n\n\t\treturn rad2deg(Math.acos(dist)) * 60; \/\/ NM (nautical miles)\n\t};\n\n\tconsole.log(distance([30, 30], [60, 60])); \/\/ 2165.866861755054\n\tconsole.log(nm2km(distance([30, 30], [60, 60]))); \/\/ 4011.18542797036\n})();<\/pre><\/div>\n\n\n<p>Reference:&nbsp;<a href=\"https:\/\/www.geodatasource.com\/developers\/javascript\">https:\/\/www.geodatasource.com\/developers\/javascript<\/a><\/p>\n<pre class=\"lang:js decode:true \">const deg2rad = degrees =&gt; degrees * (Math.PI \/ 180);\t\nconst rad2deg = radians =&gt; radians * (180 \/ Math.PI);\n\ninterface ICoordinate {\n    latitude: number,\n    longitude: number\n}\n\nconst distanceInKm = (a: ICoordinate, b: ICoordinate) =&gt; {\n\tif ((a.latitude == b.latitude) &amp;&amp; (a.longitude == b.longitude)) {\n\t\treturn 0;\n\t} else {\n\t\tconst radlat1 = deg2rad(a.latitude);\n\t\tconst radlat2 = deg2rad(b.latitude);\n\t\tconst radtheta = deg2rad(a.longitude - b.longitude);\n\t\tlet dist = \n            Math.sin(radlat1) * Math.sin(radlat2) + \n            Math.cos(radlat1) * Math.cos(radlat2) \n            * Math.cos(radtheta);\n\t\tif (dist &gt; 1) {\n\t\t\tdist = 1;\n\t\t}\n\t\tdist = rad2deg(Math.acos(dist));\n        dist = dist * 60 * 1.853159616;\n\t\treturn dist;\n\t}\n}<\/pre>\n\n\n<pre class=\"wp-block-code\"><code>\/\/distance the simple (but wrong) way\ndistanceSimple(a: ICoordinate, b: ICoordinate): number {\n        return Math.sqrt((a.latitude - b.latitude) * (a.latitude - b.latitude) +\n            (a.longitude - b.longitude) * (a.longitude - b.longitude));\n    }<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>    distanceInKm(a: ICoordinate, b: ICoordinate) {\n        if ((a.latitude === b.latitude) &amp;&amp; (a.longitude === b.longitude)) {\n            return 0;\n        } else {\n            const radlat1 = deg2rad(a.latitude);\n            const radlat2 = deg2rad(b.latitude);\n            const radtheta = deg2rad(a.longitude - b.longitude);\n            let dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\n            if (dist &gt; 1) {\n                dist = 1;\n            }\n            dist = rad2deg(Math.acos(dist));\n            dist = dist * 60 * 1.853159616;\n            return dist;\n        }\n    }<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/www.movable-type.co.uk\/scripts\/latlong.html\">https:\/\/www.movable-type.co.uk\/scripts\/latlong.html<\/a><\/p>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"javascript\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">const R = 6371e3; \/\/ metres\nconst \u03c61 = lat1 * Math.PI\/180; \/\/ \u03c6, \u03bb in radians\nconst \u03c62 = lat2 * Math.PI\/180;\nconst \u0394\u03c6 = (lat2-lat1) * Math.PI\/180;\nconst \u0394\u03bb = (lon2-lon1) * Math.PI\/180;\n\nconst a = Math.sin(\u0394\u03c6\/2) * Math.sin(\u0394\u03c6\/2) +\n          Math.cos(\u03c61) * Math.cos(\u03c62) *\n          Math.sin(\u0394\u03bb\/2) * Math.sin(\u0394\u03bb\/2);\nconst c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n\nconst d = R * c; \/\/ in metres<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Finding direction in degrees between two positions?<\/h3>\n\n\n\n<p>TODO!<\/p>\n\n\n\n<p><strong>Initial Bearing<\/strong><\/p>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"javascript\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">const y = Math.sin(\u03bb2-\u03bb1) * Math.cos(\u03c62); \nconst x = Math.cos(\u03c61)*Math.sin(\u03c62) - Math.sin(\u03c61)*Math.cos(\u03c62)*Math.cos(\u03bb2-\u03bb1); \nconst \u03b8 = Math.atan2(y, x); \nconst brng = (\u03b8*180\/Math.PI + 360) % 360; \/\/ in degrees<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>JavaScript:(all angles<br>in radians)<\/td><td>const y = Math.sin(\u03bb2-\u03bb1) * Math.cos(\u03c62); const x = Math.cos(\u03c61)*Math.sin(\u03c62) &#8211; Math.sin(\u03c61)*Math.cos(\u03c62)*Math.cos(\u03bb2-\u03bb1); const \u03b8 = Math.atan2(y, x); const brng = (\u03b8*180\/Math.PI + 360) % 360; \/\/ in degrees<\/td><\/tr><tr><td>Excel:(all angles<br>in radians)<\/td><td>=ATAN2(COS(lat1)*SIN(lat2)-SIN(lat1)*COS(lat2)*COS(lon2-lon1),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SIN(lon2-lon1)*COS(lat2))<br>*note that Excel reverses the arguments to ATAN2 \u2013 see notes below<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.npmjs.com\/package\/geodesy\">https:\/\/www.npmjs.com\/package\/geodesy<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><a href=\"https:\/\/developers.google.com\/public-data\/docs\/canonical\/countries_csv\">https:\/\/developers.google.com\/public-data\/docs\/canonical\/countries_csv<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.infoplease.com\/world\/geography\/major-cities-latitude-longitude-and-corresponding-time-zones\">https:\/\/www.infoplease.com\/world\/geography\/major-cities-latitude-longitude-and-corresponding-time-zones<\/a><\/p>\n\n\n\n<p>http:\/\/www.geonames.org\/<\/p>\n\n\n\n<p>http:\/\/download.geonames.org\/export\/dump\/<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to Convert Degrees Minutes Seconds to Decimal Degrees First of all let&#8217;s take a look at the symbols:\u00b0&nbsp;: degree&#8216;&nbsp;: minute&#8220;&nbsp;: second 1 minute is equal to 60 seconds.1 degree is equal to 1 hour, that is equal to 60 minutes or 3600 seconds. To calculate decimal degrees, we use the DMS to decimal degree [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,4,1],"tags":[],"class_list":["post-1687","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=1687"}],"version-history":[{"count":20,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1687\/revisions"}],"predecessor-version":[{"id":6381,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1687\/revisions\/6381"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=1687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=1687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=1687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}