To receive notifications about scheduled maintenance, please subscribe to the mailing-list gitlab-operations@sympa.ethz.ch. You can subscribe to the mailing-list at https://sympa.ethz.ch

Commit 195c5044 authored by luroth's avatar luroth
Browse files

Utils added


Former-commit-id: c2255d93
parent cf22c8fa
......@@ -19,6 +19,8 @@ After these steps, one of the following methods can be used to extract phenotypi
- [Early growth trait extraction](EarlyGrowthTraitExtraction/README.md)
Additionally, usefull utils for other tasks can be found here:
- [Utils](Util/README.md)
##Deprecated content
......
import numpy as np
import pandas as pd
import geopandas as gpd
import math
from shapely.geometry import Polygon
a = 0.050 # m
b = 0.125 # m
date = '20190222'
path_base = '_TestData/canon_EOS_5D_II/20190222'
x_ = np.repeat(np.arange(start=a, stop=a*20, step=a),4)
x = np.concatenate([[0, 0], x_, [a*20, a*20]]).reshape(-1,4)
y = np.tile([-b/2, b/2, b/2, -b/2], [20, 1])
sectors = np.stack([x, y], axis=2)
coords = pd.read_csv(path_base + '/microGCP_positions.csv')
coords['plot_label_b'] = coords['Label'].str[0:11]
plot_groups = coords.groupby("plot_label_b")
for plot_label_b, plot_group in plot_groups:
x_diff = plot_group['X'].iat[1] - plot_group['X'].iat[0]
y_diff = plot_group['Y'].iat[1] - plot_group['Y'].iat[0]
# scale sectors
dist = math.sqrt(x_diff**2 + y_diff**2)
sectors_ = sectors * dist
# rotate
rot = -math.atan2(y_diff, x_diff)
rot_mat = np.array([[np.cos(rot), -np.sin(rot)], [np.sin(rot), np.cos(rot)]])
sectors_ = np.dot(sectors_.reshape(-1,2), rot_mat)
sectors_ = sectors_.reshape(20,4,2)
# move to origin
origin = (plot_group['X'].iat[0], plot_group['Y'].iat[0])
sectors_ = sectors_ + origin
polygons = []
datas = []
for i in range(sectors_.shape[0]):
sector = sectors_[i,:,:]
datas.append({'image':plot_label_b, 'plot_label':plot_label_b + "_" + str(i+1), 'type':'soil', 'azimuth_angle':0, 'zenith_angle':math.pi})
polygons.append(Polygon([(sector[0, 0], sector[0, 1]),
(sector[1, 0], sector[1, 1]),
(sector[2, 0], sector[2, 1]),
(sector[3, 0], sector[3, 1])]))
datas.append(
{'image': plot_label_b, 'plot_label': plot_label_b, 'type': 'soil', 'azimuth_angle': 0,
'zenith_angle': math.pi})
polygons.append(Polygon([(sectors_[0, 0, 0], sectors_[0, 0, 1]),
(sectors_[0, 1, 0], sectors_[0, 1, 1]),
(sectors_[19, 3, 0], sectors_[19, 2, 1]),
(sectors_[19, 3, 0], sectors_[19, 3, 1])]))
# Geopandas df to allow geojson export
gpd_coords = gpd.GeoDataFrame(
datas, geometry=polygons)
gpd_coords.to_file(path_base + '/masks/' + "_" + plot_label_b + ".geojson", driver='GeoJSON')
import matplotlib as mpl
mpl.use('Qt5Agg')
from matplotlib import pyplot as plt, gridspec
from matplotlib.path import Path as GeoPath
import cv2
import geopandas as gpd
import numpy as np
import pandas as pd
import imageio
from pathlib import Path
import matplotlib.patches as patches
input_directory = Path('_TestData/canon_EOS_5D_II/20190222')
plant_counts = pd.read_csv(input_directory / 'plant_counts.csv')
# Campaigns
number_of_campaigns = 1
campaign_paths = [input_directory]
# Grab masks of main campaign
main_campaign_list = (campaign_paths[0] / 'masks').glob("*.geojson")
# Plot is interactive
plt.interactive(True)
# List for plot elements
axs = [None for a in range(number_of_campaigns)]
# Init common variables
plant_coords = []
current_masks = []
current_images = []
current_bboxs = []
current_transform_matrixes_I2N = []
current_transform_matrixes_N2I = []
plot_label = None
def init_campaign():
global plot_label
# Reset plant coords
del plant_coords[:]
del current_masks[:]
del current_images[:]
del current_bboxs[:]
del current_transform_matrixes_I2N[:]
del current_transform_matrixes_N2I[:]
plt.clf()
# Read main campaign mask to get plot label
main_mask_path = next(main_campaign_list)
main_mask = gpd.read_file(str(main_mask_path))
plot_label = main_mask.iloc[0].at['image']
plt.title(plot_label + " (Mark: Right mouse, Delete: Middle mouse, Next image: n)")
# load coordinates file if existing
try:
plant_coords.extend(pd.read_csv(campaign_paths[0] / (plot_label + "_plant_coords.csv")).to_dict('records'))
except:
print("no coordinates file found")
for campaign_path in campaign_paths:
path = campaign_path / 'masks' / ('_' + plot_label + '.geojson')
# Mask
mask = gpd.read_file(str(path))
mask['plot_group_label'] = mask['plot_label'].str[:11]
current_masks.append(mask)
# Image
image = imageio.imread(campaign_path / 'previews' / (plot_label + '.tif'))
current_images.append(image)
# Bounding box
bbox = [
int(np.min(mask.bounds[['minx']], axis=0)),
int(np.max(mask.bounds[['maxx']], axis=0)),
int(np.min(mask.bounds[['miny']], axis=0)),
int(np.max(mask.bounds[['maxy']], axis=0))
]
current_bboxs.append(bbox)
# Transform matrixes
main_mask = mask[mask.plot_label.str.len() == 11].iloc[0]
plot_polygon = main_mask.at['geometry']
x_, y_ = plot_polygon.exterior.coords.xy
plot_edges_image_coords = np.float32(np.stack([x_, y_], axis=1))
# Get affine transform matrix to transform from image space in normed plot scape (0:1, 0:1)
plot_edges_normalized_coords = np.float32([[0, 0], [0, 1], [1, 1], [1, 0]])
M_image_to_norm = cv2.getAffineTransform(plot_edges_image_coords[0:3, :],
plot_edges_normalized_coords[0:3, :])
M_norm_to_image = cv2.getAffineTransform(plot_edges_normalized_coords[0:3, :],
plot_edges_image_coords[0:3, :])
current_transform_matrixes_I2N.append(M_image_to_norm)
current_transform_matrixes_N2I.append(M_norm_to_image)
# Draw patches
for i in range(number_of_campaigns):
axs[i] = fig.add_subplot(gs[i])
axs[i].imshow(current_images[i])
axs[i].set_xlim(current_bboxs[i][0], current_bboxs[i][1])
axs[i].set_ylim(current_bboxs[i][2], current_bboxs[i][3])
for j, mask in current_masks[i].iterrows():
path = GeoPath([a for a in mask.geometry.exterior.coords])
patch = patches.PathPatch(path, facecolor='white', edgecolor='white', fill=False, lw=1)
axs[i].add_patch(patch)
plot_data = plant_counts[plant_counts['plot_label'] == mask['plot_label']]
if len(plot_data)>0:
txt = "%.0f" % float(plant_counts[plant_counts['plot_label'] == mask['plot_label']]['value'])
axs[i].text(mask.geometry.exterior.coords[0][0] + 30, mask.geometry.exterior.coords[0][1]+15,
txt, color='white', fontsize=10,
horizontalalignment='center', verticalalignment='top')
# Drawing functions
def draw_points():
# Remove allpoints from graph
for i in range(number_of_campaigns):
del axs[i].collections[:]
fig.canvas.draw()
if len(plant_coords) > 0:
plant_coords_arr = np.array([[a['x'], a['y']] for a in plant_coords], dtype=np.float32)
for i in range(number_of_campaigns):
plant_pos = np.dot(np.c_[plant_coords_arr, np.ones(plant_coords_arr.shape[0])],
current_transform_matrixes_N2I[i].T)
axs[i].scatter('x', 'y', data=pd.DataFrame(plant_pos, columns=("x", "y")), marker='+',
color='white')
# In click: add or delete training points
def onclick(event):
# Coordinates of click
tb = plt.get_current_fig_manager().toolbar
x = event.xdata
y = event.ydata
print(x, y)
i = 0
for axis in fig.axes:
if axis == event.inaxes:
break
i+=1
i-=1
print("Fig", i)
# Transform to wold coords
# Get postion of plot edges on image
M = current_transform_matrixes_I2N[i]
print("fig", i)
clicked_pos = np.array([[x, y]])
clicked_pos_norm = np.dot(np.c_[clicked_pos, np.ones(clicked_pos.shape[0])],
M.T)
if tb.mode == '':
if event.button == 3:
plant_coords.append({'x': clicked_pos_norm[0][0], 'y': clicked_pos_norm[0][1]})
elif event.button == 2:
df_plant_coords = pd.DataFrame(plant_coords)
diff = np.power(df_plant_coords['x'] - clicked_pos_norm[0][0], 2) * 20 * 4 + np.power(df_plant_coords['y'] - clicked_pos_norm[0][1], 2)
min_id = np.argmin(diff)
print(min_id)
del plant_coords[min_id]
# Redraw graph
draw_points()
# On button pressed: load new images or train algorithm
def onkey(event):
if event.key == 'n':
pd.DataFrame(plant_coords).to_csv(campaign_paths[0] / (plot_label + "_plant_coords.csv"))
init_campaign()
draw_points()
if __name__ == "__main__":
# Generate figure
fig = plt.figure(figsize=(10, 4))
fig.tight_layout()
gs = gridspec.GridSpec(number_of_campaigns, 1)
fig.canvas.mpl_connect('button_press_event', onclick)
fig.canvas.mpl_connect('key_press_event', onkey)
init_campaign()
draw_points()
plt.pause(0)
© Lukas Roth, Group of crop science, ETH Zurich, Part of: [Phenofly UAS data processing tools](../README.md)
# Utils
Usefull scripts for various tasks
### Plant position marker for FIP images
See ```Util/FIPImageReferencing```
#### Generate image masks for FIP images
Input:
- Positions of micro GCPs im image coordinates (e.g. ```_TestData/canon_EOS_5D_II/20190222/microGCP_positions.csv```)
Process:
- Run ```Util/FIPImageReferencing/Generate_masks.py```
Output:
- Image masks (e.g. ```_TestData/canon_EOS_5D_II/20190222/masks```)
#### GUI for plant position marking
Input:
- FIP preview images (e.g. ```_TestData/canon_EOS_5D_II/20190222/previews```)
- Image masks (e.g. ```_TestData/canon_EOS_5D_II/20190222/masks```)
- Field measurement plant counts (e.g. ```_TestData/canon_EOS_5D_II/20190222/plant_counts.csv```)
Process:
- Run ```Util/FIPImageReferencing/Reference_plants_in_FIP_images.py```
Output:
- Plant position coordinates as relative plot position values (e.g. ```_TestData/canon_EOS_5D_II/20190222/FPWW0240037_plant_coords.csv```)
,Unnamed: 0,Unnamed: 0.1,x,y
0,0,0.0,0.010684984769399277,0.5753746957784189
1,1,2.0,0.017852337655730688,0.5247680755699875
2,2,3.0,0.03939404019557435,0.5348782264233131
3,3,10.0,0.16141357195226635,0.4788243897869222
4,4,11.0,0.17386979574207104,0.5616750534750379
5,5,12.0,0.18367360549730904,0.4995277447186499
6,6,13.0,0.18927813324776832,0.5519252744289327
7,7,14.0,0.21106443248903106,0.4648016196375231
8,8,15.0,0.2435469071131849,0.6715492850699913
9,9,16.0,0.2604039740424717,0.5384185414592153
10,10,17.0,0.2778277009795296,0.5045902186352079
11,11,18.0,0.29054111861878074,0.4657931129186341
12,12,19.0,0.29596756470813723,0.5029957791109076
13,13,20.0,0.3024804696710295,0.476769495468754
14,14,22.0,0.3251194906590966,0.5837344581789932
15,15,24.0,0.3888841469822939,0.5711236037436249
16,16,25.0,0.3819850775125706,0.5298877687934773
17,17,26.0,0.393178175847829,0.4781441672215818
18,18,27.0,0.4053738457705545,0.5016899755619724
19,19,28.0,0.4393717721002029,0.5946507901034135
20,20,29.0,0.4231090074266046,0.6102421366973534
21,21,30.0,0.4653246311597232,0.5257894362687665
22,22,31.0,0.4747452497553373,0.5357270020539016
23,23,32.0,0.4834718765527952,0.5295771528470379
24,24,33.0,0.4748116847355164,0.5841664069770331
25,25,34.0,0.483508784875117,0.5564879333598878
26,26,35.0,0.5390365234510961,0.4963281965906665
27,27,38.0,0.5519031509486432,0.5196845080371455
28,28,41.0,0.6088557551133444,0.6385505311025614
29,29,42.0,0.6414247489821232,0.5591776269808921
30,30,43.0,0.6236956114545054,0.4994083403886913
31,31,44.0,0.6609575396417191,0.6001015751394512
32,32,45.0,0.6885254036304047,0.6138268575028523
33,33,46.0,0.7428933231649768,0.5713684462119648
34,34,47.0,0.7038893001663868,0.5478827580105712
35,35,48.0,0.7635434141654927,0.4403660469631188
36,36,49.0,0.7704611871536622,0.5850937285753677
37,37,50.0,0.7784938221529638,0.5628564643765088
38,38,51.0,0.7905575379808447,0.5402648802833596
39,39,52.0,0.8154011064281554,0.5273155953967699
40,40,53.0,0.8235961380456727,0.6234857654544577
41,41,54.0,0.840931285009159,0.5250715693996071
42,42,55.0,0.8247183817212689,0.4619029757459217
43,43,56.0,0.8314959030846161,0.5043696914093374
44,44,57.0,0.8550695945670441,0.5453600741798788
45,45,58.0,0.8638995646670031,0.6145604104089983
46,46,59.0,0.8786285227205435,0.5755861447452837
47,47,60.0,0.8879605613425852,0.5209378372995719
48,48,61.0,0.8946347394034315,0.4880543675270026
49,49,62.0,0.9073555387071468,0.4546394179130005
50,50,63.0,0.9113718562067976,0.4435207858135719
51,51,64.0,0.9826579139838172,0.3980275021464186
52,52,65.0,0.9585271280054448,0.4102407408133635
53,53,66.0,0.9053716297539118,0.5440102030216769
54,54,67.0,0.9324467998986474,0.5903438321268162
55,55,,0.03790170517865565,0.4902816745004053
56,56,,0.06868097928747496,0.5124845220534784
57,57,,0.07123912745646166,0.54865635040189
58,58,,0.08026032923381199,0.4955720133163979
59,59,,0.10501027463980872,0.5383602184085703
60,60,,0.12167691384444955,0.5655288017432376
61,61,,0.13021466429396766,0.5326651617667082
62,62,,0.3222498194459982,0.4675470304867151
63,63,,0.33390790289429684,0.5273471971605517
64,64,,0.5033423991149224,0.5485085524245257
65,65,,0.5356549045777241,0.590799493293785
66,66,,0.5588343238130198,0.5771620219803903
67,67,,0.5659382957531379,0.6211105102593599
,Unnamed: 0,Unnamed: 0.1,x,y
0,0,0.0,0.0049458771705050975,0.4578090580405814
1,1,1.0,0.01109305324228438,0.4832625917734194
2,2,2.0,0.031381336557376294,0.5159843829801805
3,3,3.0,0.0331862357417847,0.4615614375602899
4,4,4.0,0.01566723593890207,0.44973822617091663
5,5,5.0,0.02236023718502289,0.4426719308595981
6,6,6.0,0.06738541876578674,0.4422387413861877
7,7,7.0,0.06755284242717052,0.4853752830987617
8,8,8.0,0.07613445468839153,0.4454543132238396
9,9,10.0,0.14018884557418046,0.4996460313329294
10,10,11.0,0.16100202610594105,0.4944559257814642
11,11,12.0,0.1825493834310996,0.5052746006124877
12,12,13.0,0.195305848918308,0.5020935681777203
13,13,14.0,0.17040152699125222,0.4921120071453178
14,14,15.0,0.21141927900741275,0.4980754219443284
15,15,16.0,0.2314145709150832,0.4553082651540876
16,16,17.0,0.2387998930392563,0.4534666147971152
17,17,18.0,0.30107031269830986,0.5674733460401669
18,18,19.0,0.3483625068071317,0.45852911124642404
19,19,20.0,0.3552647876299821,0.5053834930758221
20,20,21.0,0.3868411828454854,0.5029066910828348
21,21,22.0,0.39210768642015537,0.4746069704346798
22,22,23.0,0.2675583502660233,0.5108233060072989
23,23,24.0,0.4081583326362419,0.4544126210590722
24,24,25.0,0.4338177593143686,0.4857950301880365
25,25,26.0,0.4391889026774036,0.4844556481102398
26,26,27.0,0.4607379582774067,0.3225607333312457
27,27,28.0,0.4788638688528055,0.4907539084286992
28,28,29.0,0.4846343416864711,0.4191502233082449
29,29,30.0,0.5116365542053569,0.4501977869177605
30,30,31.0,0.5311069488963589,0.4453425268857458
31,31,32.0,0.5372541249681377,0.4707960606185804
32,32,33.0,0.5764251218845444,0.520398285409339
33,33,34.0,0.575586305302781,0.4774291664564903
34,34,35.0,0.5616352479533693,0.3459759287991915
35,35,36.0,0.5625922437072876,0.5107539480645835
36,36,37.0,0.5489820101789534,0.48378571837137496
37,37,38.0,0.6448444158902209,0.4871449607752094
38,38,39.0,0.6917372805284123,0.4484650290241223
39,39,40.0,0.7271296556091629,0.3848199137168242
40,40,41.0,0.7644394061642249,0.4400939674426052
41,41,42.0,0.7725975703324645,0.6694475443525176
42,42,43.0,0.7906622473585825,0.4831666281993847
43,43,44.0,0.8188607500145164,0.4761348722909489
44,44,45.0,0.8232675090497503,0.3994739649758703
45,45,46.0,0.8363378939020532,0.4771739482521795
46,46,47.0,0.8521792605414091,0.40305892173585534
47,47,48.0,0.8739568254009711,0.4731903414216667
48,48,49.0,0.8935109319226642,0.4899033522459408
49,49,51.0,0.9463399947810603,0.5954698666969929
50,50,52.0,0.9662097189426933,0.5203503036223207
51,51,53.0,0.9736159690245392,0.5239007209794213
52,52,54.0,0.9767008701766876,0.4529667268978663
53,53,,0.11125428699812144,0.4316768840903951
54,54,,0.9017450943022882,0.5091738747722054
,Unnamed: 0,Unnamed: 0.1,x,y
0,0,0.0,0.07060586550332759,0.4399917288682422
1,1,1.0,0.0963138576284579,0.3733957834382675
2,2,2.0,0.1004305705862385,0.4743183847738308
3,3,3.0,0.10380038647004007,0.3860251350055979
4,4,4.0,0.1166838352665781,0.4014612951452737
5,5,5.0,0.12341986768665456,0.4036205766637284
6,6,6.0,0.10808257915323748,0.329789622437878
7,7,7.0,0.16687851798760922,0.4638534627578688
8,8,8.0,0.1750750731562244,0.4815559675861625
9,9,9.0,0.18402212474634488,0.5097285424633311
10,10,10.0,0.26009027931792306,0.3483666507426708
11,11,12.0,0.28729926428606445,0.3027108454104459
12,12,13.0,0.2975008888048344,0.4981878407128262
13,13,14.0,0.3129006821537238,0.4907412795930801
14,14,15.0,0.34299384187199633,0.2920292230377006
15,15,16.0,0.3234957709387992,0.2906245317433003
16,16,17.0,0.3081364476843823,0.3034680096509552
17,17,18.0,0.3719835109969299,0.4838377563735188
18,18,19.0,0.3699968770202483,0.3981346148208482
19,19,20.0,0.3791683138037311,0.3666173415040612
20,20,21.0,0.3822292049576989,0.5059658874088857
21,21,22.0,0.3589381818225018,0.4468139290822011
22,22,24.0,0.3976325976541147,0.31977354523421564
23,23,25.0,0.4453734406382665,0.3237709187606379
24,24,26.0,0.4539562613781342,0.303371242546616
25,25,27.0,0.5453140356936039,0.5679349503737381
26,26,28.0,0.5287001395105381,0.41347400785618393
27,27,29.0,0.5539777966224165,0.5583291077355383
28,28,30.0,0.551019880378394,0.34309996327302805
29,29,31.0,0.5749804597461513,0.4019281580727654
30,30,32.0,0.5816539873507557,0.4853649549368164
31,31,33.0,0.6267755108726115,0.5881256482803465
32,32,34.0,0.6162096555035889,0.3440764018867766
33,33,35.0,0.6719631385574657,0.4308630452233579
34,34,36.0,0.6585351431593117,0.2531956179194337
35,35,37.0,0.6776689832422557,0.20602805812264524
36,36,38.0,0.654392796133005,0.4176932297722997
37,37,39.0,0.6928996975182019,0.5344853919611028
38,38,40.0,0.6478959849322373,0.6266612300362278
39,39,41.0,0.6673792198394878,0.357248791354289
40,40,42.0,0.7094767229543218,0.5048036366358266
41,41,43.0,0.698502567293047,0.38553100341807856
42,42,44.0,0.7300270163438051,0.6465281644158889
43,43,45.0,0.7895181454792634,0.514848028020503
44,44,46.0,0.7534466484574728,0.3643793109964575
45,45,47.0,0.7682357910417473,0.4547247791129836
46,46,48.0,0.8020778335200208,0.48710885385690006
47,47,49.0,0.8182906281058878,0.4088548474404313
48,48,50.0,0.8379910495114476,0.4372441226743833
49,49,51.0,0.8479939229053811,0.4269907529822907
50,50,52.0,0.8735364353050946,0.5175529214556001
51,51,53.0,0.8819573756670723,0.4755655780899373
52,52,54.0,0.8890207681904558,0.3421544128567504
53,53,55.0,0.9036259956758408,0.4975866459551428
54,54,56.0,0.925213675495664,0.5088138802445279
55,55,57.0,0.9495420850612007,0.4374685450805327
56,56,58.0,0.9564215624856944,0.3691441448292121
57,57,59.0,0.973907365373684,0.5502659077593739
58,58,60.0,0.954692585101795,0.5866396339803428
59,59,,0.2531168231712517,0.5639632200684304
60,60,,0.363355924728433,0.4928059806266862
{
"type": "FeatureCollection",
"features": [
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_1", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1186.6458125, 1575.72918750000008 ], [ 1179.35418750000008, 1782.2708125 ], [ 1261.970837500000016, 1785.187462500000038 ], [ 1269.262462500000083, 1578.645837499999971 ], [ 1186.6458125, 1575.72918750000008 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_2", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1269.262462500000083, 1578.645837499999971 ], [ 1261.970837500000016, 1785.187462500000038 ], [ 1344.587487499999952, 1788.104112499999928 ], [ 1351.879112500000019, 1581.562487500000088 ], [ 1269.262462500000083, 1578.645837499999971 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_3", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1351.879112500000019, 1581.562487500000088 ], [ 1344.587487499999952, 1788.104112499999928 ], [ 1427.204137500000115, 1791.020762500000046 ], [ 1434.495762499999955, 1584.479137499999979 ], [ 1351.879112500000019, 1581.562487500000088 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_4", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1434.495762499999955, 1584.479137499999979 ], [ 1427.204137500000115, 1791.020762500000046 ], [ 1509.820787500000051, 1793.937412499999937 ], [ 1517.112412500000119, 1587.395787500000097 ], [ 1434.495762499999955, 1584.479137499999979 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_5", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1517.112412500000119, 1587.395787500000097 ], [ 1509.820787500000051, 1793.937412499999937 ], [ 1592.437437499999987, 1796.854062500000055 ], [ 1599.729062500000055, 1590.312437499999987 ], [ 1517.112412500000119, 1587.395787500000097 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_6", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1599.729062500000055, 1590.312437499999987 ], [ 1592.437437499999987, 1796.854062500000055 ], [ 1675.054087499999923, 1799.770712499999945 ], [ 1682.3457125, 1593.229087499999878 ], [ 1599.729062500000055, 1590.312437499999987 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_7", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1682.3457125, 1593.229087499999878 ], [ 1675.054087499999923, 1799.770712499999945 ], [ 1757.670737500000087, 1802.687362499999836 ], [ 1764.962362499999927, 1596.1457375 ], [ 1682.3457125, 1593.229087499999878 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_8", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1764.962362499999927, 1596.1457375 ], [ 1757.670737500000087, 1802.687362499999836 ], [ 1840.287387500000023, 1805.604012499999953 ], [ 1847.57901250000009, 1599.062387499999886 ], [ 1764.962362499999927, 1596.1457375 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_9", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1847.57901250000009, 1599.062387499999886 ], [ 1840.287387500000023, 1805.604012499999953 ], [ 1922.904037499999959, 1808.520662499999844 ], [ 1930.195662500000026, 1601.9790375 ], [ 1847.57901250000009, 1599.062387499999886 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_10", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1930.195662500000026, 1601.9790375 ], [ 1922.904037499999959, 1808.520662499999844 ], [ 2005.520687499999894, 1811.437312499999962 ], [ 2012.812312499999962, 1604.895687499999894 ], [ 1930.195662500000026, 1601.9790375 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_11", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2012.812312499999962, 1604.895687499999894 ], [ 2005.520687499999894, 1811.437312499999962 ], [ 2088.137337500000285, 1814.353962499999852 ], [ 2095.428962500000125, 1607.812337500000012 ], [ 2012.812312499999962, 1604.895687499999894 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_12", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2095.428962500000125, 1607.812337500000012 ], [ 2088.137337500000285, 1814.353962499999852 ], [ 2170.753987500000221, 1817.2706125 ], [ 2178.045612500000061, 1610.728987499999903 ], [ 2095.428962500000125, 1607.812337500000012 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_13", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2178.045612500000061, 1610.728987499999903 ], [ 2170.753987500000221, 1817.2706125 ], [ 2253.370637500000157, 1820.187262499999861 ], [ 2260.6622625, 1613.645637500000021 ], [ 2178.045612500000061, 1610.728987499999903 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_14", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2260.6622625, 1613.645637500000021 ], [ 2253.370637500000157, 1820.187262499999861 ], [ 2335.987287500000093, 1823.103912499999979 ], [ 2343.278912499999933, 1616.562287499999911 ], [ 2260.6622625, 1613.645637500000021 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_15", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2343.278912499999933, 1616.562287499999911 ], [ 2335.987287500000093, 1823.103912499999979 ], [ 2418.603937500000029, 1826.020562499999869 ], [ 2425.895562499999869, 1619.478937499999802 ], [ 2343.278912499999933, 1616.562287499999911 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_16", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2425.895562499999869, 1619.478937499999802 ], [ 2418.603937500000029, 1826.020562499999869 ], [ 2501.220587499999965, 1828.937212499999987 ], [ 2508.512212499999805, 1622.3955875 ], [ 2425.895562499999869, 1619.478937499999802 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_17", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2508.512212499999805, 1622.3955875 ], [ 2501.220587499999965, 1828.937212499999987 ], [ 2583.837237499999901, 1831.853862499999877 ], [ 2591.128862499999741, 1625.31223749999981 ], [ 2508.512212499999805, 1622.3955875 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_18", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2591.128862499999741, 1625.31223749999981 ], [ 2583.837237499999901, 1831.853862499999877 ], [ 2666.453887500000292, 1834.770512499999768 ], [ 2673.745512500000132, 1628.228887499999928 ], [ 2591.128862499999741, 1625.31223749999981 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_19", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2673.745512500000132, 1628.228887499999928 ], [ 2666.453887500000292, 1834.770512499999768 ], [ 2749.070537499999773, 1837.687162499999886 ], [ 2756.362162499999613, 1631.145537499999818 ], [ 2673.745512500000132, 1628.228887499999928 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037_20", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2756.362162499999613, 1631.145537499999818 ], [ 2749.070537499999773, 1837.687162499999886 ], [ 2831.687187499999709, 1840.603812499999776 ], [ 2838.978812499999549, 1634.062187499999936 ], [ 2756.362162499999613, 1631.145537499999818 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240037", "plot_label": "FPWW0240037", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1186.6458125, 1575.72918750000008 ], [ 1179.35418750000008, 1782.2708125 ], [ 2838.978812499999549, 1840.603812499999776 ], [ 2838.978812499999549, 1634.062187499999936 ], [ 1186.6458125, 1575.72918750000008 ] ] ] } }
]
}
{
"type": "FeatureCollection",
"features": [
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_1", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 980.645812500000034, 1506.187812500000064 ], [ 970.354187499999966, 1710.146187500000224 ], [ 1051.937537499999962, 1714.26283750000016 ], [ 1062.229162500000029, 1510.304462500000227 ], [ 980.645812500000034, 1506.187812500000064 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_2", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1062.229162500000029, 1510.304462500000227 ], [ 1051.937537499999962, 1714.26283750000016 ], [ 1133.520887500000072, 1718.379487500000096 ], [ 1143.812512500000139, 1514.421112500000163 ], [ 1062.229162500000029, 1510.304462500000227 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_3", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1143.812512500000139, 1514.421112500000163 ], [ 1133.520887500000072, 1718.379487500000096 ], [ 1215.104237499999954, 1722.496137500000032 ], [ 1225.395862500000021, 1518.537762500000099 ], [ 1143.812512500000139, 1514.421112500000163 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_4", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1225.395862500000021, 1518.537762500000099 ], [ 1215.104237499999954, 1722.496137500000032 ], [ 1296.687587500000063, 1726.612787500000195 ], [ 1306.979212499999903, 1522.654412500000035 ], [ 1225.395862500000021, 1518.537762500000099 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_5", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1306.979212499999903, 1522.654412500000035 ], [ 1296.687587500000063, 1726.612787500000195 ], [ 1378.270937499999945, 1730.729437500000131 ], [ 1388.562562500000013, 1526.771062500000198 ], [ 1306.979212499999903, 1522.654412500000035 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_6", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1388.562562500000013, 1526.771062500000198 ], [ 1378.270937499999945, 1730.729437500000131 ], [ 1459.854287500000055, 1734.846087500000067 ], [ 1470.145912499999895, 1530.887712500000134 ], [ 1388.562562500000013, 1526.771062500000198 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_7", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1470.145912499999895, 1530.887712500000134 ], [ 1459.854287500000055, 1734.846087500000067 ], [ 1541.437637499999937, 1738.9627375 ], [ 1551.7292625, 1535.00436250000007 ], [ 1470.145912499999895, 1530.887712500000134 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_8", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1551.7292625, 1535.00436250000007 ], [ 1541.437637499999937, 1738.9627375 ], [ 1623.020987500000047, 1743.079387500000166 ], [ 1633.312612500000114, 1539.1210125 ], [ 1551.7292625, 1535.00436250000007 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_9", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1633.312612500000114, 1539.1210125 ], [ 1623.020987500000047, 1743.079387500000166 ], [ 1704.604337499999929, 1747.196037500000102 ], [ 1714.8959625, 1543.23766250000017 ], [ 1633.312612500000114, 1539.1210125 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_10", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1714.8959625, 1543.23766250000017 ], [ 1704.604337499999929, 1747.196037500000102 ], [ 1786.187687499999811, 1751.312687500000038 ], [ 1796.479312500000106, 1547.354312500000106 ], [ 1714.8959625, 1543.23766250000017 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_11", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1796.479312500000106, 1547.354312500000106 ], [ 1786.187687499999811, 1751.312687500000038 ], [ 1867.7710375, 1755.429337499999974 ], [ 1878.062662499999988, 1551.470962500000041 ], [ 1796.479312500000106, 1547.354312500000106 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_12", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1878.062662499999988, 1551.470962500000041 ], [ 1867.7710375, 1755.429337499999974 ], [ 1949.35438750000003, 1759.545987500000138 ], [ 1959.646012500000325, 1555.587612499999977 ], [ 1878.062662499999988, 1551.470962500000041 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_13", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1959.646012500000325, 1555.587612499999977 ], [ 1949.35438750000003, 1759.545987500000138 ], [ 2030.937737500000367, 1763.662637500000073 ], [ 2041.229362500000207, 1559.704262500000141 ], [ 1959.646012500000325, 1555.587612499999977 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_14", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2041.229362500000207, 1559.704262500000141 ], [ 2030.937737500000367, 1763.662637500000073 ], [ 2112.521087500000249, 1767.7792875 ], [ 2122.812712500000089, 1563.820912500000077 ], [ 2041.229362500000207, 1559.704262500000141 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_15", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2122.812712500000089, 1563.820912500000077 ], [ 2112.521087500000249, 1767.7792875 ], [ 2194.104437500000131, 1771.895937499999945 ], [ 2204.396062499999971, 1567.937562500000013 ], [ 2122.812712500000089, 1563.820912500000077 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_16", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2204.396062499999971, 1567.937562500000013 ], [ 2194.104437500000131, 1771.895937499999945 ], [ 2275.687787500000013, 1776.012587500000109 ], [ 2285.979412499999853, 1572.054212499999949 ], [ 2204.396062499999971, 1567.937562500000013 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_17", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2285.979412499999853, 1572.054212499999949 ], [ 2275.687787500000013, 1776.012587500000109 ], [ 2357.271137499999895, 1780.129237500000045 ], [ 2367.562762499999735, 1576.170862500000112 ], [ 2285.979412499999853, 1572.054212499999949 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_18", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2367.562762499999735, 1576.170862500000112 ], [ 2357.271137499999895, 1780.129237500000045 ], [ 2438.854487500000232, 1784.245887499999981 ], [ 2449.146112500000072, 1580.287512500000048 ], [ 2367.562762499999735, 1576.170862500000112 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_19", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2449.146112500000072, 1580.287512500000048 ], [ 2438.854487500000232, 1784.245887499999981 ], [ 2520.437837500000569, 1788.362537500000144 ], [ 2530.729462500000409, 1584.404162499999984 ], [ 2449.146112500000072, 1580.287512500000048 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038_20", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2530.729462500000409, 1584.404162499999984 ], [ 2520.437837500000569, 1788.362537500000144 ], [ 2602.0211875, 1792.47918750000008 ], [ 2612.312812499999836, 1588.5208125 ], [ 2530.729462500000409, 1584.404162499999984 ] ] ] } },
{ "type": "Feature", "properties": { "image": "FPWW0240038", "plot_label": "FPWW0240038", "type": "soil", "azimuth_angle": 0, "zenith_angle": 3.1415926535897931 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 980.645812500000034, 1506.187812500000064 ], [ 970.354187499999966, 1710.146187500000224 ], [ 2612.312812499999836, 1792.47918750000008 ], [ 2612.312812499999836, 1588.5208125 ], [ 980.645812500000034, 1506.187812500000064 ] ] ] } }
]
}