Recently we were processing some KML
files using OpenLayers and at some point we realised that some place-marks were not appearing on the map. After inspecting the debug console and the files more carefully we understood that OpenLayers
did not like empty placemark IDs.
To mitigate the problem we wrote the following AWK
script that will go over all lines in the KML
/XML
file, find the empty id fields (id=""
) and assign them with an auto-increment value. A note here, initially we just replaced all empty IDs with the same value but it seems that OpenLayers
does not treat kindly conflicts on IDs and thus we had to go with an auto-increment solution.
# Assigning auto-increment IDs to the placemarkers as openlayers does not show conflicting-ID elements.
awk -i inplace '{
for(x=1;x<=NF;x++) {
if($x~/id=""/) {
sub(/id=""/,"id=\"" (++i) "\"")
}
}
}1' "$output_path/$file_name";
Side notes
In case you already have some IDs defined, you would have to make your code a bit more complex… You would first need to find all filled IDs and then you would have two options:
- empty them and execute the above script
- or register them and make sure the script does not create conflicting IDs either by starting the variable
i
from a number greater than the biggest registered ID or making it even harder by filling in the gaps between the already registered IDs..