Consider a dataset describing polygons like the one below:
lat | lon | path | polygons |
1 | 1 | 1 | 1 |
-1 | 1 | 2 | 1 |
-1 | -1 | 3 | 1 |
1 | -1 | 4 | 1 |
1 | 1 | 5 | 1 |
1 | 179 | 1 | 2 |
-1 | 179 | 2 | 2 |
-1 | -179 | 3 | 2 |
1 | -179 | 4 | 2 |
1 | 179 | 5 | 2 |
Tableau doesn't allow you to label polygons directly, therefore the work around is to do dual axis on either latitude or longitude, and create a second layer using the average latitude and longitude of all the vertices of the polygon (key detail, remove the path from the level of detail, while you need it there for the polygon layer) to place the label.
This works fine apart from any polygons that include points on either side of the antimeridian at 180 degrees longitude, using the convention of 0 to 180 for longitude east, and 0 to -180 for longitude west. The trick here is to detect if the maximum and minimum longitude have different signs and if difference between the maximum and the minimum longitude defines an angle smaller or greater than 180 degrees. In the latter case, the longitude convention needs to be changed to 0 to 360 for the averaging to give sensible results. To achieve that we create a calculated field as shown below and use it in place of the longitude.
if max([Lon])*min([Lon])<0 then
if max([Lon])-min([Lon])>180 then avg(if [Lon]<0 then
360+[Lon] else [Lon] end)
else avg([Lon]) end
else avg([Lon])
end
No comments:
Post a Comment