關閉      標題:dem grd hdr 轉 tiff mapserver 發地形圖
內容:

開放資料 from : 
https://www.tgos.tw/MDE/MetaData/CRUD/ViewMetaData?GUID=72047ba9-c161-442e-b641-904220c740b4&VIEW_TYPE=only&SOURCE=1

<?php
// grd_to_tif.php


 function my_pathinfo($path)
 {

  $dirname = '';
  $basename = '';
  $extension = '';
  $filename = '';


  $pos = strrpos($path, '/'); 

  if($pos !== false) {
   $dirname = substr($path, 0, strrpos($path, '/'));
   $basename = substr($path, strrpos($path, '/') + 1);
  } else {
   $basename = $path;
  }


  $ext = strrchr($path, '.'); 
  if($ext !== false) {
   $extension = substr($ext, 1);
  }

  $filename = $basename;
  $pos = strrpos($basename, '.');
  if($pos !== false) {
   $filename = substr($basename, 0, $pos); 
  }

  return array (
   'dirname' => $dirname,
   'basename' => $basename,
   'extension' => $extension,
   'filename' => $filename
  );
 } 
  
  function subname($fname){
    //$pathinfo=pathinfo($fname);
    //$pathinfo['extension'];
    
    $m=explode(".",$fname);
    return end($m);
  } 
  function mainname($fname){
    $pathinfo=my_pathinfo($fname);
    //print_r($pathinfo);
    //exit();
    return $pathinfo['filename'];           
  }
  
  
  $fp = glob("*.grd");
  // grd -> csv
  $max_k = count($fp);
  foreach($fp as $k=> $v){
	  $bn = basename($v);
	  $mn = mainname($v);
	  /*$csv_outputfile = "{$mn}.csv";
	  $data = "X,Y,Z\n";
	  $grd_data = str_replace(" ",",",trim(str_replace("\r","",file_get_contents($v))));
	  file_put_contents($csv_outputfile,$data.$grd_data);
	  */
	  
	  /*
	  // 然後建 vrt
	  $vrt_outputfile = "{$mn}.vrt";
	  $vrt_template = <<<EOF
<OGRVRTDataSource>
  <OGRVRTLayer name="dem">
    <SrcDataSource>{$bn}</SrcDataSource>
    <GeometryType>wkbPoint</GeometryType>
    <LayerSRS>EPSG:3826</LayerSRS>
    <GeometryField encoding="PointFromColumns" x="X" y="Y" z="Z"/>
  </OGRVRTLayer>
</OGRVRTDataSource>
EOF;	  
	  file_put_contents($vrt_outputfile,$vrt_template);
	  */
	  // 然後 csv 轉 gpkg 
	  //$CMD = "ogr2ogr -f GPKG {$mn}.gpkg {$mn}.csv -oo AUTODETECT_TYPE=YES -oo X_POSSIBLE_NAMES=field_1 -oo Y_POSSIBLE_NAMES=field_2 -oo Z_POSSIBLE_NAMES=field_3 -a_srs EPSG:3826";
	  //`{$CMD}`;
	  
	  // 直接轉 grd 轉 tif
	  if(!is_file("{$mn}.tif")){
	    $CMD = "gdal_translate -of GTiff -a_srs EPSG:3826 {$v} {$mn}.tif";
	    `{$CMD}`;
	  }
	  echo sprintf("%d / %d ...\n" , ($k+1),$max_k);
	  	  
	  // 用 wrap 重寫一份 #-t_srs EPSG:3826 
	  if(!is_file("{$mn}_fix.tif")){
		$CMD = "gdalwarp -r near -dstnodata -32768 {$mn}.tif {$mn}_fix.tif";
		`{$CMD}`;
	  }
  }
  
  if(is_file("all.vrt")){
	  unlink("all.vrt");
  }
  if(is_file("contour_20m.gpkg")){
	  unlink("contour_20m.gpkg");
  }
  if(is_file("8429.db")){
	  unlink("8429.db");
  }  
  
  // 合併 成 all.vrt
  $CMD = "dir /b *_fix.tif > list.txt";
  `{$CMD}`;
  

  $CMD = "gdalbuildvrt -input_file_list list.txt all.vrt";
  `{$CMD}`;
  
  
  // 輸出等高線圖
  $CMD = "gdal_contour -i 20 -a elev all.vrt contour_20m.gpkg";
  `{$CMD}`;
  

  
  // 轉出 db
  $CMD = "ogr2ogr -f SQLITE 8429_raw.db contour_20m.gpkg -s_srs EPSG:3826 -t_srs EPSG:4326 -nln 8429 -lco GEOMETRY_NAME=GEOMETRY -dialect sqlite -sql \"SELECT ID AS ogc_fid, elev, GEOM AS `GEOMETRY` FROM contour\" ";
  `{$CMD}`;


然後 mapfile 
MAP
  CONFIG PROJ_LIB "/usr/share/proj"
  #CONFIG "PROJ_LIB" "proj"  
  EXTENT 120.457535 23.997763 121.458756 24.448916
  FONTSET "/var/www/html/easymap_server/inc/..//fonts/font/fonts.txt"
  IMAGETYPE "PNG"
  NAME "8429"
  MAXSIZE 8192
  SIZE 1920 1080
  STATUS ON
  UNITS METERS
  #CONFIG  "MS_ERRORFILE" "c:\ms4w_MSSQL\Apache\cgi-bin\easymap_server\log\8429.log"
  #debug 5  
  ###GEOTIFFONLY_IMAGECOLOR###
  ###GEOTIFFONLY_TRANSPARENT###
  WEB
    METADATA
      "wms_srs"	"EPSG:3826 EPSG:4326 EPSG:3825 EPSG:3827 EPSG:3828 EPSG:3857 EPSG:900913"
      "wms_onlineresource" "https://3wa.tw/easymap_server/wms.php?id=8429&"
      "wms_enable_request" "*"                  
      "wms_getcapabilities_version"	"1.1.1"
      "wms_resx"	"1.0"
      "wms_resy"	"1.0"
      "wms_encoding"	"UTF-8"
      "wms_title"	"MOI WMS"
      "tile_map_edge_buffer" "10"
      "tile_metatile_level" "0"


      # WFS Metadata
      "wfs_title" "MOI WFS"
      "wfs_onlineresource" "https://3wa.tw/easymap_server/wfs.php?id=8429&"
      "wfs_srs" "EPSG:4326 EPSG:3826 EPSG:3825 EPSG:3827 EPSG:3828 EPSG:3857 EPSG:900913 CRS:84"
      "wfs_enable_request" "*"  
    END # METADATA
  END # WEB

  OUTPUTFORMAT
    NAME "PNG"
    MIMETYPE "image/png"
    DRIVER "AGG/PNG"
    EXTENSION "png"
    IMAGEMODE RGBA
    TRANSPARENT TRUE
  END # OUTPUTFORMAT
  
  OUTPUTFORMAT
    NAME "geojson"
    DRIVER "OGR/GEOJSON"
    MIMETYPE "application/json; subtype=geojson"
    FORMATOPTION "STORAGE=stream"
    FORMATOPTION "FORM=SIMPLE"
  END
  
  OUTPUTFORMAT
    NAME "XML"
    DRIVER "OGR/GML"
    MIMETYPE "text/xml"
    FORMATOPTION "STORAGE=memory"
  END # OUTPUTFORMAT

    
  OUTPUTFORMAT
    NAME "text/xml"
    DRIVER "OGR/GML"
    MIMETYPE "text/xml"
    FORMATOPTION "STORAGE=memory"
  END # OUTPUTFORMAT

  PROJECTION
    "init=EPSG:4326"
  END # PROJECTION  

############## CUSTOM START ###############
############## CUSTOM END ###############
  
############## STYLE START ###############
  LEGEND
    KEYSIZE 20 10
    KEYSPACING 5 5
    LABEL
      SIZE 10
      OFFSET 0 0
      SHADOWSIZE 1 1
    END # LABEL
    STATUS ON
  END # LEGEND

  QUERYMAP   
    SIZE -1 -1
    STATUS ON
    STYLE HILITE
  END # QUERYMAP

  SCALEBAR
    INTERVALS 4
    LABEL
      SIZE 10
      OFFSET 0 0
      SHADOWSIZE 1 1
    END # LABEL
    SIZE 200 3
    STATUS OFF
    UNITS METERS
  END # SCALEBAR
    SYMBOL
     NAME "circle"
     TYPE ellipse
     POINTS
       1 1
     END
   END
############## STYLE END ###############

############## 實心圓 START ###############
SYMBOL
  NAME "solid_circle"
  TYPE ellipse
  FILLED true
  POINTS 1 1 END
END
############## 實心圓 END ###############

############## 特殊樣式們 START ########################################
############## 空心方塊 START ###############
SYMBOL
  NAME "square"
  TYPE vector
  FILLED false
  POINTS
    0 0
    1 0
    1 1
    0 1
    0 0
  END
END
############## 空心方塊 END ###############
############## 實心方塊 START ###############
SYMBOL
  NAME "solid_square"
  TYPE vector
  FILLED true
  POINTS
    0 0
    1 0
    1 1
    0 1
    0 0
  END
END
############## 實心方塊 END ###############
############## X字 START ###############
SYMBOL
  NAME "kreuz1" # X字形
  TYPE VECTOR
  POINTS
    0 0
    0 1
    0 -1     
    0 0
    -1 0
    1 0
  END
END
############## X字 END ###############
############## 十 START ###############
SYMBOL
  NAME "kreuz2" # 十
  TYPE VECTOR
  POINTS
    0 0
    1 1
    -99 -99
    0 1
    1 0
  END
END
############## 十 END ###############
############## dot START ###############
SYMBOL
  NAME "dot1" # . 字形
  TYPE ellipse 
  POINTS 
    1 1
  END
  FILLED true
  ANCHORPOINT 0.5 0.5
END
############## dot END ###############
############## 特殊樣式們 END ########################################
  


############## POLYLINE START ###############  
  LAYER
    CONNECTION "/var/www/html/easymap_server/inc/..//uploads/8429/8429.db"
    CONNECTIONTYPE OGR
    DATA "8429"
    NAME "lines"
    STATUS ON

    TYPE LINE
    UNITS METERS

    # 你要顯示的欄位:改成你真正想顯示的欄位名
    LABELITEM "elev"

    # 讓線的 label 不要沿線旋轉(固定水平)
    # 若你想沿線:把 ANGLE 0 改成 FOLLOW
    CLASS
      STYLE
        ANTIALIAS TRUE
        COLOR 0 0 0
        WIDTH 0.5
        LINECAP round
        LINEJOIN round
      END

      LABEL
        TYPE TRUETYPE
        FONT "arial"
        SIZE 12

        COLOR 0 0 0
        OUTLINECOLOR 255 255 255
        OUTLINEWIDTH 2

        # 固定水平顯示(不繞線)
        ANGLE 0

        # 不要太密:同一條線上重複標註的距離(地圖單位)
        REPEATDISTANCE 1200

        # 標籤彼此至少距離(地圖單位)
        MINDISTANCE 400

        # 太短的線不要標
        MINFEATURESIZE 80

        # 避免切到邊界只剩半個字
        PARTIALS FALSE

        # 往上偏一點,避免壓在線上
        OFFSET 0 0

        POSITION AUTO
      END
    END

    # 拉很遠不顯示文字(你可調整門檻)
    # 比例尺「大於」此值時(更遠)就不畫 label
    LABELMAXSCALEDENOM 200000

    METADATA
      "wfs_title" "WFS POLYLINE Layer"
      "wfs_srs" "EPSG:4326 EPSG:3826 EPSG:3825 EPSG:3827 EPSG:3828 EPSG:3857 EPSG:900913 CRS:84"
      "wfs_enable_request" "*"
      "wfs_getfeature_formatlist" "GML2,GML3,XML,geojson"
    END
  END # LAYER
############## POLYLINE END ###############




END # MAP