Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select raster in ggplot near coastline

Tags:

r

ggmap

So I have a map that is plotting air pressure in Catalonia:

enter image description here

Here's a close up:

enter image description here

I would now like to select all observations with air pressure above 97 kPa (dark blue) and create a new data frame with them for further analysis. Here's the tricky bit, I want to select observations that meet the altitude filter AAAAND are along the Mediterranean coast. Most observations above 97 kPa are along the Mediterranean coast but there are some outliers that are inland.

In the end, I guess some sort of diagonal latitude, longitude filtering must occur but I don't know how to specify it. Is there some sort of way to lace, or draw a polygon on data and then have it select everything inside?

This is my data:

structure(list(final.Latitude = c(42.161626, 41.516819, 41.786856, 
41.748215, 42.393932, 41.767667, 41.938401, 41.494079, 41.752819, 
41.422327, 41.253914, 42.104854, 40.544337, 41.647625, 41.26267, 
40.745573, 40.881084, 41.201499, 41.494183, 40.873663, 41.211076, 
41.814818, 41.737032, 42.434746, 41.796036, 41.197585, 42.119308, 
41.665698, 41.141899, 40.883885, 40.814408, 40.710754, 41.65649, 
41.541525, 41.581905, 41.61424, 42.215454, 41.137955, 41.553355, 
42.17195, 40.909931, 42.757417, 41.89469, 41.49472, 41.447145, 
41.791172, 41.862813, 41.677615, 41.398371, 41.094337, 42.83454, 
41.331905, 41.954854, 41.560246, 41.758456, 41.516953, 41.625954, 
40.974225, 42.098215, 42.238615, 41.841862, 41.280658, 41.491805, 
41.675766, 42.416667, 41.220308, 42.043361, 41.009161, 41.136268, 
41.747716, 41.816881, 41.851497, 42.306365, 41.525909, 41.732976, 
41.187937, 41.788901, 41.862027, 41.874859, 41.074787, 41.724519, 
42.313455, 42.838364, 41.590543, 42.422663, 41.530049, 42.374163, 
41.639757, 41.914026, 41.531976, 42.282191, 41.474805, 41.760742, 
41.498525, 41.277658, 41.648019, 41.175305, 41.672663, 42.269094, 
41.561134, 41.467288, 42.403712, 41.100187, 41.82609, 41.516667, 
41.636616, 41.417024, 41.688442, 41.165596, 41.208101, 41.850617, 
41.197377, 42.367024, 42.361421, 41.594469, 42.391185, 42.578381, 
41.868737, 41.145762, 42.496539, 41.161892, 41.231334, 41.510179, 
41.634688, 41.763027, 41.929978, 40.671331, 41.713584, 41.462664, 
41.692433, 41.053748, 41.136997, 41.207852, 41.683047, 42.344326, 
41.4404, 42.411528, 41.041842, 41.984444, 42.034332, 40.655163, 
41.355913, 41.727408, 41.607816, 41.193202, 41.731762, 42.028479, 
41.102165, 41.955568, 41.360861, 41.743718, 41.580977, 41.852114, 
42.073092, 41.601927, 41.315489, 41.548474, 42.810764, 41.709801, 
42.371338, 41.47145, 42.621379, 41.826875, 41.374287, 41.616667, 
42.296039, 42.074764, 41.699929, 41.646217, 41.885617, 42.002284, 
41.726337, 41.284957, 41.47402, 40.734082, 40.716001, 41.480477, 
41.18225, 41.503525, 41.126212, 42.233618, 41.598858, 41.477979, 
41.605161, 41.039296, 42.360065, 41.759637, 41.846688, 42.109172, 
41.265454, 41.468488, 42.017482, 41.625876, 41.759101, 41.191922, 
41.699429, 41.751713, 42.22352, 41.248929, 42.271593, 41.354354, 
41.543718, 42.068952, 41.87566, 42.010081, 41.316667, 41.985403, 
42.181691, 42.065168, 41.501108, 42.218238, 41.873141, 41.946288, 
41.666667, 41.917381, 41.175447, 41.971022, 41.437188, 42.316667, 
42.042256, 41.191613, 42.057709, 41.522319, 41.42334, 41.678745, 
41.554229, 41.186914, 42.249185, 41.234832, 42.315525, 42.408303, 
41.477337, 41.413134, 41.915639, 41.188829, 41.740291, 41.309827, 
41.327836, 41.051187, 41.607475, 41.794363, 42.380192, 41.278987, 
41.717096, 41.940471, 41.422931, 41.728017, 41.002665, 41.224484, 
41.155913, 42.433333, 42.20033, 41.496859, 42.188615, 41.168999, 
41.894646, 41.138704, 42.227089, 41.466667, 41.224079, 41.54329, 
42.228907, 41.826019, 41.076036, 41.973982, 41.762849, 42.233975, 
41.744147, 42.212313, 41.383333, 41.26126, 41.45356, 41.533333, 
41.694361, 41.253569, 42.145754, 42.13269, 42.323734, 41.838472, 
41.808423, 41.237045, 41.257745, 42.035974, 41.456014, 41.99404, 
42.112564, 42.413192, 41.53343, 41.384189, 41.556626, 41.977765, 
41.750928, 41.737402, 42.184708, 41.874234, 41.116667, 41.995717, 
41.561111, 41.482015, 41.967881, 40.90787, 41.849001, 41.699143, 
41.394159, 41.701173, 42.422255, 41.125037, 41.146003, 41.673185, 
41.952427, 41.533986, 40.812492, 42.166362, 41.526426, 40.597668, 
41.322164, 42.036402, 41.880549, 42.20347, 41.379576, 41.752114, 
41.648215, 41.386759, 41.243112, 41.286117, 41.220468, 42.061813, 
41.929335, 41.247787, 42.283618, 41.957459, 42.137402, 41.316881, 
42.138901, 41.847644, 42.246931, 42.475945, 42.329978, 42.196145, 
42.217381, 42.375733, 42.254854, 41.613785, 41.348501, 41.947002, 
41.228003, 41.504069, 41.225245, 42.105996, 41.383666, 41.428805, 
41.184644, 42.393307, 42.105944, 42.369698, 42.077865, 42.330101, 
42.592736, 42.495852, 42.593676, 42.324487, 42.350054, 42.016913, 
42.173822, 42.373156, 42.198189, 42.254595, 42.372036, 42.286585, 
42.246175, 42.737724, 42.785504, 42.742824, 42.747696, 42.104657, 
42.212158, 42.21305, 42.324369, 42.36003), final.Longitude = c(1.092285, 
1.901004, 1.096829, 1.629193, 2.846645, 2.250857, 2.76217, 0.458438, 
0.659356, 0.937106, 1.093504, 3.085332, 0.48089, 0.693825, 1.170103, 
0.618666, 0.498917, 1.046086, 2.294718, 0.400167, 0.975421, 0.636328, 
0.584498, 0.627843, 0.568341, 1.11167, 2.101356, 0.555637, 1.375338, 
0.801686, 0.714752, 0.578086, 1.082864, 0.924567, 2.549358, 2.539721, 
2.641934, 0.908485, 2.401142, 3.074909, 0.260671, 0.71233, 1.045118, 
0.672773, 2.244789, 0.810942, 1.874909, 1.016459, 2.1741, 0.311004, 
0.716868, 1.922554, 3.207173, 1.016022, 0.904336, 1.433333, 1.011437, 
0.517667, 1.844004, 2.708886, 1.358886, 0.722351, 1.348755, 2.789078, 
1.883333, 1.439364, 2.910885, 0.383916, 0.989194, 2.558458, 2.305603, 
1.215786, 2.967557, 2.368952, 1.513526, 1.569665, 1.986723, 3.074338, 
0.878136, 1.052436, 2.464097, 2.36524, 0.738999, 2.581156, 2.926337, 
1.686508, 2.920236, 2.357387, 1.680977, 1.620736, 2.016739, 1.979945, 
2.161279, 0.765658, 1.968755, 0.970925, 1.324377, 1.271554, 2.848572, 
1.13935, 0.689467, 3.150642, 0.886446, 2.175124, 1.3, 1.518095, 
1.919698, 0.695244, 1.444914, 1.672893, 0.959004, 1.635581, 2.833618, 
1.870308, 2.405817, 2.999929, 1.086656, 2.111956, 0.81979, 1.272164, 
0.473006, 0.550333, 0.920149, 0.873428, 1.668666, 2.811885, 0.519665, 
1.01746, 1.024914, 2.113455, 0.438496, 0.649917, 1.247073, 2.28626, 
3.064954, 1.860957, 1.844289, 0.632897, 2.821111, 1.880192, 0.468583, 
0.664668, 2.059243, 2.289721, 0.777024, 2.503212, 3.10289, 0.752582, 
2.233086, 2.110014, 2.628836, 1.6172, 0.586083, 3.010814, 1.547502, 
1.453319, 0.824509, 0.710496, 0.902696, 1.458522, 1.532405, 1.248929, 
2.893647, 0.549688, 0.633333, 2.912027, 0.916209, 2.845646, 2.741505, 
2.232976, 2.28476, 1.825837, 0.75331, 1.93062, 0.37308, 0.530085, 
2.316382, 1.045336, 1.811358, 0.732084, 1.776623, 2.02648, 1.612224, 
0.879873, 0.596649, 3.000214, 2.01358, 1.041892, 2.208315, 1.365168, 
2.280459, 1.735019, 1.415025, 2.395075, 1.208506, 1.976123, 1.903569, 
2.860457, 1.294718, 2.231477, 1.849072, 1.894075, 1.313526, 1.17631, 
1.564897, 1.816667, 2.094575, 2.48476, 1.900428, 0.959546, 2.907316, 
0.720168, 2.556673, 2.75, 3.163098, 1.269737, 3.148144, 2.009243, 
3.116667, 2.10703, 1.255497, 1.267667, 1.750761, 1.203614, 0.855824, 
1.677122, 1.209089, 0.967787, 0.845336, 2.921769, 0.741027, 1.387723, 
1.514579, 1.185612, 0.85608, 0.638549, 0.988663, 2.094718, 0.871539, 
1.038313, 1.050881, 1.73626, 1.297127, 1.420879, 2.840791, 1.396841, 
1.70621, 0.599667, 1.310832, 1.107423, 1.133333, 2.190467, 2.157387, 
2.407067, 0.976254, 2.803533, 1.051562, 3.042647, 1.283333, 1.21775, 
2.109423, 1.73576, 1.895503, 1.139829, 2.791613, 1.323696, 2.286188, 
1.805639, 2.511456, 2.083333, 1.772075, 1.703618, 1.383333, 2.444646, 
1.550857, 2.569984, 2.978193, 3.186045, 2.285046, 2.745075, 1.807316, 
0.932084, 2.165025, 1.17831, 1.517809, 2.159886, 1.130453, 0.486334, 
1.796288, 0.567081, 2.516524, 2.292468, 1.977908, 0.900076, 2.287188, 
1.25, 2.418595, 2.008056, 2.267024, 1.241291, 0.512357, 2.228122, 
2.71888, 0.720332, 1.053843, 0.982562, 0.864294, 1.400214, 0.606714, 
3.126837, 0.514198, 0.521602, 0.894424, 1.955372, 0.446585, 0.876504, 
3.034546, 3.126409, 1.818155, 0.983416, 0.813849, 2.509957, 1.932048, 
1.249001, 1.249929, 1.533654, 3.046003, 2.255497, 1.330192, 2.981263, 
2.773767, 1.932191, 2.016775, 2.888187, 2.390149, 2.936294, 0.716667, 
2.316524, 3.056888, 2.970593, 3.068024, 2.889007, 0.964319, 0.956673, 
2.384404, 1.033249, 2.392219, 0.780085, 2.993361, 0.947085, 0.974277, 
0.589454, 0.722588, 1.469659, 1.190359, 1.646143, 1.039464, 1.261727, 
1.21003, 1.202521, 1.540233, 1.582939, 1.295875, 1.316197, 1.522829, 
1.395169, 1.608097, 1.605217, 1.424143, 1.501501, 0.720617, 0.692133, 
0.943847, 0.726361, 0.857982, 1.00119, 0.931612, 0.936593, 0.880921
), final.airpressure = c(90.3429670210118, 100.056314503294, 
97.3091644688341, 95.6535847066497, 99.3265763810809, 96.5299354845676, 
99.2908252491736, 99.9962987211271, 98.4839088116185, 95.1270315428243, 
91.7964083849734, 101.021480506879, 100.453323066872, 98.7679512938402, 
98.4130259181779, 101.215628071472, 101.154916909799, 98.1888998199279, 
100.236578057928, 97.3442020744334, 96.8780695175868, 97.2157924966616, 
97.6952727499611, 89.3510660330727, 97.4026261211394, 97.8595387529882, 
91.4445861078662, 98.1653373115852, 100.694700579387, 101.094242163897, 
101.227774675623, 101.227774675623, 97.3325214710347, 97.3675674866686, 
101.203482924827, 99.8643906852719, 99.1241567035337, 97.2274590917429, 
100.260637723706, 101.239922737453, 95.3556106036821, 87.4837596830127, 
97.5312824821367, 98.2596212844703, 101.252072257138, 98.5311924350098, 
97.4260055568285, 97.941775300055, 101.215628071472, 96.8548215707678, 
90.6144028722749, 96.5878708247223, 98.9221495412202, 96.8896955834789, 
98.1300041505036, 93.6882866645953, 97.648390271736, 101.094242163897, 
93.1166652957402, 97.2974880696958, 95.940976332665, 96.9013230445826, 
100.344892041253, 101.167056228173, 88.3170492768192, 99.1955517955091, 
100.815606749275, 97.9065226068125, 98.9696435706551, 99.2908252491736, 
91.5763611671335, 96.333215139154, 101.009358656544, 99.5532993411879, 
93.3852278362198, 100.513613145927, 94.8306977255515, 101.057854786839, 
97.4961775397119, 101.033603811924, 97.4961775397119, 90.4405901323857, 
90.8866542537754, 101.142779048056, 98.9221495412202, 97.5429869382878, 
100.032303869205, 99.0052790563431, 95.3441686169426, 97.1458223183509, 
85.7068860068727, 99.7326566531564, 92.3488424802678, 97.1225101185704, 
101.288529565072, 98.1064557754255, 100.610152546045, 94.8762273867043, 
99.7565953632834, 95.206971819536, 97.988798636897, 101.203482924827, 
96.2176846131662, 90.9412026091979, 93.1054919663179, 96.2061391837523, 
97.2507964822998, 98.7916584468953, 100.74304563755, 101.179197003352, 
95.4357429674702, 101.203482924827, 99.0052790563431, 87.5362656890491, 
99.5532993411879, 99.8284459750613, 86.5024876526411, 91.2801339042574, 
96.9943929811272, 86.751973904839, 95.5732694326337, 100.755135528406, 
97.554692799058, 98.4130259181779, 95.1384474715514, 100.092341260942, 
99.8044900228565, 98.0358445503587, 94.5012604507927, 95.4013922834961, 
97.0060330066725, 100.441269391339, 99.7326566531564, 98.3067972240066, 
100.646378721282, 98.9696435706551, 88.4230933496698, 101.009358656544, 
100.477434757695, 95.7799308085443, 99.302740863126, 95.1042037946933, 
92.2491595688505, 99.5771950003942, 97.4961775397119, 99.1955517955091, 
101.142779048056, 98.6139934081953, 95.2412524995432, 101.227774675623, 
99.0528129975234, 97.5898188107684, 97.5781087351297, 100.791413906912, 
96.8083424123042, 94.5693258589238, 98.1653373115852, 93.9021396579619, 
98.3539958134293, 93.2620406569011, 94.1164807924228, 89.3081878129729, 
99.3981172677039, 96.6110546956734, 99.4577740333045, 99.613049243971, 
92.1606428704777, 101.264223234853, 101.276375670773, 94.5126012824831, 
95.8719236916393, 98.4720914516169, 96.8199601104416, 100.646378721282, 
97.1808011101903, 100.670536751023, 100.997238260744, 98.7560998507858, 
98.2478308373571, 99.0171604026964, 99.3504176202466, 96.3100979416952, 
96.2292314281149, 97.8947745289984, 100.803509602308, 100.610152546045, 
96.0331238936967, 92.848875102663, 94.5466319440964, 98.5784987599884, 
101.082111582687, 92.5374264091341, 93.0608120542108, 95.1042037946933, 
100.068321981469, 95.9524899406276, 98.1064557754255, 99.5771950003942, 
98.5548427591196, 90.3971890662113, 98.15355817787, 99.8284459750613, 
95.7799308085443, 95.9755213018661, 92.693019947478, 98.7916584468953, 
94.6033769450608, 96.0792308579518, 94.8193187245782, 96.7502748288739, 
100.140397117231, 95.8489171908438, 97.2741394745025, 101.13064264277, 
100.549804560724, 99.8763751312065, 100.658457011412, 99.6967593586619, 
100.924546421398, 92.5596380567634, 99.8164672802803, 94.6715159035427, 
97.4610852327918, 96.7502748288739, 98.7324012307697, 98.15355817787, 
100.140397117231, 95.1498647702722, 97.2391270868996, 100.803509602308, 
91.631323470876, 94.842078092087, 94.4672461199774, 97.0060330066725, 
97.554692799058, 98.2242541872674, 90.408037379785, 101.227774675623, 
98.389409626026, 97.4143151376009, 97.5664000646158, 88.837883277904, 
98.3067972240066, 92.3820940484839, 100.224550390235, 94.6828771671133, 
97.0293172485913, 99.2312686227987, 99.2193615850005, 99.9123370990196, 
92.8823067150292, 93.2620406569011, 100.368977705507, 94.6033769450608, 
97.7539075022777, 100.140397117231, 99.8164672802803, 101.239922737453, 
94.6715159035427, 99.9483120154717, 99.0409273731154, 87.5782931823713, 
98.000557998281, 101.300684917927, 100.320812156865, 94.785189913392, 
92.3488424802678, 98.0123187708731, 97.2507964822998, 99.8524076773845, 
100.791413906912, 98.3776036052463, 93.4524894115233, 98.8272298464039, 
100.104353062587, 95.4701060199168, 100.284703164497, 100.74304563755, 
93.5759281491901, 100.405117042172, 101.203482924827, 100.924546421398, 
91.1597236157778, 95.5503346002599, 93.5646997115319, 92.9826737947488, 
93.2508498834821, 99.9003483379078, 98.4130259181779, 99.4935852775937, 
91.8735497628596, 97.1108561166103, 94.8306977255515, 94.6033769450608, 
94.0261723258617, 100.501552236019, 91.2910881775692, 98.0123187708731, 
99.6847964653268, 96.7270575491, 101.167056228173, 94.3313111822093, 
100.912436202455, 95.6995094483651, 97.8712826022554, 89.0620370589062, 
96.936213800838, 101.142779048056, 98.7560998507858, 100.791413906912, 
99.8883610153609, 101.179197003352, 95.7914250898844, 97.2507964822998, 
99.7206894524044, 93.7220205195241, 100.960885798805, 100.730957197395, 
88.5505143251773, 94.0036087522406, 98.5075477862968, 98.6613394871811, 
99.1955517955091, 99.3861902092696, 98.7442498298192, 100.730957197395, 
101.045728571852, 95.6076820035206, 98.2832064236821, 101.094242163897, 
100.128380990558, 92.5263225842078, 101.106374200865, 99.8763751312065, 
91.8184421669338, 100.670536751023, 90.0723442570617, 89.1475776674053, 
101.264223234853, 100.779319662913, 99.2908252491736, 100.140397117231, 
97.8595387529882, 91.0285480828219, 94.7624441974078, 96.9711171200268, 
101.203482924827, 97.4260055568285, 100.332851376663, 93.5534726212054, 
95.6650638255479, 100.912436202455, 91.631323470876, 87.211235711269, 
85.7377460403079, 91.6753170637597, 94.3879269519511, 87.6098270436714, 
91.9286904332642, 90.9739473358343, 92.4042684118727, 90.408037379785, 
96.3100979416952, 86.3780137131668, 88.9659019811689, 94.2634170829669, 
87.6729288330611, 91.3787697026177, 93.1390159773857, 89.9859162986326, 
91.4775120851854, 90.690550948402, 86.9395606892669, 87.1589246647255, 
95.0585647311234, 95.3441686169426, 94.5920252209444, 92.8377339061359, 
89.8456477071546)), .Names = c("final.Latitude", "final.Longitude", 
"final.airpressure"), row.names = c(NA, -379L), class = "data.frame")

This is the code to plot based on this post: Plotting contours on an irregular grid

library(akima)
library(ggplot2)
library(reshape2)

x <- newfinal$final.Longitude
y <- newfinal$final.Latitude
z <- newfinal$final.airpressure

require(akima)

fld <- interp(x,y,z)

df <- melt(fld$z, na.rm = TRUE)
names(df) <- c("x", "y", "Rain")
df$Lon <- fld$x[df$x]
df$Lat <- fld$y[df$y]


ggplot(data = df, aes(x = Lon, y = Lat, z = Rain)) +
  geom_tile(aes(fill = Rain)) +
  stat_contour() +
  ggtitle("Air pressure Catalonia") +
  xlab("Longitude") +
  ylab("Latitude") +
  scale_fill_continuous(name = "kPa",
                        low = "white", high = "blue") +
  theme(plot.title = element_text(size = 20,),
        legend.title = element_text(size = 10),
        axis.text = element_text(size = 10),
        axis.title.x = element_text(size = 10, vjust = -0.5),
        axis.title.y = element_text(size = 10, vjust = 0.2),
        legend.text = element_text(size = 10))
like image 530
delcast Avatar asked Mar 09 '18 12:03

delcast


1 Answers

Overview

Using the shape file for the western part of the Mediterranean Sea, I calculated the coordinates for the boundaries of the Balearic (Iberian Sea) and Western Basin portions. Then, I calculated the distance - in kilometers - of each 379 coordinate pairs in df to each coordinate pair for the boundaries of Balearic and Western Basin portions.

After filtering distance to only include the minimum distance values, I identified which points in df contained a distance that was less than or equal to 20 kilometers (based on the distance from Traiguera to Vinaròs).

Finally, df2 was created by returning the rows where final.airpressure was greater than 97 and whose coordinate pair was less than or equal to 20 kilometers from the Mediterranean Sea.

Reproducible Example

Note: df is not written down below to reduce the lines of code. To create df, simply copy and paste the dput() and store it.

Additionally, the shape file for the western part of the Mediterranean Sea needed to be downloaded in in my browser and unzipped inside my working directory prior to importing into r.

SS of Western Basin Download with Instructions

After reading Plotting contours on an irregular grid, I use the data from df2 to reproduce that plot using base R. The GeoJSON file of the administrative boundaries of the counties of Catalonia was taken from their open data portal.

# load necessary packages
library( akima )
library( sf )
library( leaflet )
library( geosphere )

# create sf data frame
# of Catalonia
catalonia.polygon <-
read_sf( dsn = "https://analisi.transparenciacatalunya.cat/api/geospatial/txvb-mhz6?method=export&format=GeoJSON" 
         , layer = "OGRGeoJSON"
         , stringsAsFactors = FALSE )

# dissolve into one polygon
catalonia.polygon <-
  st_union( x = catalonia.polygon )

# create sf data frame
# of the western basin
western.basin <-
  read_sf( dsn = getwd()
           , layer = "iho"
           , stringsAsFactors = FALSE )

# view first version of the map
my.map <-
  leaflet() %>%
  setView( lng = 1.514619
           , lat = 41.875227
           , zoom = 8 ) %>%
  addTiles() %>%
  addPolygons( data = catalonia.polygon
               , fill = "#D24618"
               , color = "#D24618" ) %>%
  addCircleMarkers( data = df
                    , lng = ~final.Longitude
                    , lat = ~final.Latitude
                    , fillColor = "#10539A"
                    , fillOpacity = 0.75
                    , stroke = FALSE
                    , radius = 10
                    , group = "No Filter" ) %>%
  addPolygons( data = western.basin
               , label = ~name )

# display map
my.map

SS of Map without Filtering

# get the boundaries of each
# polygon within the western basin
list.of.polygon.boundaries <- 
  sapply( 
    X = methods::as( object = western.basin, Class = "Spatial" )@polygons
    , FUN = function( i )
      sp::coordinates( obj = i@Polygons[[1]] )
  )

# label each set of boundaries
names( list.of.polygon.boundaries ) <- western.basin$name

# from Google maps
# it looks like we only care about the
# the Balearic and Western Basin parts of the sea
# since they are nearest Catalonia
list.of.polygon.boundaries <-
  list.of.polygon.boundaries[ c("Balearic (Iberian Sea)", "Mediterranean Sea - Western Basin" ) ]

# calculate each points distance (in kilometers)
# from each boundary point within
# each polygon in list.of.polygon.boundaries
# ~1 minute to complete
distance <-
  apply(
    X = df[ c("final.Longitude", "final.Latitude") ]
    , MARGIN = 1
    , FUN = function( i )
      lapply(
        X = list.of.polygon.boundaries
        , FUN = function( j )
          distGeo(
            p1 = i
            , p2 = j
          ) / 1000 # to transform results into kilometers
      )
  )

# find the minimum distance value
# for each list in distance
distance.min <-
  lapply(
    X = distance
    , FUN = function( i )
      lapply(
        X = i
        , FUN = function( j )
          min( j )
      )
  )

# set the maximum distance
# allowed between a point in df
# and the sea to 20 kilometers
max.km <- 20

# identify which points in df
# are less than or equal to max.km
less.than.or.equal.to.max.km <-
  sapply(
    X = distance.min
    , FUN = function( i )
      sapply(
        X = i
        , FUN = function( j )
          j <= max.km
      )
  )

# convert matrix results into
# vector of TRUE/FALSE indices
less.than.or.equal.to.max.km <-
  apply(
    X = less.than.or.equal.to.max.km
    , MARGIN = 2
    , FUN = any
  )

# create subset from df
# where the air pressure is greater than 97 kpa
# AND the coordinate pairs are located
# along the Mediterranean coast
df2 <-
    df[ which( df$final.airpressure > 97 &
             less.than.or.equal.to.max.km ), ]

# View our results
my.map %>%
  hideGroup( group = "No Filter" ) %>%
  addCircleMarkers( data = df2
                    , lng = ~final.Longitude
                    , lat = ~final.Latitude
                    , fillColor = "#10539A"
                    , fillOpacity = 0.75
                    , stroke = FALSE
                    , radius = 10
                    , group = "Filter" )

SS of Filtered Map

Plot Contours on Irregular Grid

# plot intended results
bivariate.interpolation <-
  akima::interp(
    x = df2$final.Longitude
    , y = df2$final.Latitude
    , z = df2$final.airpressure
    )
# using base R
filled.contour(
  x = bivariate.interpolation$x
  , y = bivariate.interpolation$y
  , z = bivariate.interpolation$z
  , color.palette = colorRampPalette( c("white", "blue" ) )
  , xlab = "Longitude"
  , ylab = "Latitude"
  , main = "Catalonia Air Pressure"
  , key.title = title(
    main = "Air Pressure (kPa)"
    , cex.main = 0.5 )
)

# end of script #

SS of Plotting Contour

Final Data from df2

structure(list(final.Latitude = c(42.104854, 40.544337, 41.26267, 
40.745573, 40.881084, 41.201499, 41.494183, 40.873663, 41.197585, 
41.141899, 40.883885, 40.814408, 40.710754, 41.581905, 41.61424, 
41.137955, 41.553355, 42.17195, 41.447145, 41.398371, 41.954854, 
40.974225, 41.675766, 41.220308, 41.009161, 41.136268, 41.747716, 
42.306365, 41.525909, 41.187937, 41.862027, 41.074787, 41.724519, 
41.590543, 42.422663, 42.374163, 41.639757, 41.277658, 41.175305, 
42.403712, 41.417024, 41.165596, 41.208101, 41.197377, 41.594469, 
42.391185, 40.671331, 41.053748, 41.207852, 42.344326, 41.041842, 
40.655163, 41.607816, 41.731762, 42.028479, 41.102165, 41.360861, 
41.743718, 42.073092, 41.826875, 42.296039, 41.699929, 41.646217, 
40.734082, 40.716001, 41.480477, 41.18225, 41.039296, 42.360065, 
41.265454, 41.468488, 41.191922, 41.248929, 41.354354, 41.316667, 
42.218238, 41.666667, 41.917381, 41.175447, 41.971022, 41.437188, 
42.316667, 41.191613, 41.186914, 42.315525, 41.188829, 41.327836, 
41.051187, 41.278987, 41.002665, 41.224484, 41.155913, 41.496859, 
41.168999, 41.138704, 42.227089, 41.224079, 41.54329, 41.076036, 
41.383333, 41.26126, 41.694361, 41.253569, 42.13269, 42.323734, 
41.808423, 41.237045, 41.384189, 41.116667, 41.482015, 40.90787, 
41.699143, 41.146003, 41.952427, 40.812492, 40.597668, 42.036402, 
41.880549, 41.648215, 41.386759, 41.243112, 41.286117, 41.220468, 
42.061813, 41.247787, 42.283618, 41.316881, 42.138901, 42.246931, 
42.196145, 42.217381, 42.375733, 42.254854, 41.504069, 42.105996
), final.Longitude = c(3.085332, 0.48089, 1.170103, 0.618666, 
0.498917, 1.046086, 2.294718, 0.400167, 1.11167, 1.375338, 0.801686, 
0.714752, 0.578086, 2.549358, 2.539721, 0.908485, 2.401142, 3.074909, 
2.244789, 2.1741, 3.207173, 0.517667, 2.789078, 1.439364, 0.383916, 
0.989194, 2.558458, 2.967557, 2.368952, 1.569665, 3.074338, 1.052436, 
2.464097, 2.581156, 2.926337, 2.920236, 2.357387, 1.968755, 1.324377, 
3.150642, 1.919698, 1.444914, 1.672893, 1.635581, 2.405817, 2.999929, 
0.519665, 0.438496, 1.247073, 3.064954, 0.632897, 0.468583, 2.289721, 
2.503212, 3.10289, 0.752582, 2.110014, 2.628836, 3.010814, 2.893647, 
2.912027, 2.845646, 2.741505, 0.37308, 0.530085, 2.316382, 1.045336, 
0.596649, 3.000214, 1.365168, 2.280459, 1.208506, 1.294718, 1.849072, 
1.816667, 2.907316, 2.75, 3.163098, 1.269737, 3.148144, 2.009243, 
3.116667, 1.255497, 1.209089, 2.921769, 0.85608, 2.094718, 0.871539, 
1.297127, 0.599667, 1.310832, 1.107423, 2.157387, 0.976254, 1.051562, 
3.042647, 1.21775, 2.109423, 1.139829, 2.083333, 1.772075, 2.444646, 
1.550857, 2.978193, 3.186045, 2.745075, 1.807316, 1.796288, 1.25, 
2.267024, 0.512357, 2.71888, 1.400214, 3.126837, 0.521602, 0.446585, 
3.034546, 3.126409, 2.509957, 1.932048, 1.249001, 1.249929, 1.533654, 
3.046003, 1.330192, 2.981263, 2.016775, 2.888187, 2.936294, 3.056888, 
2.970593, 3.068024, 2.889007, 2.392219, 2.993361), final.airpressure = c(101.021480506879, 
100.453323066872, 98.4130259181779, 101.215628071472, 101.154916909799, 
98.1888998199279, 100.236578057928, 97.3442020744334, 97.8595387529882, 
100.694700579387, 101.094242163897, 101.227774675623, 101.227774675623, 
101.203482924827, 99.8643906852719, 97.2274590917429, 100.260637723706, 
101.239922737453, 101.252072257138, 101.215628071472, 98.9221495412202, 
101.094242163897, 101.167056228173, 99.1955517955091, 97.9065226068125, 
98.9696435706551, 99.2908252491736, 101.009358656544, 99.5532993411879, 
100.513613145927, 101.057854786839, 101.033603811924, 97.4961775397119, 
101.142779048056, 98.9221495412202, 100.032303869205, 99.0052790563431, 
101.288529565072, 100.610152546045, 101.203482924827, 97.2507964822998, 
100.74304563755, 101.179197003352, 101.203482924827, 99.5532993411879, 
99.8284459750613, 99.8044900228565, 97.0060330066725, 99.7326566531564, 
100.646378721282, 101.009358656544, 99.302740863126, 99.5771950003942, 
99.1955517955091, 101.142779048056, 98.6139934081953, 101.227774675623, 
99.0528129975234, 100.791413906912, 99.3981172677039, 99.613049243971, 
101.264223234853, 101.276375670773, 97.1808011101903, 100.670536751023, 
100.997238260744, 98.7560998507858, 100.803509602308, 100.610152546045, 
98.5784987599884, 101.082111582687, 100.068321981469, 98.5548427591196, 
98.15355817787, 98.7916584468953, 100.140397117231, 101.13064264277, 
100.549804560724, 99.8763751312065, 100.658457011412, 99.6967593586619, 
100.924546421398, 99.8164672802803, 100.140397117231, 100.803509602308, 
97.554692799058, 101.227774675623, 98.389409626026, 98.3067972240066, 
99.2312686227987, 99.2193615850005, 99.9123370990196, 100.368977705507, 
97.7539075022777, 99.8164672802803, 101.239922737453, 99.9483120154717, 
99.0409273731154, 101.300684917927, 99.8524076773845, 100.791413906912, 
98.8272298464039, 100.104353062587, 100.284703164497, 100.74304563755, 
100.405117042172, 101.203482924827, 98.4130259181779, 100.501552236019, 
99.6847964653268, 101.167056228173, 100.912436202455, 101.142779048056, 
100.791413906912, 101.179197003352, 99.7206894524044, 100.960885798805, 
100.730957197395, 98.6613394871811, 99.1955517955091, 99.3861902092696, 
98.7442498298192, 100.730957197395, 101.045728571852, 98.2832064236821, 
101.094242163897, 101.106374200865, 99.8763751312065, 100.670536751023, 
101.264223234853, 100.779319662913, 99.2908252491736, 100.140397117231, 
101.203482924827, 100.332851376663)), .Names = c("final.Latitude", 
"final.Longitude", "final.airpressure"), row.names = c(12L, 13L, 
15L, 16L, 17L, 18L, 19L, 20L, 26L, 29L, 30L, 31L, 32L, 35L, 36L, 
38L, 39L, 40L, 45L, 49L, 53L, 58L, 64L, 66L, 68L, 69L, 70L, 73L, 
74L, 76L, 78L, 80L, 81L, 84L, 85L, 87L, 88L, 95L, 97L, 102L, 
107L, 109L, 110L, 112L, 115L, 116L, 127L, 131L, 133L, 135L, 138L, 
141L, 144L, 146L, 147L, 148L, 150L, 151L, 154L, 163L, 166L, 168L, 
169L, 175L, 176L, 177L, 178L, 185L, 186L, 190L, 191L, 195L, 199L, 
201L, 206L, 211L, 214L, 215L, 216L, 217L, 218L, 219L, 221L, 227L, 
230L, 235L, 238L, 239L, 243L, 248L, 249L, 250L, 253L, 255L, 257L, 
258L, 260L, 261L, 264L, 270L, 271L, 274L, 275L, 277L, 278L, 280L, 
281L, 289L, 296L, 299L, 301L, 303L, 308L, 310L, 312L, 315L, 317L, 
318L, 322L, 323L, 324L, 325L, 326L, 327L, 329L, 330L, 333L, 334L, 
336L, 339L, 340L, 341L, 342L, 347L, 349L), class = "data.frame")

Session Info

R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.2

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets 
[6] methods   base     

other attached packages:
[1] geosphere_1.5-7    leaflet_1.1.0.9000
[3] sf_0.6-0           akima_0.6-2       

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.15    magrittr_1.5    units_0.5-1    
 [4] xtable_1.8-2    lattice_0.20-35 R6_2.2.2       
 [7] rlang_0.2.0     udunits2_0.13   tools_3.4.3    
[10] grid_3.4.3      e1071_1.6-8     DBI_0.8        
[13] htmltools_0.3.6 crosstalk_1.0.0 class_7.3-14   
[16] yaml_2.1.17     digest_0.6.15   shiny_1.0.5    
[19] htmlwidgets_1.0 mime_0.5        sp_1.2-7       
[22] compiler_3.4.3  pillar_1.2.1    classInt_0.1-24
[25] httpuv_1.3.6.2 
like image 190
Cristian E. Nuno Avatar answered Oct 22 '22 09:10

Cristian E. Nuno