genpng2.sh 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/bin/sh
  2. #echo executed ${0} {$1} ${2} ${3} ${4}
  3. #echo path $PATH
  4. SIZE=800 # szerokosc i wysokosc obrazka
  5. DPI=120 # rozdzielczosc w DITA - nie ruszac
  6. SCALE=500 # domyslna skala
  7. BORDER=5 # liczba metrow, o ktora nalezy powiekszyc zasieg z kazdej strony wzgledem danych wejsciowych
  8. BORDER_CUT="5"
  9. IMAGE_FILE="${PWD}/image" # nazwa plikow obrazow wraz ze sciezka - sam prefix (zostana dodane oznaczenia wspolrzednych kafelkow oraz dodane rozszerzenie)
  10. XML_FILE="${PWD}/images.xml" # nazwa wynikowego pliku XML wraz ze sciezka
  11. FONT_DIR="${PWD}/fonts"
  12. MAP_SCHEMA_DIR="./map_schema"
  13. MAP_SCHEMA_HEAD="${MAP_SCHEMA_DIR}/head.map.inc"
  14. MAP_SCHEMA_TAIL="${MAP_SCHEMA_DIR}/tail.map.inc"
  15. MAP_SCHEMA_GML="${MAP_SCHEMA_DIR}/gml_layer.map.inc"
  16. MAP_SCHEMA_WMS="${MAP_SCHEMA_DIR}/wms_layer.map.inc"
  17. error() {
  18. echo '<?xml version="1.0" encoding="UTF-8"?>'
  19. echo "<Error>${1}</Error>"
  20. exit 1
  21. }
  22. usage() {
  23. cat >&2 << EOT
  24. Usage: ${0} -g|--gml FILE [OPTION]...
  25. FILE - GML input file
  26. Options:
  27. -s, --scale SCALE Scale, defult 500 (means 1:500)
  28. -b, --border METERS Size of border in meters that will be added
  29. around GML data (default 5)
  30. -cb, --cut-border METERS Size of additional border in meters
  31. while splitting image (default 5)
  32. -w, --wms WMS_LAYER[s] URLs and layer names (as following arguments)
  33. of external WMS layers (URL|LAYER_NAME)
  34. Example:
  35. ${0} -g gml/projekt_3625.gml -s 500 -w "https://biuro.biall-net.pl/wms/rastry|Przywidz_Jesionowa" \\
  36. "https://biuro.biall-net.pl/wms/podklady|MDCP_Przywidz_osiedle_jesionowa_lin" \\
  37. "https://biuro.biall-net.pl/wms/podklady|MDCP_Przywidz_osiedle_jesionowa_textx"
  38. EOT
  39. exit 1
  40. }
  41. declare -a WMS=()
  42. while [ "${1}" ]; do
  43. case ${1} in
  44. "-s"|"--scale")
  45. PARAM="scale"
  46. ;;
  47. "-b"|"--border")
  48. PARAM="border"
  49. ;;
  50. "-cb"|"--cut-border")
  51. PARAM="cut_border"
  52. ;;
  53. "-g"|"--gml")
  54. PARAM="gml"
  55. ;;
  56. "-w"|"--wms")
  57. PARAM="wms"
  58. ;;
  59. *)
  60. case ${PARAM} in
  61. "scale")
  62. SCALE=${1}
  63. ;;
  64. "border")
  65. BORDER=${1}
  66. ;;
  67. "cut_border")
  68. CUT_BORDER={1}
  69. ;;
  70. "gml")
  71. FILE=${1}
  72. ;;
  73. "wms")
  74. WMS+=("${1}")
  75. ;;
  76. *)
  77. usage
  78. ;;
  79. esac
  80. esac
  81. shift
  82. done
  83. if [ -z "${FILE}" ]; then
  84. usage
  85. fi
  86. if [ ! -e ${FILE} ]; then
  87. error "File ${FILE} not found."
  88. fi
  89. TMP=`mktemp -d`
  90. size=`echo "${SIZE}/${DPI}*2.54*${SCALE}/100" | bc -l`
  91. size_cut=`echo "${size} - ${BORDER_CUT}" | bc -l`
  92. ogr2ogr -t_srs EPSG:2177 ${TMP}/2177.shp ${FILE} 2>/dev/null
  93. extent=(`ogrinfo -al -so ${TMP}/2177.shp | grep Extent | sed 's/[()]/|/g;s/, /|/g' | awk -F '|' '{print $2,$3,$5,$6}'`)
  94. xmin=${extent[0]}
  95. ymin=${extent[1]}
  96. xmax=${extent[2]}
  97. ymax=${extent[3]}
  98. echo "Project extent: ${xmin} ${ymin} ${xmax} ${ymax}"
  99. xmin=`echo "${xmin} - 5" | bc -l`
  100. ymin=`echo "${ymin} - 5" | bc -l`
  101. xmax=`echo "${xmax} + 5" | bc -l`
  102. ymax=`echo "${ymax} + 5" | bc -l`
  103. echo "New extent after 5m border added: ${xmin} ${ymin} ${xmax} ${ymax}"
  104. lx=`echo "(${xmax} - ${xmin} - ${BORDER_CUT}) / ${size_cut} + ((${xmax} - ${xmin} - ${BORDER_CUT}) % ${size_cut} > 0)" | bc`
  105. ly=`echo "(${ymax} - ${ymin} - ${BORDER_CUT}) / ${size_cut} + ((${ymax} - ${ymin} - ${BORDER_CUT}) % ${size_cut} > 0)" | bc`
  106. echo "Images count (width x height): ${lx}x${ly}"
  107. xmin=`echo "${xmin} - (${lx} * ${size_cut} + ${BORDER_CUT} - (${xmax} - ${xmin})) / 2" | bc -l`
  108. ymin=`echo "${ymin} - (${ly} * ${size_cut} + ${BORDER_CUT} - (${ymax} - ${ymin})) / 2" | bc -l`
  109. xmax=`echo "${xmin} + ${lx} * ${size_cut} + ${BORDER_CUT}" | bc -l`
  110. ymax=`echo "${ymin} + ${ly} * ${size_cut} + ${BORDER_CUT}" | bc -l`
  111. echo "New extent after centering project features: ${xmin} ${ymin} ${xmax} ${ymax}"
  112. MAP="${TMP}/map.map"
  113. EXTENT="${xmin} ${ymin} ${xmax} ${ymax}"
  114. sed "s/__EXTENT__/${EXTENT}/g;s|__FONT_DIR__|${FONT_DIR}|g" ${MAP_SCHEMA_HEAD} > ${MAP}
  115. if [ ${#WMS[@]} -gt 0 ]; then
  116. for i in `seq 0 $[${#WMS[@]}-1]`; do
  117. URL=`echo ${WMS[i]} | cut -d '|' -f 1`
  118. LAYER_NAME=`echo ${WMS[i]} | cut -d '|' -f 2`
  119. sed "s|__URL__|${URL}|g;s|__EXTENT__|${EXTENT}|g;s|__LAYER_NAME__|${LAYER_NAME}|g" ${MAP_SCHEMA_WMS} >> ${MAP}
  120. done
  121. fi
  122. sed "s|__GML_FILE__|${FILE}|g" ${MAP_SCHEMA_GML} >> ${MAP}
  123. cat ${MAP_SCHEMA_TAIL} >> ${MAP}
  124. echo '<?xml version="1.0" encoding="UTF-8"?>
  125. <images>' > ${XML_FILE}
  126. for y in `seq 1 ${ly}`; do
  127. for x in `seq 1 ${lx}`; do
  128. printf "Generating ${x}x${y} "
  129. lxmin=`echo "${xmin} + ${size_cut} * (${x} -1)" | bc -l`
  130. lymin=`echo "${ymin} + ${size_cut} * (${y} -1)" | bc -l`
  131. lxmax=`echo "${lxmin} + ${size}" | bc -l`
  132. lymax=`echo "${lymin} + ${size}" | bc -l`
  133. printf "(BBOX: ${lxmin} ${lymin} ${lxmax} ${lymax})..."
  134. file="${IMAGE_FILE}-${y}-${x}.png"
  135. count=`ogrinfo -so -al -spat ${lxmin} ${lymin} ${lxmax} ${lymax} ${TMP}/2177.shp | grep "Feature Count:" | sed 's/.*: //g'`
  136. if [ ${count} -gt 0 ]; then
  137. echo "<image x=\"${x}\" y=\"${y}\">" >> ${XML_FILE}
  138. echo " <xmin>${lxmin}</xmin>" >> ${XML_FILE}
  139. echo " <ymin>${lymin}</ymin>" >> ${XML_FILE}
  140. echo " <xmax>${lxmax}</xmax>" >> ${XML_FILE}
  141. echo " <ymax>${lymax}</ymax>" >> ${XML_FILE}
  142. echo " <file>${file}</file>" >> ${XML_FILE}
  143. echo "</image>" >> ${XML_FILE}
  144. shp2img -m "${MAP}" -o ${file} -e ${lxmin} ${lymin} ${lxmax} ${lymax}
  145. echo " done."
  146. else
  147. echo " no features found - skipping."
  148. fi
  149. done
  150. done
  151. echo '</images>' >> ${XML_FILE}
  152. echo "===== XML (${XML_FILE}) ====="
  153. cat ${XML_FILE}
  154. rm -rf ${TMP}