User Tools

Site Tools


project:bioosm:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
project:bioosm:start [2018/08/27 22:55] – pridan taxonomator sachyproject:bioosm:start [2023/09/21 12:15] (current) – render terminal/html escapes sachy
Line 4: Line 4:
 name=Biologicke zbrane ve vasem okoli| name=Biologicke zbrane ve vasem okoli|
 image= bioosm:bioosm.jpg?400 | image= bioosm:bioosm.jpg?400 |
-founder=[[user:sachy:start]]|+founder=[[user:sachy]]|
 interested=[[user:sumie-dh]]| interested=[[user:sumie-dh]]|
 sw=CC-BY-SA| sw=CC-BY-SA|
Line 18: Line 18:
 ==== K cemu to je ==== ==== K cemu to je ====
  
-  *  interaktivni mapa vhodna k zobrazovani vetsiho mnozstvi fotek, brmlabi wiki, sluzby typu phtagr a soup se zdaly nevhodne k publikaci tohoto typu obsahu, wiki by byla prilis obludna, na beznych sdilecich obrazkovych sluzbach se neda nic pohodlne dohledavat a davat tam biologicky smysluplne a prehledne popisky +  * interaktivni mapa vhodna k zobrazovani vetsiho mnozstvi fotek, brmlabi wiki, sluzby typu phtagr a soup se zdaly nevhodne k publikaci tohoto typu obsahu, wiki by byla prilis obludna, na beznych sdilecich obrazkovych sluzbach se neda nic pohodlne dohledavat a davat tam biologicky smysluplne a prehledne popisky 
-  *  monitoring zivocichu a rostlin podle zajmu prispevovatelu  +  * monitoring zivocichu a rostlin podle zajmu prispevovatelu  
-  *  snadne klikaci katalogovani nalezu skrze Tellico nevyzadujici coding skills +  * snadne klikaci katalogovani nalezu skrze Tellico nevyzadujici coding skills 
-  *  TODO - jednoduche selekce zajmoveho okruhu subjektu [napr. podle rodu, biotopu, datumu] na mape+  * TODO - jednoduche selekce zajmoveho okruhu subjektu [napr. podle rodu, biotopu, datumu] na mape
   * procvicovani temne magie commandu grep, sed a regexpu   * procvicovani temne magie commandu grep, sed a regexpu
  
Line 31: Line 31:
  
 Pro nadsence je vygenerovany taky prehled prispevku plainlog.htm serazeny dle data pridani do databaze. Pro nadsence je vygenerovany taky prehled prispevku plainlog.htm serazeny dle data pridani do databaze.
 +
 +Pokud chcete vedet co je noveho, odebirejte projektovou [[http://brmlab.s0c4.net/bioosm/bioosm.rss|RSS]]
  
 Obrazky v plnem rozliseni jsou v podadresari "img", nahledy v "simg". Videa jsou nahrana na YT a misto nahledu maji generickou ikonu. Obrazky v plnem rozliseni jsou v podadresari "img", nahledy v "simg". Videa jsou nahrana na YT a misto nahledu maji generickou ikonu.
Line 103: Line 105:
 # Parse Tellico database to BioOSM index.htm # Parse Tellico database to BioOSM index.htm
 # $1 = tellico .tc file # $1 = tellico .tc file
-Print result to stdout+$2 = "" terminal stderr (default) 
 +#    = "html" html marked stderr (for web bioosm)
 # #
-# find ./ -type f -exec mogrify -verbose -layers Dispose -resize 128\>x128\> -quality 100% {} ++# Print result to /jsonrss/*.json 
 +
 +# find ./ -type f -name '*.jpg' -newermt "2023-09-03" -exec mogrify -verbose -layers Dispose -resize 1600\>x1600\> -quality 90% {} + 
 +# echo "14.7345 48.7145" | gdallocationinfo -wgs84 ./cesko_big.tiff 
 +# gdal_translate -of GTiff -a_srs WGS84 -a_ullr 11.6863 50.9745 19.9876 48.3729 ./source.tif ./result.tif 
 +# https://data.geus.dk/egdi/#baslay=baseMapGEUS&extent=3953440,2399890,4757540,2763830&layers=igme5000 
 + 
 +#bnds=new OpenLayers.Bounds(11.6863000,48.3729000 ,19.9876000,50.9745000); 
 +#var geoimg = new OpenLayers.Layer.Image("geo","https://brmlab.s0c4.net/bioosm/eusr5000_600dpi_cesko.png", bnds,bnds.getSize(),{numZoomLevels: 20,isBaseLayer:false}); 
 +#map.addLayer(geoimg); 
 + 
 # #
 +# <iframe width="500" height="500" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=14.978000%2C49.990000%2C15.022000%2C50.010000&amp;layer=mapnik&amp;marker=50.000000%2C15.000000"></iframe>
 # // vectorLayer.removeFeatures(atol) # // vectorLayer.removeFeatures(atol)
 # // map.removeLayer(vectorLayer) # // map.removeLayer(vectorLayer)
Line 112: Line 127:
 # #
 # Creates: # Creates:
-#   (to stdout) index.htm file with the map and static entries+#   (to stdout) HTML file with the map and static entries
 #   ./det/ID.htm details of each and every entry #   ./det/ID.htm details of each and every entry
 +#   ./bioosm.json JSON of all entries
 +#   ./bioosm.rss updated RSS feed
 +#   ./plainlog.htm sorted entries for easy human/alg
 # #
 +
 +
  
 rm -rfv "./det/*" rm -rfv "./det/*"
Line 129: Line 149:
  
 json="" json=""
 +geojson=""
 +
 +rss=$'<?xml version="1.0" encoding="UTF-8" ?>\n'
 +rss+=$'<rss version="2.0">\n'
 +rss+=$'<channel>\n'
 +rss+=$'<title>Brmlab BioOSM RSS feed</title>\n'
 +rss+=$'<description>New entries in the BioOSM database</description>\n'
 +rss+=$'<link>https://bioosm.s0c4.net</link>\n'
 +rss+=$'<lastBuildDate></lastBuildDate>\n'
 +rss+=$'<pubDate></pubDate>\n'
 +rss+=$'<ttl>86400</ttl>\n'
 +
 +errhtml="$2"
 +
 +# paticka (co, rok, odkaz)
 +function obioosm () {
 + r="<div id='obioosm'><p>Welcome to BioOSM! This site is owned and maintained by members of the <a href='https://brmlab.cz' target='_blank'>hackerspace brmlab</a>. See our wiki page for further <a href='https://brmlab.cz/project/bioosm/start' target='_blank'>details</a><br>License: <a href='https://creativecommons.org/licenses/by-nc-nd/4.0/' target='_blank'>CC BY-NC-ND</a>. In case you have any questions, suggestions, please let us know at bioosm<span id='zavinacvmejlu'></span>s0c4.net.</p><p>To cite any material (including images) in your publication, please use following format: <br><i>Plskova, K., Sacha, M., brmlab. BioOSM"
 + if [[ "$1" != "" ]]; then
 + r+=" - $1"
 + fi
 + r+=". "
 + if [[ "$2" != "" ]]; then
 + r+="$2. "
 + else
 + r+="2023. "
 + fi
 + if [[ "$3" != "" ]]; then
 + r+="$3"
 + else
 + r+="https://bioosm.s0c4.net"
 + fi
 + r+="</i></p></div>"
 + echo "$r"
 +}
 +
 +# HTML fajl per project
 +function genhtml() {
 + o=$(obioosm "$1" "" "" | sed -e 's/\//\\\//g') # make "\/" from "/" so sed below is OK
 + h=$(cat "./__BIOVZOR__.htm" | sed -e "s/__BIOVZOR_TIT__/$1/g" | sed -e "s/__BIOVZOR_CPRT__/$o/g" | sed -e "s/__BIOVZOR_J__/$1/g")
 + echo "$h" > "./jsonrss/$1.htm"
 + echo "*** $1 done ***"
 +}
  
 # Return icon by Regnum # Return icon by Regnum
Line 151: Line 213:
  
 function safehtml () { function safehtml () {
- echo "$1" | sed -e "s/'/\&#39;/g" -e 's/"/\&#34;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/^[ ]*//g' -e 's/[ ]*$//g'+ echo "$1" | sed -e 's/#/%23/g' -e "s/'/\&#39;/g" -e 's/"/\&#34;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/^[ ]*//g' -e 's/[ ]*$//g' 
 +
 + 
 +function getgeo () { 
 + #g=$(echo "$1 $2" | gdallocationinfo -wgs84 ./geo/eusr5000_600dpi_cesko_8b_geo.tif | grep -v 255 | grep -oPe '[0-9]+$'
 + g=$(echo "$1 $2" | gdallocationinfo -wgs84 ./geo/eusr5000_600dpi_cesko_8b_geo.tif | grep -v 255 | grep -oE '[0-9]+$'
 + case "$g" in 
 + "1"
 + echo "Fluvial deposits, sediments";; 
 + "128"
 + echo "Weathering residues of different rocks, loess";; 
 + "130"
 + echo "Volcanic rocks";; 
 + "133"
 + echo "Igneous and metamorphic rocks, Palaeozoic sedimentary rocks, loess";; 
 + "143"
 + echo "Loess, igneous and metamorphic rocks";; 
 + "144"
 + echo "Loess, Cretaceous sandstone and marl";; 
 + "147"
 + echo "Igneous, metamorphic and Palaeozoic sedimentary rocks, loess";; 
 + "148"
 + echo "Igneous and metamorphic rocks, loess";; 
 + "149"
 + echo "Igneous and metamorphic rocks, Palaeozoic sedimentary rocks, loess";; # asi fakt stejny jako 133 omg 
 + "150"
 + echo "Igneous and metamorphic rocks, palaeozoic sedimentary rocks";; 
 + "153"
 + echo "Sandy and loamy loess, Tertiary sediments, fluvial deposits";; 
 + "205"
 + echo "Cretaceous and Tertiary flysch, marl, sandstone, limestone";; 
 + *) 
 + echo "";; 
 + esac
 } }
  
Line 158: Line 253:
 # !!! BEZ ODSAZENI !!! # !!! BEZ ODSAZENI !!!
 # $1 = list of entries # $1 = list of entries
-# $2 = layer name+# $2 = layer name = JSON filename without suffix
 # $3 = icon of the points # $3 = icon of the points
 function spagety () { function spagety () {
 +
 + if [[ "$errhtml" == "" ]]; then
 + >&2 echo "===== $2 ====="
 + else
 + >&2 echo "<h2>$2</h2>"
 + fi
  
  bylo="" # Minula pozice  bylo="" # Minula pozice
Line 170: Line 271:
  oy="" # Old Y  oy="" # Old Y
  datelog="" # Entries sorted by date for plaintext log  datelog="" # Entries sorted by date for plaintext log
- json="var data='{\"version\":\"$(date --rfc-3339=seconds)\",\"arma\":["+ json="var data='{\"version\":\"$(date --rfc-3339=seconds)\",\"fund\":\"$2\",\"arma\":[" 
 + geojson='{"type":"FeatureCollection","version":"BIOOSM_' 
 + geojson+="$(date --rfc-3339=seconds)" 
 + geojson+='","features":['
  
  while IFS='' read -r radek || [[ -n "$radek" ]]; do  while IFS='' read -r radek || [[ -n "$radek" ]]; do
- co=$(echo "$radek"grep -oe ' <title>.*</title> ' | sed -E 's/( )*<(\/)?title>( )*//g')+ if [[ "$radek" = "" ]]; then 
 + continue; 
 + fi 
 + 
 + entryid=$(echo "$radek"sed -'s/^.*<entry id="([0-9]+)">.*$/\1/g;t;d'
 + co=$(echo "$radek" | sed -E 's/^.*<title>(.*)<\/title>.*$/\1/g;t;d')
  co=$(safehtml "$co")  co=$(safehtml "$co")
- obr=$(echo "$radek"grep -oe ' <image>.*</image> ' | sed -E 's/( )*<(\/)?image>( )*//g' | grep -oPe '[^/]*$'+ obr=$(echo "$radek"sed -'s/^.*<image>(.*)<\/image>.*$/\1/g;t;d' | sed -E 's/^.*\///g'
- obr=$(safehtml "$obr"+ kde=$(echo "$radek"sed -'s/^.*<locality>(.*)<\/locality>.*$/\1/g;t;d')
- kde=$(echo "$radek"grep -oe '<locality>.*</locality>' | grep -oPe '[0-9]{2}\.[0-9]{1,10}[, ]*[0-9]{2}\.[0-9]{1,10}')+
  kde=$(safehtml "$kde")  kde=$(safehtml "$kde")
- kdex=$(echo "$kde"grep -oPe '[0-9]{2}\.[0-9]{1,10}$') + kdex=$(echo "$kde"sed -'s/^[0-9]+\.[0-9]+[]*//g;t;d'# keep second part 
- kdex=$(safehtml "$kdex") + kdey=$(echo "$kde"sed -'s/[, ]*[0-9]+\.[0-9]+$//g;t;d'# keep first part 
- kdey=$(echo "$kde"grep -oPe '^[0-9]{2}\.[0-9]{1,10}') + kdy=$(echo "$radek"sed -'s/^.*<taken-date>(.*)<\/taken-date>.*$/\1/g;t;d' | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]{4})/\3-\2-\1/g' | sed -E 's/-([0-9])-/-0\1-/g' | sed -E 's/-([0-9])$/-0\1/g')
- kdey=$(safehtml "$kdey") +
- kdy=$(echo "$radek"grep -oe <taken-date>.*</taken-date> ' | sed -E 's/( )*<(\/)?taken-date>( )*//g' | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]{4})/\3-\2-\1/g' | sed -E 's/-([0-9])-/-0\1-/g' | sed -E 's/-([0-9])$/-0\1/g')+
  kdy=$(safehtml "$kdy")  kdy=$(safehtml "$kdy")
- skop_typ=$(echo "$radek"grep -oe <new-field-1>.*</new-field-1> ' | sed -E 's/( )*<(\/)?new-field-1>( )*//g')+ skop_typ=$(echo "$radek"sed -'s/^.*<new-field-1>(.*)<\/new-field-1>.*$/\1/g;t;d')
  skop_typ=$(safehtml "$skop_typ")  skop_typ=$(safehtml "$skop_typ")
- skop=$(echo "$radek"grep -oe <microscope>.*</microscope> ' | sed -E 's/( )*<(\/)?microscope>( )*//g')+ skop=$(echo "$radek"sed -'s/^.*<microscope>(.*)<\/microscope>.*$/\1/g;t;d')
  skop=$(safehtml "$skop")  skop=$(safehtml "$skop")
- imp=$(echo "$radek"grep -oe <new-field-3>.*</new-field-3> ' | sed -E 's/)*<(\/)?new-field-3>( )*//g')+ imp=$(echo "$radek"sed -'s/^.*<new-field-3>(.*)<\/new-field-3>.*$/\1/g;t;d')
  imp=$(safehtml "$imp")  imp=$(safehtml "$imp")
- reg=$(echo "$radek"grep -oe <new-field-4>.*</new-field-4> ' | sed -E 's/)*<(\/)?new-field-4>( )*//g')+ reg=$(echo "$radek"sed -'s/^.*<new-field-4>(.*)<\/new-field-4>.*$/\1/g;t;d')
  reg=$(safehtml "$reg")  reg=$(safehtml "$reg")
- phy=$(echo "$radek"grep -oe <phylum>.*</phylum> ' | sed -E 's/( )*<(\/)?phylum>( )*//g')+ phy=$(echo "$radek"sed -'s/^.*<phylum>(.*)<\/phylum>.*$/\1/g;t;d')
  phy=$(safehtml "$phy")  phy=$(safehtml "$phy")
- cla=$(echo "$radek"grep -oe <class>.*</class> ' | sed -E 's/( )*<(\/)?class>( )*//g')+ cla=$(echo "$radek"sed -'s/^.*<class>(.*)<\/class>.*$/\1/g;t;d')
  cla=$(safehtml "$cla")  cla=$(safehtml "$cla")
- ord=$(echo "$radek"grep -oe <order>.*</order> ' | sed -E 's/( )*<(\/)?order>( )*//g')+ ord=$(echo "$radek"sed -'s/^.*<order>(.*)<\/order>.*$/\1/g;t;d')
  ord=$(safehtml "$ord")  ord=$(safehtml "$ord")
- fam=$(echo "$radek"grep -oe <family>.*</family> ' | sed -E 's/( )*<(\/)?family>( )*//g')+ fam=$(echo "$radek"sed -'s/^.*<family>(.*)<\/family>.*$/\1/g;t;d')
  fam=$(safehtml "$fam")  fam=$(safehtml "$fam")
- gen=$(echo "$radek"grep -oe <genus>.*</genus> ' | sed -E 's/( )*<(\/)?genus( )*>//g')+ gen=$(echo "$radek"sed -'s/^.*<genus>(.*)<\/genus>.*$/\1/g;t;d')
  gen=$(safehtml "$gen")  gen=$(safehtml "$gen")
- spe=$(echo "$radek"grep -oe <species>.*</species> ' | sed -E 's/( )*<(\/)?species>( )*//g')+ spe=$(echo "$radek"sed -'s/^.*<species>(.*)<\/species>.*$/\1/g;t;d')
  spe=$(safehtml "$spe")  spe=$(safehtml "$spe")
- loc=$(echo "$radek"grep -oe <locality---plaintext>.*</locality---plaintext> ' | sed -E 's/)*<(\/)?locality---plaintext>( )*//g')+ loc=$(echo "$radek"sed -'s/^.*<locality---plaintext>(.*)<\/locality---plaintext>.*$/\1/g;t;d')
  loc=$(safehtml "$loc")  loc=$(safehtml "$loc")
- des=$(echo "$radek"grep -oe <description>.*</description> ' | sed -E 's/( )*<(\/)?description>( )*//g')+ des=$(echo "$radek"sed -'s/^.*<description>(.*)<\/description>.*$/\1/g;t;d')
  des=$(safehtml "$des")  des=$(safehtml "$des")
- vid=$(echo "$radek"grep -oe <videolink>.*</videolink> ' | sed -E 's/( )*<(\/)?videolink>( )*//g')+ vid=$(echo "$radek"sed -'s/^.*<videolink>(.*)<\/videolink>.*$/\1/g;t;d')
  vid=$(safehtml "$vid")  vid=$(safehtml "$vid")
- bio=$(echo "$radek"grep -oe <biotope>.*</biotope> ' | sed -E 's/( )*<(\/)?biotope>( )*//g')+ bio=$(echo "$radek"sed -'s/^.*<biotope>(.*)<\/biotope>.*$/\1/g;t;d')
  bio=$(safehtml "$bio")  bio=$(safehtml "$bio")
- eng=$(echo "$radek"grep -oe <enlargement>.*</enlargement> ' | sed -E 's/( )*<(\/)?enlargement>( )*//g')+ eng=$(echo "$radek"sed -'s/^.*<enlargement>(.*)<\/enlargement>.*$/\1/g;t;d')
  eng=$(safehtml "$eng")  eng=$(safehtml "$eng")
- obs=$(echo "$radek"grep -oe <observer>.*</observer> ' | sed -E 's/( )*<(\/)?observer>( )*//g')+ obs=$(echo "$radek"sed -'s/^.*<observer>(.*)<\/observer>.*$/\1/g;t;d')
  obs=$(safehtml "$obs")  obs=$(safehtml "$obs")
- lnk=$(echo "$radek"grep -oe <localitylink>.*</localitylink> ' | sed -E 's/( )*<(\/)?localitylink>( )*//g')+ lnk=$(echo "$radek"sed -'s/^.*<localitylink>(.*)<\/localitylink>.*$/\1/g;t;d')
  lnk=$(safehtml "$lnk")  lnk=$(safehtml "$lnk")
 + har=$(echo "$radek" | sed -E 's/^.*<harvesting-method>(.*)<\/harvesting-method>.*$/\1/g;t;d')
 + den=$(echo "$radek" | sed -E 's/^.*<population-density>(.*)<\/population-density>.*$/\1/g;t;d')
 + dur=$(echo "$radek" | sed -E 's/^.*<min>(.*)<\/min>.*$/\1/g;t;d')
 + lor=$(echo "$radek" | sed -E 's/^.*<locality-reference>(.*)<\/locality-reference>.*$/\1/g;t;d')
 + lrl=$(echo "$radek" | sed -E 's/^.*<locality-reference---link>(.*)<\/locality-reference---link>.*$/\1/g;t;d')
 + lov=$(echo "$radek" | sed -E 's/^.*<locality---vobrazek>(.*)<\/locality---vobrazek>.*$/\1/g;t;d' | sed -E 's/^.*\///g')
 + lov=$(safehtml "$lov")
 + cls=$(echo "$radek" | sed -E 's/^.*<cluster>([0-9]*)<\/cluster>.*$/\1/g;t;d')
 + mpi=$(echo "$radek" | grep -oe ' <mainpic>yep</mainpic> ')
 + elv=$(echo "$kdex $kdey" | gdallocationinfo -wgs84 ./elev/cesko_big.tiff | grep "Value" | grep -oe '[0-9]+$')
 + geo=$(getgeo "$kdex" "$kdey")
 + gra=$(echo "$radek" | sed -E 's/^.*<grant>(.*)<\/grant>.*$/\1/g;t;d')
 + tem=$(echo "$radek" | sed -E 's/^.*<temperature>(.*)<\/temperature>.*$/\1/g;t;d')
 + cnd=$(echo "$radek" | sed -E 's/^.*<conductivity>(.*)<\/conductivity>.*$/\1/g;t;d')
 + ph=$(echo "$radek" | sed -E 's/^.*<ph>(.*)<\/ph>.*$/\1/g;t;d')
 + kar=$(echo "$radek" | sed -E 's/^.*<karyotype>(.*)<\/karyotype>.*$/\1/g;t;d')
 + lid=$(echo "$radek" | sed -E 's/^.*<localityid>(.*)<\/localityid>.*$/\1/g;t;d')
 +
 +# if [[ "$errhtml" == "" ]]; then
 +# >&2 echo "$co - $har - $den - $dur - $lor - $lrl - $lov - $elv"
 +# else
 +# >&2 echo "<span class='nok'>$co - $har - $den - $dur - $lor - $lrl - $lov - $elv</span><br>"
 +# fi
 +# continue;
 +
  detid=$(echo "brmlab$co$obr$kde$kdy" | md5sum | grep -oe '[a-zA-Z0-9]*')  detid=$(echo "brmlab$co$obr$kde$kdy" | md5sum | grep -oe '[a-zA-Z0-9]*')
  
  if [[ "$kdex" = "" ]]; then  if [[ "$kdex" = "" ]]; then
- >&2 echo $(echo "$radek" | grep -oe '<locality>.*</locality>'" $co+ if [[ "$errhtml" == "" ]]; then 
- continue;+ >&2 echo -e "\033[31m $lid KDEX '$kde' '$co' \033[0m" 
 + >&echo -e "\033[31m $lid RADEK '$radek' \033[0m" 
 + else 
 + >&2 echo "<span class='nok'>$lid KDEX '$kde' '$co'</span><br>" 
 + >&2 echo "<span class='nok'><pre>$radek</pre></span>
 + fi
  fi  fi
 +
  zkurvenetellico=$(echo "$obr" | grep -oe '\.[a-zA-Z]*$')  zkurvenetellico=$(echo "$obr" | grep -oe '\.[a-zA-Z]*$')
- if [[ "$zkurvenetellico" = ".jpeg" ]]; then + odkurvenyobr=$(echo "$obr" | sed -e 's/%23/#/g'
- >&2 echo "$obr $co" + #if [[ "$zkurvenetellico" = ".jpeg" ]]; then 
- continue;+ if [[ ! -f "./img/$odkurvenyobr" ]]; then 
 + if [[ "$gen" != "negative" ]]; then 
 + if [[ "$errhtml" == "" ]]; then 
 + >&2 echo -e "\033[31m $lid OBR $odkurvenyobr $co\033[0m
 + else 
 + >&2 echo "<span class='nok'>$lid OBR $odkurvenyobr $co</span>" 
 + fi 
 + continue; 
 + fi
  fi  fi
 + obr=$(safehtml "$obr")
  
  if [[ "$spe" = "sp." ]]; then  if [[ "$spe" = "sp." ]]; then
Line 237: Line 383:
  fi  fi
  
- json="$json{+ povr="" 
- json="$json \"qualis\":\"$co\"," + povs="" 
- json="$json \"imperium\":\"$imp\"," + pov="" 
- json="$json \"regnum\":\"$reg\"," + if [[ "$phy" = "Platyhelminthes" ]]; then 
- json="$json \"phylum\":\"$phy\"," + povr=$(cat "./povodi_r.json" | ./povodi.py "$kdey" "$kdex"
- json="$json \"classis\":\"$cla\"," + #povrf=$(echo "$povr" | grep -oPe '^[^ ]*' | tr 'e' 'E'
- json="$json \"ordo\":\"$ord\"," + povrf=$(echo "$povr" | sed -e 's/ .*$//g' | tr 'e' 'E'
- json="$json \"familia\":\"$fam\"," + povrn=$(echo "$povr" | sed -e 's/^[^ ]* //g'
- json="$json \"genus\":\"$gen\"," + povs=$(cat "./povodi_s.json" | ./povodi.py "$kdey" "$kdex"
- json="$json \"specie\":\"$spe\"," + #povsf=$(echo "$povs" | grep -oPe '^[^ ]*' | tr 'e' 'E'
- json="$json \"locus\":\"$kde\"," + povsf=$(echo "$povs" | sed -e 's/ .*$//g' | tr 'e' 'E'
- json="$json \"x\":\"$kdex\"," + povsn=$(echo "$povs" | sed -e 's/^[^ ]* //g'
- json="$json \"y\":\"$kdey\"," + if (( $(echo "$povsf < $povrf" | bc -l) )) ; then 
- json="$json \"locplain\":\"$loc\"," + pov="$povsn - $povrn" 
- json="$json \"depictio\":\"$des\"," + else 
- json="$json \"quando\":\"$kdy\"," + pov="$povrn" 
- json="$json \"obr\":\"$obr\"," + fi 
- json="$json \"micro\":\"$skop\"," + fi 
- json="$json \"microtyp\":\"$skop_typ\"," + 
- json="$json \"vid\":\"$vid\"," + if [[ "$cls" "" ]]; then 
- json="$json \"bio\":\"$bio\"," + cls=0 
- json="$json \"amp\":\"$eng\"," + fi 
- json="$json \"spec\":\"$obs\"," + 
- json="$json \"detid\":\"$detid\"," + if [[ "$mpi" = "" ]]; then 
- json="$json \"lnk\":\"$lnk\""Lastone without ',' + mpi="" 
- json="$json },"+ else 
 + mpi="y" 
 + fi 
 + 
 + Tjson="{" 
 + Tjson+=" \"title\":\"$co\"," # qualis 
 + Tjson+=" \"imperium\":\"$imp\"," 
 + Tjson+=" \"regnum\":\"$reg\"," 
 + Tjson+=" \"phylum\":\"$phy\"," 
 + Tjson+=" \"classis\":\"$cla\"," 
 + Tjson+=" \"ordo\":\"$ord\"," 
 + Tjson+=" \"familia\":\"$fam\"," 
 + Tjson+=" \"genus\":\"$gen\"," 
 + Tjson+=" \"specie\":\"$spe\"," 
 + Tjson+=" \"locality\":\"$kde\"," # locus 
 + Tjson+=" \"x\":\"$kdex\"," 
 + Tjson+=" \"y\":\"$kdey\"," 
 + Tjson+=" \"locplain\":\"$loc\"," 
 + Tjson+=" \"description\":\"$des\"," # depictio 
 + Tjson+=" \"takendate\":\"$kdy\"," # quando 
 + Tjson+=" \"obr\":\"$obr\"," 
 + Tjson+=" \"micro\":\"$skop\"," 
 + Tjson+=" \"microtyp\":\"$skop_typ\"," 
 + Tjson+=" \"videolink\":\"$vid\"," # vid 
 + Tjson+=" \"biotope\":\"$bio\"," # bio 
 + Tjson+=" \"enlargement\":\"$eng\"," # amp 
 + Tjson+=" \"observer\":\"$obs\"," # spec 
 + Tjson+=" \"detid\":\"$detid\"," 
 + Tjson+=" \"harvestingmethod\":\"$har\"," # har 
 + Tjson+=" \"populationdensity\":\"$den\"," # den 
 + Tjson+=" \"min\":\"$dur\"," # dur 
 + Tjson+=" \"localityreference\":\"$lor\"," # lor 
 + Tjson+=" \"localityreferencelink\":\"$lrl\"," #lrl 
 + Tjson+=" \"localityvobrazek\":\"$lov\"," # lov 
 + Tjson+=" \"localitylink\":\"$lnk\"," # lnk 
 + Tjson+=" \"cluster\":$cls," # cls 
 + Tjson+=" \"mainpic\":\"$mpi\"," # mpi 
 + Tjson+=" \"pov\":\"$pov\"," 
 + Tjson+=" \"elv\":\"$elv\"," 
 + Tjson+=" \"geo\":\"$geo\"," 
 + Tjson+=" \"temperature\":\"$tem\"," # tem 
 + Tjson+=" \"conductivity\":\"$cnd\"," # cnd 
 + Tjson+=" \"ph\":\"$ph\"," 
 + Tjson+=" \"karyotype\":\"$kar\"" # kar # Last without ',' 
 + Tjson+="}" 
 + 
 + json+="$Tjson," 
 + geojson+='{"type":"Feature","geometry":{"type":"point","coordinates":[' 
 + geojson+="$kdex,$kdey" 
 + geojson+=']},"properties":' 
 + geojson+="$Tjson}," 
 + 
 + rss+=$'<item>\n' 
 + rss+=$'  <title>'"$co"$'</title>\n' 
 + rss+=$'  <description>'"$des"$'</description>\n' 
 + rss+=$'  <link>http://brmlab.s0c4.net/bioosm/det/'"$detid"$'.htm</link>\n' 
 + rss+=$'  <guid isPermaLink="false">'"$detid"$'</guid>\n' 
 + rss+=$'  <pubDate>'"$kdy"$'</pubDate>\n' 
 + rss+=$'</item>\n'
  
  
Line 268: Line 472:
  detid=$(echo "brmlab$co$obr$kde$kdy" | md5sum | grep -oe '[a-zA-Z0-9]*')  detid=$(echo "brmlab$co$obr$kde$kdy" | md5sum | grep -oe '[a-zA-Z0-9]*')
  detpg="<html><head>"  detpg="<html><head>"
- detpg="$detpg<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" + detpg+="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" 
- detpg="$detpg<link rel='stylesheet' href='../style.css' type='text/css'>" + detpg+="<link rel='stylesheet' href='../style.css' type='text/css'>" 
- detpg="$detpg<title>Brmlab - BioOSM $co $kde</title>" + detpg+="<title>Brmlab - BioOSM $co $kde</title>" 
- detpg="$detpg</head><body>" + 
- detpg="$detpg<table class='dettbl'><tr>" + detpg+="<meta property='og:title' content='BioOSM - $co $kde'>" 
- detpg="$detpg<td><h1>$co (<a href='$wikisp' target='_blank'>wiki</a>)</h1>"+ detpg+="<meta property='og:description' content='$obs found $co and took an image and additional notes.'>" 
 + detpg+="<meta property='og:image' content='https://brmlab.s0c4.net/bioosm/img/$obr'>
 + detpg+="<meta property='og:url' content='https://brmlab.s0c4.net/bioosm/det/$detid.htm'>" 
 + detpg+="<meta name='twitter:card' content='summary_large_image'>" 
 + detpg+="<meta name='og:type' content='website'>" 
 + detpg+="<meta property='og:site_name' content='BioOSM - creatures around us'>" 
 + detpg+="<meta name='twitter:image:alt' content='Image of $co'>" 
 + 
 + detpg+="</head>" 
 + if [[ "$cls" != "0" ]]; then 
 + detpg+="<script src='../bioosmdet.js'></script>" 
 + detpg+="<script>getJSONarma($cls)</script>" 
 + fi 
 + detpg+="<body>" 
 + detpg+="<table class='dettbl'><tr>" 
 + detpg+="<h1>$co (<a href='$wikisp' target='_blank'>wiki</a>)</h1>" 
 + detpg+="<td style='width:33%;vertical-align:top'>"
  if [[ "$imp" != "" ]]; then  if [[ "$imp" != "" ]]; then
- detpg="$detpg<b>Imperium:</b> <a href='https://en.wikipedia.org/wiki/$imp' target='_blank'>$imp</a><br>"+ detpg+="<b>Domain:</b> <a href='https://en.wikipedia.org/wiki/$imp' target='_blank'>$imp</a><br>"
  fi  fi
  if [[ "$reg" != "" ]]; then  if [[ "$reg" != "" ]]; then
- detpg="$detpg<b>Regnum:</b> <a href='https://en.wikipedia.org/wiki/$reg' target='_blank'>$reg</a><br>"+ detpg+="<b>Kingdom:</b> <a href='https://en.wikipedia.org/wiki/$reg' target='_blank'>$reg</a><br>"
  fi  fi
  if [[ "$phy" != "" ]]; then  if [[ "$phy" != "" ]]; then
- detpg="$detpg<b>Phylum:</b> <a href='https://en.wikipedia.org/wiki/$phy' target='_blank'>$phy</a><br>"+ detpg+="<b>Phylum:</b> <a href='https://en.wikipedia.org/wiki/$phy' target='_blank'>$phy</a><br>"
  fi  fi
  if [[ "$cla" != "" ]]; then  if [[ "$cla" != "" ]]; then
- detpg="$detpg<b>Classis:</b> <a href='https://en.wikipedia.org/wiki/$cla' target='_blank'>$cla</a><br>"+ detpg+="<b>Class:</b> <a href='https://en.wikipedia.org/wiki/$cla' target='_blank'>$cla</a><br>"
  fi  fi
  if [[ "$ord" != "" ]]; then  if [[ "$ord" != "" ]]; then
- detpg="$detpg<b>Ordo:</b> <a href='https://en.wikipedia.org/wiki/$ord' target='_blank'>$ord</a><br>"+ detpg+="<b>Order:</b> <a href='https://en.wikipedia.org/wiki/$ord' target='_blank'>$ord</a><br>"
  fi  fi
  if [[ "$fam" != "" ]]; then  if [[ "$fam" != "" ]]; then
- detpg="$detpg<b>Familia:</b> <a href='https://en.wikipedia.org/wiki/$fam' target='_blank'>$fam</a><br>"+ detpg+="<b>Family:</b> <a href='https://en.wikipedia.org/wiki/$fam' target='_blank'>$fam</a><br>"
  fi  fi
  if [[ "$gen" != "" ]]; then  if [[ "$gen" != "" ]]; then
- detpg="$detpg<b>Genus:</b> <a href='https://en.wikipedia.org/wiki/$gen' target='_blank'>$gen</a><br>"+ detpg+="<b>Genus:</b> <a href='https://en.wikipedia.org/wiki/$gen' target='_blank'>$gen</a><br>"
  fi  fi
  if [[ "$spe" != "" ]]; then  if [[ "$spe" != "" ]]; then
- detpg="$detpg<b>Specie:</b> <a href='$wikisp' target='_blank'>$spe</a><br>"+ detpg+="<b>Species:</b> <a href='$wikisp' target='_blank'>$spe</a><br>"
  fi  fi
- detpg="$detpg<br>"+ if [[ "$kar" != "" ]]; then 
 + detpg+="<b>Karyotype:</b> $kar<br>" 
 + fi 
 + detpg+="<br>"
  if [[ "$kdy" != "" ]]; then  if [[ "$kdy" != "" ]]; then
- detpg="$detpg<b>Quando:</b> $kdy<br>"+ detpg+="<b>Date:</b> $kdy<br>"
  fi  fi
  if [[ "$lnk" != "" ]]; then  if [[ "$lnk" != "" ]]; then
  loc="<a href=\"$lnk\" target=\"_blank\">$loc</a>" # Yes, escaped "  loc="<a href=\"$lnk\" target=\"_blank\">$loc</a>" # Yes, escaped "
  fi  fi
- detpg="$detpg<b>Locus:</b> $kde ($loc)<br>"+ detpg+="<b>Place:</b> $kde ($loc)<br>" 
 + if [[ "$elv" != "" ]]; then 
 + detpg+="<b>Elevation:</b> $elv m<br>" 
 + fi 
  if [[ "$obs" != "" ]]; then  if [[ "$obs" != "" ]]; then
- detpg="$detpg<b>Spectator:</b> $obs<br>"+ detpg+="<b>Observer:</b> $obs<br>"
  fi  fi
  if [[ "$bio" != "" ]]; then  if [[ "$bio" != "" ]]; then
- detpg="$detpg<b>Biotope:</b> $bio<br>"+ detpg+="<b>Biotope:</b> $bio<br>"
  fi  fi
- detpg="$detpg<br>"+ if [[ "$pov" != "" ]]; then 
 + detpg+="<b>River:</b> $pov<br>" 
 + fi 
 + if [[ "$geo" != "" ]]; then 
 + detpg+="<b>Bedrock:</b> $geo<br>" 
 + fi 
 + if [[ "$tem" != "" ]]; then 
 + detpg+="<b>Temperature:</b> $tem °C<br>" 
 + fi 
 + if [[ "$cnd" != "" ]]; then 
 + detpg+="<b>Conductivity:</b> $cnd mSv<br>" 
 + fi 
 + if [[ "$ph" != "" ]]; then 
 + detpg+="<b>pH:</b> $ph<br>" 
 + fi 
 + detpg+="<span id='microscopeval'>"
  if [[ "$skop" != "" ]]; then  if [[ "$skop" != "" ]]; then
- detpg="$detpg<b>Microscopium:</b> $skop ($skop_typ)<br>"+ detpg+="<b>Microscope:</b> $skop ($skop_typ)<br>"
  fi  fi
 + detpg+="</span>"
 + detpg+="<span id='ampval'>"
  if [[ "$eng" != "" ]]; then  if [[ "$eng" != "" ]]; then
- detpg="$detpg<b>Amplificatio:</b> $eng<br>" + detpg+="<b>Amplification:</b> $eng<br>"
- fi +
- detpg="$detpg<br>" +
- if [[ "$des" != "" ]]; then +
- detpg="$detpg<b>Depictio:</b> $des<br>"+
  fi  fi
 + detpg+="</span>"
  if [[ "$vid" != "" ]]; then  if [[ "$vid" != "" ]]; then
- detpg="$detpg<b>Video:</b> <a href=\"$vid\" target=\"_blank\">$vid</a><br>"+ detpg+="<b>Video:</b> <a href=\"$vid\" target=\"_blank\">$vid</a><br>"
  fi  fi
- detpg="$detpg</td><td style='min-width:66%'>"+ if [[ "$har" != "" ]]; then 
 + detpg+="<b>Collecting method:</b> $har<br>" 
 + fi 
 + if [[ "$den" != "" ]]; then 
 + detpg+="<b>Individuals found:</b> $den<br>" 
 + fi 
 + if [[ "$dur" != "" ]]; then 
 + detpg+="<b>Duration on stage:</b> $dur<br>" 
 + fi 
 + if [[ "$lrl" != "" ]]; then 
 + detpg+="<b>Locality reference:</b> <a href=\"$lrl\" target=\"_blank\">$lor</a><br>" 
 + elif [[ "$lor" != "" ]]; then 
 + detpg+="<b>Locality reference:</b> $lor<br>" 
 + fi 
 + detpg+="<span id='descval'>" 
 + if [[ "$des" != "" ]]; then 
 + detpg+="<b>Description:</b> $des<br>" 
 + fi 
 + detpg+="</span>" 
 + detpg+="<br><b>More on <a href=\"../\">BioOSM map</a></b><br>" 
 + detpg+="<br>" 
 + 
 + lhx=$(echo "$kdex-0.022" | bc) 
 + lhy=$(echo "$kdey-0.010" | bc) 
 + pdx=$(echo "$kdex+0.022" | bc) 
 + pdy=$(echo "$kdey+0.010" | bc) 
 + detpg+="<iframe id='minimapa' src='https://www.openstreetmap.org/export/embed.html?bbox=$lhx%2C$lhy%2C$pdx%2C$pdy&amp;layer=mapnik&amp;marker=$kdey%2C$kdex'></iframe>" 
 + detpg+="</td><td style='min-width:66%;vertical-align:top'>" 
  if [[ "$obr" != "" ]]; then  if [[ "$obr" != "" ]]; then
- detpg="$detpg<a href=\"../img/$obr\"><img src=\"../img/$obr\" alt=\"$co\" class='detimg'></a>"+ detpg+="<div id='maximatura'><a href=\"../img/$obr\"><img src=\"../img/$obr\" alt=\"$co\" class='detimg'></a></div>" 
 + detpg+="<div id='miniatury'></div>"
  else  else
  if [[ "$vid" != "" ]]; then  if [[ "$vid" != "" ]]; then
  detyt=$(echo "$vid" | sed -e 's/youtube.com\/watch?v=/youtube.com\/embed\//g')  detyt=$(echo "$vid" | sed -e 's/youtube.com\/watch?v=/youtube.com\/embed\//g')
- detpg="$detpg<iframe class='detvid' src='$detyt' frameborder='0' allow='encrypted-media' allowfullscreen></iframe>"+ detpg+="<iframe class='detvid' src='$detyt' frameborder='0' allow='encrypted-media' allowfullscreen></iframe>"
  else  else
- detpg="$detpg<img src=\"../$3\" alt=\"video\" class='detimg'>"+ if [[ "$gen" == "negative" ]]; then 
 + detpg+="<img src=\"../negative.png\" alt=\"Negative observation\" class='detimg'>" 
 + else 
 + detpg+="<img src=\"../$3\" alt=\"video\" class='detimg'>" 
 + fi
  fi  fi
  fi  fi
- detpg="$detpg</td></tr></table>" + if [[ "$lov" != "" ]]; then 
- detpg="$detpg</body></html>"+ detpg+="<img class=\"detimg\" src=\"../lokality/$lov\" alt=\"Locality photo\"><br>" 
 + fi 
 + 
 + detpg+="</td></tr></table>" 
 + detpg+=$(obioosm "$co" "$quando" "https://brmlab.s0c4.net/bioosm/det/$detid.htm"
 + detpg+="</body><script>document.getElementById('zavinacvmejlu').innerHTML='@'</script></html>"
  echo "$detpg" > "./det/$detid.htm"  echo "$detpg" > "./det/$detid.htm"
  
  # Plain log of entries  # Plain log of entries
- datelog="$datelog $kdy $kde <a href='./det/$detid.htm' target='_blank'>$co</a><br>\n"+ datelog+="$kdy $kde <a href='./det/$detid.htm' target='_blank'>$co</a><br>\n"
  
- >&2 echo "$co $obs"+ if [[ "$errhtml" == "" ]]; then 
 + >&2 echo -e "\033[32m$lid $co $obs\033[0m" 
 + else 
 + >&2 echo "<span class='ok'>$lid $co $obs</span>" 
 + fi
  
  ox="$kdex"  ox="$kdex"
Line 352: Line 635:
  
  done <<< $(echo "$1") # Zere parametr spaget, nikoli $1 scriptu !!!  done <<< $(echo "$1") # Zere parametr spaget, nikoli $1 scriptu !!!
- echo "$json{}]}" | sed -e "s/^var data='//g" > "./bioosm.json" + echo -e "$json{}]}" | sed -e "s/^var data='//g" > "./jsonrss/$2.json" 
- echo "$json{}]}'"+# echo -e "$json{}]}'
 + echo -e "$geojson{}]}" > "./jsonrss/geo_$2.geojson" 
 + 
 + rss+=$'</channel>\n' 
 + rss+=$'</rss>\n' 
 + echo "$rss" > "./jsonrss/$2.rss"
  
 } # KONEC FCE SPAGETY } # KONEC FCE SPAGETY
  
  
- 
-# Parse Tellico file to list of entries 
-praseTC=$(unzip -p "$1" tellico.xml | tr -d '\n' | sed -e $'s/<entry id="/\\\n<entry id="/g' -e $'s/<\/entry>/<\/entry>\\\n/g' | grep -Pe '^<entry id="' | grep "<strcit-do-mapy>yep</strcit-do-mapy>" | sed -E 's/(^.*)(<locality>.*<\/locality>)(.*$)/\2\1\3/' | sort) 
  
 # Sorted unique Kingdoms (to be passed as selection criteria) # Sorted unique Kingdoms (to be passed as selection criteria)
-kingdoms=$(echo "$praseTC" | grep -oe ' <new-field-4>.*</new-field-4> ' | sed -E 's/( )*<(\/)?new-field-4>( )*//g' | sort | uniq)+#kingdoms=$(unzip -p "$1tellico.xml | grep -oe '<new-field-4>.*</new-field-4>' | sed -E 's/( )*<(\/)?new-field-4>( )*//g' | sort | uniq) 
 +kingdoms=$(unzip -p "$1" tellico.xml | sed -E 's/^.*<new-field-4>(.*)<\/new-field-4>.*$/\1/g;t;d' | sort | uniq)
  
-echo '<!DOCTYPE html>' +#echo '<!DOCTYPE html>' 
-echo '<html>' +#echo '<html>' 
-echo '<head>' +#echo '<head>' 
-echo ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8">' +#echo ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8">' 
-echo ' <title>brmlab - BioOSM</title>' +#echo ' <title>brmlab - BioOSM</title>' 
-echo ' <link rel="stylesheet" href="./style.css" type="text/css">' +#echo ' <link rel="stylesheet" href="./style.css" type="text/css">' 
-echo ' <link rel="favicon" href="./'$ICON_biohazard'">' +#echo ' <link rel="favicon" href="./'$ICON_biohazard'">' 
-echo ' <script src="./OpenLayers.js"></script>' +#echo ' <script src="./OpenLayers.js"></script>' 
-echo '</head>' +#echo '</head>' 
-echo '<body>' +#echo '<body>' 
-# Generate select +## Generate select 
-echo "<div id='plainlog'><b><a href='./plainlog.htm'>Plaintext log</a></b></div>" +#echo "<div id='plainlog'><b><a href='./bioosm.rss'>RSS feed</a><br><a href='./plainlog.htm'>Quick news log</a></b></div>" 
-echo "<h1 id='title'>BioOSM - arma biologica in tuis vicinia</h1>" +##echo "<h1 id='title'>BioOSM - arma biologica in tuis vicinia</h1>" 
-ksel="<select id='reg' onChange='genphy()'>" +#echo "<h1 id='title'>BioOSM - creatures around us</h1>" 
-ksel="$ksel<option value='ALL' selected>ALL</option>" +
-while IFS='' read -r king || [[ -n "$king" ]]; do +#ksel="<select id='reg' onChange='genphy()'>" 
- ksel="$ksel<option value='"$king"'>$king</option>" +#ksel="$ksel<option value='ALL' selected>ALL</option>" 
-done <<< $(echo "$kingdoms"+#while IFS='' read -r king || [[ -n "$king" ]]; do 
-ksel="$ksel</select>" +# ksel="$ksel<option value='"$king"'>$king</option>" 
-echo "Regnum: $ksel "+#done <<< $(echo "$kingdoms"
 +#ksel="$ksel</select>" 
 +#echo "Kingdom: $ksel " 
 +#echo "Phylum: <select id='phy' onChange='gencla()'><option>ALL</option></select>
 +#echo "Class: <select id='cla' onChange='genord()'><option>ALL</option></select>
 +#echo "Order: <select id='ord' onChange='genfam()'><option>ALL</option></select>
 +#echo "Family: <select id='fam' onChange='gengen()'><option>ALL</option></select>
 +#echo "Genus: <select id='gen' onChange='genspe()'><option>ALL</option></select>" 
 +#echo "Species: <select id='spe' onChange='armageddon()'><option>ALL</option></select>" 
 +
 +#echo "<br><input type='button' value='Platyhelminthes' onClick='plostenkoidy()'>" 
 +#echo "<label><input type='checkbox' id='studchecker' onChange='studdrv()'>Springs</label>" 
 +##echo "<input type='button' value='Bugs' onClick='buggy()'>" 
 +#echo "<form style='display:inline;margin-left:5em'><input type='text' length=10 id='srch'><input type='submit' value='&#x1F50D;' onClick='limit();return false;'></form>" 
 +#echo "<br><br><div id='map' class='smallmap'></div>" 
 +#echo $(obioosm "" "" ""
 +#echo "</body>" 
 +
 +#echo "<script>" 
 +#echo 'document.getElementById("zavinacvmejlu").innerHTML="@";' 
 +#echo 'map = new OpenLayers.Map("map");' 
 +#echo 'map.addLayer(new OpenLayers.Layer.OSM());' 
 +#echo 'epsg4326 =  new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection' 
 +#echo 'projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator)' 
 +#echo 'var lonLat = new OpenLayers.LonLat(15.478, 49.817).transform(epsg4326, projectTo);' 
 +#echo 'var zoom=8;' 
 +#echo 'map.setCenter (lonLat, zoom);' 
 +
 +#echo 'var vectorLayer = new OpenLayers.Layer.Vector("Overlay",{attribution:"<a href=\"http://brmlab.cz\">Brmlab</a>"});' 
 +
 +#echo '// Define markers as "features" of the vector layer:' 
 +
 +#echo 'var atol = new OpenLayers.Feature.Vector(' 
 +#echo ' new OpenLayers.Geometry.Point(14.41876, 50.10554).transform(epsg4326, projectTo),' 
 +#echo ' {description:"Atomovy atol Brmkini"} ,' 
 +#echo ' {externalGraphic: "./biohazard.svg", graphicHeight:8, graphicWidth:8, graphicXOffset:-4, graphicYOffset:-4},' 
 +#echo ');' 
 +#echo 'vectorLayer.addFeatures(atol);' 
 +## Sem prijdou dalsi staticke ficury 
 +#echo "map.addLayer(vectorLayer);" 
 +#
  
-echo "Phylum: <select id='phy' onChange='gencla()'><option>ALL</option></select> " 
-echo "Classis: <select id='cla' onChange='genord()'><option>ALL</option></select> " 
-echo "Ordo: <select id='ord' onChange='genfam()'><option>ALL</option></select> " 
-echo "Familia: <select id='fam' onChange='gengen()'><option>ALL</option></select> " 
-echo "Genus: <select id='gen' onChange='genspe()'><option>ALL</option></select>" 
-echo "Specie: <select id='spe' onChange='armageddon()'><option>ALL</option></select>" 
-echo "<br><input type='button' value='Platyhelminthes' onClick='plostenkoidy()'>" 
-#echo "<input type='button' value='Bugs' onClick='buggy()'>" 
-echo "<br><br><div id='map' class='smallmap'></div>" 
-echo "<br><p>Welcome! You can download the <a href='./bioosm.json' target='_blank'>source data as JSON file</a><br>" 
-echo "This site is owned by members of the <a href='https://brmlab.cz' target='_blank'>hackerspace brmlab</a>. See our wiki page for <a href='https://brmlab.cz/project/bioosm/start' target='_blank'>details and contact info</a><br>License: CC-BY-SA</p>" 
-echo "</body>" 
  
-echo "<script>" +# Parse Tellico file to get list of entries 
-echo 'map = new OpenLayers.Map("map");' +granty=$(unzip -p "$1" tellico.xml | grep "<grant>" | sed -E 's/)*<(\/)?grant>( )*//g' | sed -E 's/_additional$//g' | sort -u | grep -v "^none$") 
-echo 'map.addLayer(new OpenLayers.Layer.OSM());' +#praseTC=$(unzip -p "$1" tellico.xml | tr -d '\n| sed -e $'s/<entry id="/\\\n<entry id="/g' -e $'s/<\/entry>/<\/entry>\\\n/g| grep -Pe '^<entry id="' | grep "<strcit-do-mapy>yep</strcit-do-mapy>" | sed -E 's/(^.*)(<locality>.*<\/locality>)(.*$)/\2\1\3/| sort) 
-echo 'epsg4326  new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection' +#praseTC=$(unzip -p "$1" tellico.xml | tr -d '\n' | sed -e $'s/<entry id="/\\\n<entry id="/g' -e $'s/<\/entry>/<\/entry>\\\n/g' | grep -Pe '^<entry id="' | sed -E 's/(^.*)(<locality>.*<\/locality>)(.*$)/\2\1\3/| sort) 
-echo 'projectTo map.getProjectionObject(); //The map projection (Spherical Mercator)' +praseTC=$(unzip -p "$1" tellico.xml | tr -d '\n' | sed -e $'s/<entry id="/\\\n<entry id="/g-e $'s/<\/entry>/<\/entry>\\\n/g' | grep -E '^<entry id="' | sed -E 's/(^.*)(<locality>.*<\/locality>)(.*$)/\2\1\3/| sort)
-echo 'var lonLat new OpenLayers.LonLat(15.478, 49.817).transform(epsg4326, projectTo);+
-echo 'var zoom=8;' +
-echo 'map.setCenter (lonLat, zoom);'+
  
-echo 'var vectorLayer = new OpenLayers.Layer.Vector("Overlay",{attribution:"<a href=\"http://brmlab.cz\">Brmlab</a>"});' 
  
-echo '// Define markers as "featuresof the vector layer:'+velkyvepr=$(echo "$praseTC" | grep "<strcit-do-mapy>yep</strcit-do-mapy>"
 +spagety "$velkyvepr" "bioosm" "$ICON_biohazard"
  
-echo 'var atol = new OpenLayers.Feature.Vector(' +# VSECHNO i non-public - zakomentuj predchozi "spagetya odkomunetuj tohle + exit 
-echo ' new OpenLayers.Geometry.Point(14.41876, 50.10554).transform(epsg4326, projectTo),' +#spagety "$praseTC"celytraktor" "$ICON_biohazard" # vsechno i non-public 
-echo ' {description:"Atomovy atol Brmkini"} ,' +#exit
-echo ' {externalGraphic: "./biohazard.svg", graphicHeight:8, graphicWidth:8, graphicXOffset:-4, graphicYOffset:-4},' +
-echo ');' +
-echo 'vectorLayer.addFeatures(atol);' +
-Sem prijdou dalsi staticke ficury +
-echo "map.addLayer(vectorLayer);"+
  
-spagety "$praseTC" "ALL" "$ICON_biohazard"+while IFS='' read -r grnt || [[ -n "$grnt" ]]; do 
 + # 'nope' pokud to ma byt jen na grantstrance ale ne ve velkem bioosm 
 + #vepr=$(echo "$praseTC" | grep -Pe "<strcit-do-mapy>(yep)|(negative)|(nope)</strcit-do-mapy>" | grep -Pe "<grant>$grnt(_additional)?</grant>"
 + vepr=$(echo "$praseTC" | grep -E "<strcit-do-mapy>(yep)|(negative)|(nope)</strcit-do-mapy>" | grep -E "<grant>$grnt(_additional)?</grant>"
 + spagety "$vepr" "$grnt" "$ICON_biohazard" 
 + genhtml "$grnt" 
 +done <<< $(echo "$granty")
  
-echo '</script>' +#if [[ "$errhtml" == "html" ]]; then 
-echo '<script src="./bioosm.js"></script>' # Must be after JSON + >&2 echo "*** DONE ***" 
-echo "</html>"+#fi 
 + 
 + 
 +##echo -e "$json{}]}" 
 +#echo '</script>' 
 +#echo '<script src="./bioosm.js"></script>' # Must be after JSON 
 +#echo "</html>"
  
 # Create plaintext log # Create plaintext log
 dateloghtm="<html><head>" dateloghtm="<html><head>"
-dateloghtm="$dateloghtm<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" +dateloghtm+="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" 
-dateloghtm="$dateloghtm<link rel='stylesheet' href='./style.css' type='text/css'>" +dateloghtm+="<link rel='stylesheet' href='./style.css' type='text/css'>" 
-dateloghtm="$dateloghtm<title>Brmlab - BioOSM plaintext log</title>" +dateloghtm+="<title>Brmlab - BioOSM plaintext log</title>" 
-dateloghtm="$dateloghtm</head><body>"+dateloghtm+="</head><body>"
 datelogsort=$(echo -e "$datelog" | sort -r | uniq) datelogsort=$(echo -e "$datelog" | sort -r | uniq)
-dateloghtm="$dateloghtm $datelogsort" +dateloghtm+="$datelogsort" 
-dateloghtm="$dateloghtm</body></html>"+dateloghtm+="</body></html>"
 echo "$dateloghtm" > "./plainlog.htm" echo "$dateloghtm" > "./plainlog.htm"
 </code> </code>
Line 442: Line 760:
  
 <code javascript bioosm.js> <code javascript bioosm.js>
-var blob=JSON.parse(data+window.blob=JSON.parse('{}')
-var arma=blob.arma+window.arma=null; 
 +// 
 +// MAIN LOAD START HERE 
 +// https://web.archive.org/web/20200502112446/http://dev.openlayers.org/releases/OpenLayers-2.13.1/doc/apidocs/files/OpenLayers-js.html 
 +// 
 +// 
 +function getJSONbioosm() 
 +
 + url="./bioosm.json"; 
 + var request; 
 + if(window.XMLHttpRequest) 
 + request=new XMLHttpRequest(); 
 + else 
 + request=new ActiveXObject("Microsoft.XMLHTTP"); 
 + request.onreadystatechange=function() 
 +
 + if(request.readyState==4) 
 +
 + window.blob=JSON.parse(request.responseText); 
 + window.arma=blob.arma
 + // Display ONLY platyhelminthes if reguired 
 + pus=document.URL.match(/platyhelminthes=understone/); 
 + console.log(pus); 
 + if(pus) 
 + plostenkoidy(); 
 + else 
 + // Else initial load 
 + armageddon() 
 +
 +
 + request.open("GET","./"+ubermaster+".json",true); // defined in html 
 + request.send(); 
 +
 + 
 +getJSONbioosm(); 
 + 
 +var stud=JSON.parse('{}');
  
 var vectorLayerDynamic = new OpenLayers.Layer.Vector('Overlay',{attribution:'<a href="http://brmlab.cz">Brmlab</a>'}); var vectorLayerDynamic = new OpenLayers.Layer.Vector('Overlay',{attribution:'<a href="http://brmlab.cz">Brmlab</a>'});
 +var vectorLayerPonygon = new OpenLayers.Layer.Vector('Overlay',{attribution:'<a href="http://brmlab.cz">Brmlab</a>'});
 +map.addLayer(vectorLayerPonygon);
 map.addLayer(vectorLayerDynamic); map.addLayer(vectorLayerDynamic);
 +//map.setLayerZIndex(vectorLayerDynamic,999);
 +//map.raiseLayer(vectorLayerDynamic,map.layers.length);
 +var studlay = new OpenLayers.Layer.Vector("Overlay",{attribution:"<a href=\"http://brmlab.cz\">Brmlab</a>"}); // studanky
 +map.addLayer(studlay);
  
 var regsel=document.getElementById("reg") var regsel=document.getElementById("reg")
Line 464: Line 824:
 var ICON_protista="protista.png" var ICON_protista="protista.png"
 var ICON_biohazard="biohazard.svg" var ICON_biohazard="biohazard.svg"
 +var ICON_studanka="studanka.png"
 +var ICON_negative="negative.png"
 +
 +
 +function getJSONstud()
 +{
 + url="./stud.json";
 + var request;
 + if(window.XMLHttpRequest)
 + request=new XMLHttpRequest();
 + else
 + request=new ActiveXObject("Microsoft.XMLHTTP");
 + request.onreadystatechange=function()
 + {
 + if(request.readyState==4)
 + {
 + stud=JSON.parse(request.responseText);
 + studdraw(stud);
 + }
 + }
 + request.open("GET",url,true);
 + request.send();
 +}
 +
 +function studdraw(sj)
 +{
 + studlay.destroyFeatures();
 + sjs=stud.std;
 + s=[];
 +
 + for(i=0;i<sjs.length;i++)
 + {
 + s[i] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(sjs[i].lon,sjs[i].lat).transform(epsg4326,projectTo),{'description':"<table class=\"hadtbl\">"+sjs[i].name+"</table>"},{'externalGraphic':ICON_studanka,'graphicHeight':24,'graphicWidth':24,'graphicXOffset':-12,'graphicYOffset':-12});
 + studlay.addFeatures(s[i]);
 + }
 +}
 +
 +function studdrv()
 +{
 + box=document.getElementById("studchecker");
 + if(box.checked)
 + getJSONstud();
 + else
 + studlay.destroyFeatures();
 +}
  
 // Return icon by Regnum // Return icon by Regnum
 function geticon (a,i) function geticon (a,i)
 { {
 + if(a[i].genus=="negative")
 + return ICON_negative;
 +
 + var p=true;
  var r=""  var r=""
  if(document.getElementById("reg").value!="ALL")  if(document.getElementById("reg").value!="ALL")
 + {
  r=document.getElementById("reg").value  r=document.getElementById("reg").value
 + p=false;
 + }
  else  else
  {  {
  r=a[i].regnum  r=a[i].regnum
- for(var e=i;e>=0 && a[e].locus==a[i].locus;e--)+ for(var e=i;e>=0 && a[e].locality==a[i].locality;e--) 
 +
 + if(a[e].phylum!="Platyhelminthes"
 + p=false;
  if(a[e].regnum!=a[i].regnum)  if(a[e].regnum!=a[i].regnum)
  {  {
Line 480: Line 895:
  break;  break;
  }  }
 + }
  }  }
 +
  
  switch (r)  switch (r)
  {  {
  case "Animalia":  case "Animalia":
 + {
 + if(p)
 + return ICON_plostenkoid;
  return ICON_animalia;  return ICON_animalia;
 + }
  case "Bacteria":  case "Bacteria":
  return ICON_bacteria;  return ICON_bacteria;
Line 510: Line 931:
  
  var phyarr=[]  var phyarr=[]
- for (var i=0;i<arma.length-1;i++)+ for (var i=0;i<window.arma.length-1;i++)
  {  {
- if(regsel.value==arma[i].regnum && arma[i].phynum!=""+ if(regsel.value==window.arma[i].regnum && window.arma[i].phynum!=""
- phyarr.push(arma[i].phylum)+ phyarr.push(window.arma[i].phylum)
  }  }
  phyarr.sort()  phyarr.sort()
Line 537: Line 958:
  
  var claarr=[]  var claarr=[]
- for (var i=0;i<arma.length-1;i++)+ for (var i=0;i<window.arma.length-1;i++)
  {  {
- if(physel.value==arma[i].phylum && arma.classis!=""+ if(physel.value==window.arma[i].phylum && window.arma.classis!=""
- claarr.push(arma[i].classis)+ claarr.push(window.arma[i].classis)
  }  }
  claarr.sort()  claarr.sort()
Line 562: Line 983:
  spesel.innerHTML="<option>ALL</option>"  spesel.innerHTML="<option>ALL</option>"
  var ordarr=[]  var ordarr=[]
- for (var i=0;i<arma.length-1;i++)+ for (var i=0;i<window.arma.length-1;i++)
  {  {
- if(clasel.value==arma[i].classis && arma[i].ordo!=""+ if(clasel.value==window.arma[i].classis && window.arma[i].ordo!=""
- ordarr.push(arma[i].ordo)+ ordarr.push(window.arma[i].ordo)
  }  }
  ordarr.sort()  ordarr.sort()
Line 586: Line 1007:
  spesel.innerHTML="<option>ALL</option>"  spesel.innerHTML="<option>ALL</option>"
  var famarr=[]  var famarr=[]
- for (var i=0;i<arma.length-1;i++)+ for (var i=0;i<window.arma.length-1;i++)
  {  {
- if(ordsel.value==arma[i].ordo && arma[i].familia!=""+ if(ordsel.value==window.arma[i].ordo && window.arma[i].familia!=""
- famarr.push(arma[i].familia)+ famarr.push(window.arma[i].familia)
  }  }
  famarr.sort()  famarr.sort()
Line 609: Line 1030:
  spesel.innerHTML="<option>ALL</option>"  spesel.innerHTML="<option>ALL</option>"
  var genarr=[]  var genarr=[]
- for (var i=0;i<arma.length-1;i++)+ for (var i=0;i<window.arma.length-1;i++)
  {  {
- if(famsel.value==arma[i].familia && arma[i].genus!=""+ if(famsel.value==window.arma[i].familia && window.arma[i].genus!=""
- genarr.push(arma[i].genus)+ genarr.push(window.arma[i].genus)
  }  }
  genarr.sort()  genarr.sort()
Line 633: Line 1054:
  spesel.innerHTML="<option>ALL</option>"  spesel.innerHTML="<option>ALL</option>"
  var spearr=[]  var spearr=[]
- for (var i=0;i<arma.length-1;i++)+ for (var i=0;i<window.arma.length-1;i++)
  {  {
- if(gensel.value==arma[i].genus && arma[i].specie!=""+ if(gensel.value==window.arma[i].genus && window.arma[i].specie!=""
- spearr.push(arma[i].specie)+ spearr.push(window.arma[i].specie)
  }  }
  spearr.sort()  spearr.sort()
Line 654: Line 1075:
 function armageddon() function armageddon()
 { {
 + console.log("a "+window.arma.length);
  var speval=document.getElementById("spe").value  var speval=document.getElementById("spe").value
  var genval=document.getElementById("gen").value  var genval=document.getElementById("gen").value
Line 665: Line 1087:
  if(speval!="ALL")  if(speval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].specie==speval && arma[i].genus==genval) // Check genus because of unknown "sp." + if(window.arma[i].specie==speval && window.arma[i].genus==genval) // Check genus because of unknown "sp." 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else if(genval!="ALL")  else if(genval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].genus==genval) + if(window.arma[i].genus==genval) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else if(famval!="ALL")  else if(famval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].familia==famval) + if(window.arma[i].familia==famval) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else if(ordval!="ALL")  else if(ordval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].ordo==ordval) + if(window.arma[i].ordo==ordval) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else if(claval!="ALL")  else if(claval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].classis==claval) + if(window.arma[i].classis==claval) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else if(phyval!="ALL")  else if(phyval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].phylum==phyval) + if(window.arma[i].phylum==phyval) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else if(regval!="ALL")  else if(regval!="ALL")
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- if(arma[i].regnum==regval) + if(window.arma[i].regnum==regval) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  else // Regnum: ALL  else // Regnum: ALL
  {  {
- for(var i=0;i<arma.length-1;i++) + for(var i=0;i<window.arma.length-1;i++) 
- a.push(arma[i])+ a.push(window.arma[i])
  }  }
  
Line 717: Line 1139:
 { {
  var p=[]  var p=[]
- for(var i=0;i<arma.length-1;i++)+ for(var i=0;i<window.arma.length-1;i++)
  {  {
- if(arma[i].regnum==""|| + if(window.arma[i].regnum==""|| 
-      arma[i].phylum==""|| +      window.arma[i].phylum==""|| 
-      arma[i].classis==""|| +      window.arma[i].classis==""|| 
-      arma[i].ordo==""|| +      window.arma[i].ordo==""|| 
-      arma[i].familia==""|| +      window.arma[i].familia==""|| 
-      arma[i].genus==""+      window.arma[i].genus==""
-   p.push(arma[i])+   p.push(window.arma[i])
  }  }
  icongeddon(p)  icongeddon(p)
Line 733: Line 1155:
 { {
  var p=[]  var p=[]
- for(var i=0;i<arma.length-1;i++)+ for(var i=0;i<window.arma.length-1;i++)
  {  {
- if(arma[i].phylum=="Platyhelminthes"+ if(window.arma[i].phylum=="Platyhelminthes"
- p.push(arma[i])+ p.push(window.arma[i])
  }  }
  icongeddon(p)  icongeddon(p)
Line 764: Line 1186:
  for(;i<a.length;i++) // -1 fix for last empty entry  for(;i<a.length;i++) // -1 fix for last empty entry
  {  {
 + if(a[i].cluster!=0&&a[i].mainpic!="y") // show only in gallery, without icon in map
 + continue;
 +
  // Pokracujem v hadovi  // Pokracujem v hadovi
- if(a[i].locus == bylo)+ if(a[i].locality == bylo)
  {  {
  sam="";  sam="";
Line 774: Line 1199:
  else  else
  spoj+='<img src=./"'+ICON_biohazard+'" class="hadimg"></a></td>'  spoj+='<img src=./"'+ICON_biohazard+'" class="hadimg"></a></td>'
- spoj+="<td>"+a[i].qualis+"<br>"+a[i].quando+"</td>"+ spoj+="<td>"+a[i].title+"<br>"+a[i].takendate+"</td>"
  spoj+="</tr>"  spoj+="</tr>"
  ox=a[i].x  ox=a[i].x
Line 781: Line 1206:
  }  }
  
- if(a[i].specie=="sp.") + switch(a[i].specie
- wikisp="https://en.wikipedia.org/wiki/"+a[i].genus +
- else + case "sp.": 
- wikisp="https://en.wikipedia.org/wiki/"+a[i].genus+" "+a[i].specie+
 + wikisp="https://en.wikipedia.org/wiki/"+a[i].genus 
 + break; 
 +
 + case "negative": 
 + case "": 
 +
 + wikisp="https://en.wikipedia.org/wiki/Null_result" 
 + break; 
 +
 + default: 
 +
 + wikisp="https://en.wikipedia.org/wiki/"+a[i].genus+" "+a[i].specie 
 + break; 
 +
 +
  
  // Bud prvni zaznam, nebo zmena pozice  // Bud prvni zaznam, nebo zmena pozice
Line 807: Line 1248:
  }  }
  
- bylo=a[i].locus+ bylo=a[i].locality
  spoj='<tr><td><a href="./det/'+a[i].detid+'.htm" target="_blank">'  spoj='<tr><td><a href="./det/'+a[i].detid+'.htm" target="_blank">'
  if(a[i].obr != "")  if(a[i].obr != "")
Line 813: Line 1254:
  else  else
  spoj+='<img src="./'+geticon(a,i)+'" class="hadimg"</a></td>'  spoj+='<img src="./'+geticon(a,i)+'" class="hadimg"</a></td>'
- spoj+='<td>'+a[i].qualis+'<br>'+a[i].quando+'</td>'+ spoj+='<td>'+a[i].title+'<br>'+a[i].takendate+'</td>'
  spoj+="</tr>"  spoj+="</tr>"
  
- + sam='<a href="./det/'+a[i].detid+'.htm" target="_blank"><img src="'+(a[i].genus=='negative'?ICON_negative:'./simg/'+a[i].obr)+'" alt="'+a[i].title+'" class="buttimg"></a>'
- sam='<a href="./det/'+a[i].detid+'.htm" target="_blank"><img src="./simg/'+a[i].obr+'" alt="'+a[i].qualis+'" class="buttimg"></a>'+
  sam+='<br><span class="butttext">'  sam+='<br><span class="butttext">'
- sam+='<b>Qualis:</b> <a href="'+wikisp+'" target="_blank">'+a[i].qualis+'</a><br>'+ sam+='<a href="'+wikisp+'" target="_blank">'+(a[i].title=="negative"?"Negative observation":a[i].title)+'</a><br>'
  if(a[i].imperium != "")  if(a[i].imperium != "")
- sam+='<b>Imperium:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].imperium+'" target="_blank">'+a[i].imperium+'</a><br>'+ sam+='<b>Domain:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].imperium+'" target="_blank">'+a[i].imperium+'</a><br>'
  if(a[i].regnum != "")  if(a[i].regnum != "")
-    sam+='<b>Regnum:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].regnum+'" target="_blank">'+a[i].regnum+'</a><br>'+    sam+='<b>Kingdom:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].regnum+'" target="_blank">'+a[i].regnum+'</a><br>'
  if(a[i].phylum != "")  if(a[i].phylum != "")
  sam+='<b>Phylum:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].phylum+'" target="_blank">'+a[i].phylum+'</a><br>'  sam+='<b>Phylum:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].phylum+'" target="_blank">'+a[i].phylum+'</a><br>'
  if(a[i].classis != "")  if(a[i].classis != "")
- sam+='<b>Classis:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].classis+'" target="_blank">'+a[i].classis+'</a><br>'+ sam+='<b>Class:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].classis+'" target="_blank">'+a[i].classis+'</a><br>'
  if(a[i].ordo != "")  if(a[i].ordo != "")
- sam+='<b>Ordo:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].ordo+'" target="_blank">'+a[i].ordo+'</a><br>'+ sam+='<b>Order:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].ordo+'" target="_blank">'+a[i].ordo+'</a><br>'
  if(a[i].familia != "")  if(a[i].familia != "")
- sam+='<b>Familia:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].familia+'" target="_blank">'+a[i].familia+'</a><br>' + sam+='<b>Family:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].familia+'" target="_blank">'+a[i].familia+'</a><br>' 
- if(a[i].genus != "")+ if(a[i].genus != "" && a[i].genus!="negative")
  sam+='<b>Genus:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].genus+'" target="_blank">'+a[i].genus+'</a><br>'  sam+='<b>Genus:</b> <a href="https://en.wikipedia.org/wiki/'+a[i].genus+'" target="_blank">'+a[i].genus+'</a><br>'
  if(a[i].specie != "")  if(a[i].specie != "")
- sam+='<b>Specie:</b> <a href="'+wikisp+'" target="_blank">'+a[i].specie+'</a><br>' + sam+='<b>Species:</b> <a href="'+wikisp+'" target="_blank">'+a[i].specie+'</a><br>' 
- if(a[i].bio != ""+ if(a[i].biotope != ""
- sam+="<b>Biotope:</b> "+a[i].bio+"<br>" + sam+="<b>Biotope:</b> "+a[i].biotope+"<br>" 
- if(a[i].quando != ""+ if(a[i].pov != ""
- sam+="<b>Quando:</b> "+a[i].quando+"<br>" + sam+="<b>River:</b> "+a[i].pov+"<br>" 
- sam+="<b>Locus:</b> "+a[i].locus+" ("+a[i].locplain+")<br>" + if(a[i].temperature != ""
- if(a[i].spec != ""+ sam+="<b>Temperature:</b> "+a[i].temperature+" °C<br>" 
-  sam+="<b>Spectator:</b> "+a[i].spec+"<br>"+ if(a[i].pov != ""
 + sam+="<b>Conductivity:</b> "+a[i].conductivity+" mSv<br>" 
 + if(a[i].pov != ""
 + sam+="<b>pH:</b> "+a[i].ph+"<br>" 
 + 
 + 
 + 
 + if(a[i].takendate != ""
 + sam+="<b>Date:</b> "+a[i].takendate+"<br>" 
 + sam+="<b>Location:</b> "+a[i].locality+" ("+a[i].locplain+")<br>" 
 + if(a[i].observer != ""
 +  sam+="<b>Spectator:</b> "+a[i].observer+"<br>"
  if(a[i].micro != "")  if(a[i].micro != "")
- sam+="<b>Microscopium:</b> "+a[i].micro+" ("+a[i].microtyp+")<br>" + sam+="<b>Microscope:</b> "+a[i].micro+" ("+a[i].microtyp+")<br>" 
- if(a[i].amp != ""+ if(a[i].enlargement != ""
- sam+="<b>Amplificatio:</b> "+a[i].amp+"<br>"+ sam+="<b>Amplification:</b> "+a[i].enlargement+"<br>"
  /* if [[ "$des" != "" ]]; then  /* if [[ "$des" != "" ]]; then
  #   sam="$sam<b>Depictio:</b> $des<br>"  #   sam="$sam<b>Depictio:</b> $des<br>"
  # fi */  # fi */
- if(a[i].vid != ""+ //if(a[i].videolink != ""
- sam+='<b>Video:</b> <a href="'+a[i].vid+'" target="_blank">'+a[i].vid+'</a><br>'+ // sam+='<b>Video:</b> <a href="'+a[i].videolink+'" target="_blank">'+a[i].videolink+'</a><br>'
  sam+="</span>"  sam+="</span>"
  
Line 868: Line 1319:
 } // Konec armageddonu } // Konec armageddonu
  
-var laycon = [vectorLayer,vectorLayerDynamic];+//var laycon = [vectorLayer,vectorLayerPonygon,vectorLayerDynamic,studlay]; 
 +var laycon = [vectorLayer,vectorLayerDynamic,studlay];
  
 var controls = {selector: new OpenLayers.Control.SelectFeature(laycon, { onSelect: createPopup, onUnselect: destroyPopup })}; var controls = {selector: new OpenLayers.Control.SelectFeature(laycon, { onSelect: createPopup, onUnselect: destroyPopup })};
Line 893: Line 1345:
 } }
  
-// Run armageddon on initial load + 
-armageddon()+// Vyhledavani 
 +function limit() 
 +
 + srch=document.getElementById("srch").value.toLowerCase(); 
 + var p=[] 
 + for(var i=0;i<window.arma.length-1;i++) 
 +
 + if(window.arma[i].title.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].imperium.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].regnum.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].phylum.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].classis.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].ordo.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].familia.toLowerCase().indexOf(srch)>=0|| 
 +    //window.arma[i].genus.toLowerCase().indexOf(srch)>=0|| // v "qualis" 
 +    //window.arma[i].observerie.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].locplain.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].description.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].takendate.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].micro.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].microtyp.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].biotope.toLowerCase().indexOf(srch)>=0|| 
 +    window.arma[i].pov.toLowerCase().indexOf(srch)>=0) 
 +   p.push(arma[i]) 
 +
 + icongeddon(p) 
 +
 + 
 + 
 +// ====== GEOJSON ====== 
 + 
 +var metageo=JSON.parse("{}"); 
 +var geje=[]; 
 +var gejbarva=""; 
 + 
 +function placegeo(coor,gejbarva) 
 +
 + var geja=new Array; 
 + epsg4326 =  new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection 
 + projectTo = map.getProjectionObject(); 
 + 
 + for(i=0;i<coor.length;i++) 
 +
 + geja.push(new OpenLayers.Geometry.Point(coor[i][0],coor[i][1]).transform(epsg4326, projectTo)) 
 +
 +/* "default" namespaces work for Layers, not Features 
 + var lajna=new OpenLayers.StyleMap({ 
 +     "default": new OpenLayers.Style({ 
 +        //strokeColor: "#FF0000", 
 +        strokeColor: gejbarva, 
 +        strokeOpacity: 1, 
 +        strokeWidth: 5, 
 +        pointRadius: 6, 
 +     }), 
 +     "select": new OpenLayers.Style({ 
 +       //strokeColor: "#0000FF", 
 +       strokeColor: gejbarva, 
 +       strokeOpacity: 1, 
 +       strokeWidth: 5, 
 +       pointRadius: 6, 
 +     }) 
 + }); */ 
 + var lajna={ // Feature without the namespaces 
 +        strokeColor: gejbarva, 
 +        strokeOpacity: 1, 
 +        strokeWidth: 5, 
 +        pointRadius: 6, 
 + }; 
 + 
 + gejs=new OpenLayers.Geometry.LineString(geja); 
 + vectorLayerPonygon.addFeatures([new OpenLayers.Feature.Vector(gejs,{},lajna)]); 
 +
 + 
 +function getsld(url,s,g) 
 +
 + var request; 
 + if(window.XMLHttpRequest) 
 + request=new XMLHttpRequest(); 
 + else 
 + request=new ActiveXObject("Microsoft.XMLHTTP"); 
 + request.overrideMimeType("text/plain"); 
 + request.onreadystatechange=function() 
 +
 + if(request.readyState==4) 
 +
 + tmpc=request.responseText; 
 + tmpc=tmpc.match(/SvgParameter name="stroke">#[0-9a-fA-F]*<\/se:SvgParameter/)[0].match(/#[0-9a-fA-F]*/)[0]; 
 + getgeo(url,g,tmpc); 
 + //console.log(tmpc); 
 +
 +
 + request.open("GET",url+s,true); 
 + request.send(); 
 +
 + 
 + 
 +function getgeo(url,g,c) 
 +
 + var request; 
 + if(window.XMLHttpRequest) 
 + request=new XMLHttpRequest(); 
 + else 
 + request=new ActiveXObject("Microsoft.XMLHTTP"); 
 + request.overrideMimeType("application/geo+json"); 
 + request.onreadystatechange=function() 
 +
 + if(request.readyState==4) 
 +
 + tmpg=JSON.parse(request.responseText); 
 + for(var e=0;e<tmpg.features.length;e++) 
 +
 + if(typeof tmpg.features[e].properties === 'undefined') // || tmpg.features[e].properties.osm_type!="way"
 + continue; 
 + 
 + for(var i=0;i<tmpg.features[e].geometry.coordinates.length;i++) 
 +
 + for(var j=0;j<tmpg.features[e].geometry.coordinates[i].length;j++) 
 +
 + if(tmpg.features[e].geometry.coordinates[i][j].length<2) 
 + continue; 
 + //console.log(tmpg.features[e].properties.osm_type+" "+tmpg.features[e].geometry.coordinates[i][j].length); 
 + placegeo(tmpg.features[e].geometry.coordinates[i][j],c); 
 +
 +
 +
 +
 +
 + request.open("GET",url+g,true); 
 + request.send(); 
 +
 + 
 +// ENTRY POINT 
 +// parametr je ./ adresar ve kterem je metadata.json S LOMITKEM NA KONCI 
 +function drawgeojson(url) 
 +
 + var request; 
 + if(window.XMLHttpRequest) 
 + request=new XMLHttpRequest(); 
 + else 
 + request=new ActiveXObject("Microsoft.XMLHTTP"); 
 + request.onreadystatechange=function() 
 +
 + if(request.readyState==4) 
 +
 + window.metageo=JSON.parse(request.responseText); 
 + for(var i=0;i<metageo.layers.length;i++) 
 +
 + //console.log(metageo.layers[i].geojson); 
 + getsld(url,metageo.layers[i].sld,metageo.layers[i].geojson) 
 +
 +
 +
 + request.open("GET",url+"metadata.json",true); 
 + request.send(); 
 +
 </code> </code>
  
-==== Taxonomie dle rodoveho jmena ====+==== Springs ====
  
-Script bere jako jediny parametr rodove jmeno z wikipedie vyparsuje zbytek taxonomie+To be able to better plan routes for collecting planarians, the knowledge of locations of springs seems to be important. So BioOSM can show them! Below is script to get the locations from OSM XMLs obtainable from [[http://osm.kyblsoft.cz/archiv/]]. 
-<code bash tax.sh>+ 
 +<code bash studanky.sh>
 #!/bin/bash #!/bin/bash
 +# generate BioOSM compatible "springs"
 +# Usage: studanky.sh osmdump.xml
 +
 +# Download OSM file to be passed as $1
 +# wget "http://osm.kyblsoft.cz/archiv/czech_republic-2019-11-03.osm.gz"
 +# gzip -kd ./czech_republic-2019-11-03.osm.gz
 +#
 +# Pozor ^^ sezere spoustu rameti
 +#
 +
 +osm=$(cat "$1" | sed -e 's/<node/\'$'\a<node/g' -e 's/<\/node>/<\/node\'$'\a/g' -e 's/<way/\'$'\a<way/g' -e 's/<\/way>/<\/way>\'$'\a/g' -e 's/<relation/\'$'\a<relation/g' -e 's/<\/relation>/<\/relation>\'$'\a/g' | tr -d '\n' | tr '\a' '\n' | grep 'v="spring"' | grep 'k="natural"')
 +
 +json='{"version":"'$(date --rfc-3339=seconds)'","std":['
 +
 +while IFS='' read -r spr || [[ -n "$spr" ]]; do
 + n=$(echo "$spr" | grep -oPe 'k="name" v="[^"]*"' | sed -e 's/k="name" v="//g' -e 's/"$//g')
 + lat=$(echo "$spr" | grep -oPe ' lat="[^"]*"' | sed -e 's/ lat="//g' -e 's/"$//g')
 + lon=$(echo "$spr" | grep -oPe ' lon="[^"]*"' | sed -e 's/ lon="//g' -e 's/"$//g')
 +
 + if [ "$lat" = "" ] || [ "$lon" = "" ]; then
 + continue; # <way> a tak
 + fi
 + if [[ "$n" = "" ]]; then
 + n="inkognito"
 + >&2 echo -e "\033[34m $lat $lon \033[0m";
 + fi
 +
 + json+="{"
 + json+=" \"name\":\"$n\","
 + json+=" \"lon\":\"$lon\","
 + json+=" \"lat\":\"$lat\""
 + json+="},"
 +
 + >&2 echo -e "\033[32m $n $lat $lon\033[0m"
 +
 +done <<< $(echo "$osm")
 +
 +echo "$json{}]}"
 +</code>
 +
 +=== LocalityID ===
 +<code bash ajdy.sh>
 +#!/bin/bash
 +
 +T=$(mktemp)
 +unzip -p "$1" tellico.xml | tr -d '\n' | sed -e $'s/<entry id="/\\\n<entry id="/g' -e $'s/<\/entry>/<\/entry>\\\n/g' > "$T"
 +
 +
 +hf=$(cat "$T" | grep -Pe '^<entry id="' | grep '<hasflatworms>yep</hasflatworms>')
 +# nejvyssi dosazene ID
 +mid=$(cat "$T" | grep -Pe '^<entry id="' | grep -oe ' <localityid>.*</localityid> ' | grep -oPe '[0-9]+' | sort | tail -n 1)
 +mid=$(($mid+1))
 +
 +
 +function ll()
 +{
 + while IFS='' read -r r || [[ -n "$r" ]]; do
 + t=$(echo "$r" | grep -oe ' <taken-date>.*</taken-date> ' | sed -E 's/( )*<(\/)?taken-date>( )*//g' | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]{4})/\3-\2-\1/g' | sed -E 's/-([0-9])-/-0\1-/g' | sed -E 's/-([0-9])$/-0\1/g')
 + l=$(echo "$r" | grep -oe '<locality>.*</locality>' | grep -oPe '[0-9]+\.[0-9]+[, ]*[0-9]+\.[0-9]+')
 + echo "$t@$l"
 + done <<< $(echo "$1")
 +}
 +
 +srt=$(ll "$hf" | sort -u)
 +
 +uid=$mid
 +while IFS='' read -r r || [[ -n "$r" ]]; do
 + l=$(echo "$r" | grep -oPe '@.*$' | tr -d '@')
 + lid=$(cat "$T" | grep  " <locality>$l</locality> " | grep -oe ' <localityid>.*</localityid> ' | grep -oPe '[0-9]+')
 + if [[ "$lid" = "" ]]; then
 +
 + sedexp="s/( <locality>$l<\/locality> .*<hasflatworms>yep<\/hasflatworms> )/ \\1 <localityid>$uid<\/localityid> /g"
 + #echo "$sedexp"
 + sed -E "$sedexp" -i "$T"
 + uid=$(($uid+1))
 + fi
 +done <<< $(echo "$srt")
  
-wat=$(wget -q -O - "https://en.wikipedia.org/wiki/Template:Taxonomy/$12>/dev/null | tr -d '\n' | sed -e $'s/<\/tr>/<\/tr>\\n/g' | grep "<tr>| sed -e 's/<[^>]*>//g' | grep -o -e "^[a-zA-Z]*:[a-zA-Z]*")+D=$(mktemp -d) 
 +cp -f "$T"$D/tellico.xml" 
 +zip -j "./micro_new.tc" "$D/tellico.xml"
  
-echo $(echo "$wat| grep "Domain:") +rm -rfv "$T
-echo $(echo "$wat" | grep "Kingdom:"+rm -rfv "$D"
-echo $(echo "$wat" | grep "Phylum:"+
-echo $(echo "$wat" | grep "Class:"+
-echo $(echo "$wat" | grep "Order:"+
-echo $(echo "$wat" | grep "Family:"+
-echo $(echo "$wat" | grep "Genus:")+
 </code> </code>
project/bioosm/start.1535410549.txt.gz · Last modified: 2018/08/27 22:55 by sachy