|
@@ -70,9 +70,6 @@ class Route_UrlAction_WmsGenerate extends RouteBase {
|
|
|
SE_Layout::dol();
|
|
SE_Layout::dol();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private function mapGenerate() {
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
public function doGenerate() {
|
|
public function doGenerate() {
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
@@ -80,10 +77,10 @@ class Route_UrlAction_WmsGenerate extends RouteBase {
|
|
|
$moduleActive=DB::getPDO()->fetchall("select count(*) as cnt from CRM_CONFIG where CONF_KEY='module_WMS' and CONF_VAL='on'");
|
|
$moduleActive=DB::getPDO()->fetchall("select count(*) as cnt from CRM_CONFIG where CONF_KEY='module_WMS' and CONF_VAL='on'");
|
|
|
if (!$moduleActive[0]['cnt']) throw new Exception("Module WMS disabled/not installed.");
|
|
if (!$moduleActive[0]['cnt']) throw new Exception("Module WMS disabled/not installed.");
|
|
|
|
|
|
|
|
- ### Znalezienie nowo przetworzonych rastrow i ew. oznaczenie map do wygenerowania
|
|
|
|
|
|
|
+ ### Znalezienie nowo przetworzonych warstw i utworzenie pojedynczych map do mapserver
|
|
|
$wmsDirLocation=$this->getMainDirectory();
|
|
$wmsDirLocation=$this->getMainDirectory();
|
|
|
- if (!file_exists($wmsDirLocation.'/.maps/single')) mkdir($wmsDirLocation.'/.maps/single',0755,true);
|
|
|
|
|
- if (!file_exists($wmsDirLocation.'/.maps/single')) throw new Exception('Error during creating maps directory.');
|
|
|
|
|
|
|
+ if (!file_exists($wmsDirLocation.'/.maps/.single')) mkdir($wmsDirLocation.'/.maps/.single',0755,true);
|
|
|
|
|
+ if (!file_exists($wmsDirLocation.'/.maps/.single')) throw new Exception('Error during creating maps directory.');
|
|
|
|
|
|
|
|
$mapSchema='MAP
|
|
$mapSchema='MAP
|
|
|
|
|
|
|
@@ -99,7 +96,7 @@ class Route_UrlAction_WmsGenerate extends RouteBase {
|
|
|
METADATA
|
|
METADATA
|
|
|
WMS_TITLE "__NAME__"
|
|
WMS_TITLE "__NAME__"
|
|
|
WMS_ENABLE_REQUEST "*"
|
|
WMS_ENABLE_REQUEST "*"
|
|
|
- WMS_ONLINERESOURCE "https://__SERVER_NAME__/wms/single/__ID__"
|
|
|
|
|
|
|
+ WMS_ONLINERESOURCE "https://__SERVER_NAME__/wms/.single/__ID__"
|
|
|
WMS_SRS "EPSG:__EPSG__"
|
|
WMS_SRS "EPSG:__EPSG__"
|
|
|
END
|
|
END
|
|
|
END
|
|
END
|
|
@@ -130,38 +127,104 @@ END
|
|
|
';
|
|
';
|
|
|
$search=array('__NAME__','__EXTENT__','__SERVER_NAME__','__ID__','__EPSG__','__FILE__');
|
|
$search=array('__NAME__','__EXTENT__','__SERVER_NAME__','__ID__','__EPSG__','__FILE__');
|
|
|
|
|
|
|
|
- $layers=DB::getPDO()->fetchall("select ID,LAYER_NAME,ID_WMS_MAPS,A_STATUS,FILE_NAME from WMS_LAYERS where FILE_STATUS='IN_PROGRESS'");
|
|
|
|
|
- $completed=Array();
|
|
|
|
|
|
|
+ $layers=DB::getPDO()->fetchall("select ID,LAYER_NAME,EPSG,ID_WMS_MAPS,A_STATUS,FILE_NAME from WMS_LAYERS where FILE_STATUS='IN_PROGRESS'");
|
|
|
|
|
+ $mapsToGenerate=Array();
|
|
|
foreach ($layers as $layer) {
|
|
foreach ($layers as $layer) {
|
|
|
if (!file_exists('/tmp/generate_wms-'.$layer['ID'].'.lock')) {
|
|
if (!file_exists('/tmp/generate_wms-'.$layer['ID'].'.lock')) {
|
|
|
unlink('/tmp/generate_wms-'.$layer['ID'].'.sh');
|
|
unlink('/tmp/generate_wms-'.$layer['ID'].'.sh');
|
|
|
$destFolderPath = $this->getDirectory($layer['ID']);
|
|
$destFolderPath = $this->getDirectory($layer['ID']);
|
|
|
if (file_exists($destFolderPath.'/.wms/.completed')) {
|
|
if (file_exists($destFolderPath.'/.wms/.completed')) {
|
|
|
- if (!file_exists($destFolderPath.'/.wms/.data')) {
|
|
|
|
|
- DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'TO_GENERATE','FILE_STATUS_INFO'=>'Wystąpił błąd prztwarzania, ale nastąpi kolejna próba jego przetworzenia'));
|
|
|
|
|
|
|
+ if (file_exists($destFolderPath.'/.wms/.error')) {
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'ERROR','FILE_STATUS_INFO'=>'Wystąpił błąd przetwarzania, przekaż problem administratorowi systemu'));
|
|
|
|
|
+ } elseif (!file_exists($destFolderPath.'/.wms/.data')) {
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'TO_GENERATE','FILE_STATUS_INFO'=>'Wystąpił błąd przetwarzania, ale nastąpi kolejna próba jego przetworzenia'));
|
|
|
} else {
|
|
} else {
|
|
|
$data_arr=explode('|',file_get_contents($destFolderPath.'/.wms/.data'));
|
|
$data_arr=explode('|',file_get_contents($destFolderPath.'/.wms/.data'));
|
|
|
unlink($destFolderPath.'/.wms/.data');
|
|
unlink($destFolderPath.'/.wms/.data');
|
|
|
$geom=$data_arr[0];
|
|
$geom=$data_arr[0];
|
|
|
$extent=$data_arr[1];
|
|
$extent=$data_arr[1];
|
|
|
-
|
|
|
|
|
|
|
+ $replace=array($layer['LAYER_NAME'],$extent,$_SERVER['SERVER_NAME'],$layer['ID'],$layer['EPSG'],$destFolderPath.'/.wms/'.$layer['FILE_NAME']);
|
|
|
|
|
+ $map = str_replace($search,$replace,$mapSchema);
|
|
|
|
|
+ file_put_contents($destFolderPath.'/.wms/mapserver.map',$map);
|
|
|
DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'GENERATED','FILE_STATUS_INFO'=>'Plik przetworzony poprawnie','the_geom'=>"GeomFromText('{$geom}')"));
|
|
DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'GENERATED','FILE_STATUS_INFO'=>'Plik przetworzony poprawnie','the_geom'=>"GeomFromText('{$geom}')"));
|
|
|
unlink($destFolderPath.'/.wms/.completed');
|
|
unlink($destFolderPath.'/.wms/.completed');
|
|
|
- if ($layer['A_STATUS']=='NORMAL') $completed[$layer['ID_WMS_MAPS']]=1;
|
|
|
|
|
|
|
+ if ($layer['A_STATUS']=='NORMAL') $mapsToGenerate[$layer['ID_WMS_MAPS']]=1;
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'TO_GENERATE','FILE_STATUS_INFO'=>'Wystąpił błąd prztwarzania, ale nastąpi kolejna próba jego przetworzenia'));
|
|
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'TO_GENERATE','FILE_STATUS_INFO'=>'Wystąpił błąd przetwarzania, ale nastąpi kolejna próba jego przetworzenia'));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if ($completed) {
|
|
|
|
|
- foreach ($completed as $ID_WMS_MAPS => $x) {
|
|
|
|
|
- DB::getDB()->UPDATE_OBJ('WMS_MAPS',(object) array('ID'=>$ID_WMS_MAPS,'MAP_STATUS'=>'TO_GENERATE','MAP_STATUS_INFO'=>'Mapa oczekuje na przetworzenie'));
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ### Weryfikacja czy jakas aktywna warstwa nie zostala przesunieta do innej mapy
|
|
|
|
|
+ $layers=DB::getPDO()->fetchall("select ID,ID_WMS_MAPS,OLD_ID_WMS_MAPS from WMS_LAYERS where MAP_STATUS='ACTIVE' and ID_WMS_MAPS!=OLD_ID_WMS_MAPS");
|
|
|
|
|
+ foreach ($layers as $layer) {
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'OLD_ID_WMS_MAPS'=>$layer['ID_WMS_MAPS']));
|
|
|
|
|
+ $mapsToGenerate[$layer['ID_WMS_MAPS']]=1;
|
|
|
|
|
+ $mapsToGenerate[$layer['OLD_ID_WMS_MAPS']]=1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ### Aktywacja nieaktywnych warstw, ktore nalezy zaktywowac
|
|
|
|
|
+ $layers=DB::getPDO()->fetchall("select ID,ID_WMS_MAPS from WMS_LAYERS where A_STATUS='NORMAL' and FILE_STATUS='GENERATED' and MAP_STATUS='INACTIVE'");
|
|
|
|
|
+ foreach ($layers as $layer) {
|
|
|
|
|
+ if (!file_exists($wmsDirLocation.'/.maps/.single/'.$layer['ID'].'.map')) symlink($destFolderPath.'/.wms/mapserver.map',$wmsDirLocation.'/.maps/.single/'.$layer['ID'].'.map');
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'MAP_STATUS'=>'ACTIVE'));
|
|
|
|
|
+ $mapsToGenerate[$layer['ID_WMS_MAPS']]=1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ### Dezaktywacja aktywnych warstw, ktore nalezy zdezaktywowac
|
|
|
|
|
+ $layers=DB::getPDO()->fetchall("select ID,ID_WMS_MAPS from WMS_LAYERS where MAP_STATUS='ACTIVE' and (A_STATUS!='NORMAL' or FILE_STATUS!='GENERATED')");
|
|
|
|
|
+ foreach ($layers as $layer) {
|
|
|
|
|
+ if (file_exists($wmsDirLocation.'/.maps/.single/'.$layer['ID'].'.map')) unlink($wmsDirLocation.'/.maps/.single/'.$layer['ID'].'.map');
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'MAP_STATUS'=>'INACTIVE'));
|
|
|
|
|
+ $mapsToGenerate[$layer['ID_WMS_MAPS']]=1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ### Wyszukanie map do wygenerowania
|
|
|
|
|
+ $maps=DB::getPDO()->fetchall("select ID from WMS_MAPS where MAP_STATUS='NONE' and A_STATUS='NORMAL'");
|
|
|
|
|
+ foreach ($maps as $map) $mapsToGenerate[$map['ID']]=1;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ### Oznaczenie map do generowania
|
|
|
|
|
+ if ($mapsToGenerate) {
|
|
|
|
|
+ foreach ($mapsToGenerate as $ID_WMS_MAPS => $x)
|
|
|
|
|
+ $mapsCount=DB::getPDO()->fetchall("select ID from WMS_MAPS where ID='".$ID_WMS_MAPS."' and A_STATUS='NORMAL'");
|
|
|
|
|
+ if ($mapsCount) DB::getDB()->UPDATE_OBJ('WMS_MAPS',(object) array('ID'=>$ID_WMS_MAPS,'MAP_STATUS'=>'TO_GENERATE','MAP_STATUS_INFO'=>'Mapa oczekuje na przetworzenie'));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ### Generowanie map
|
|
|
|
|
+ $maps=DB::getPDO()->fetchall("select ID,MAP_NAME,MAP_EPSG,MAP_FILE from WMS_MAPS where MAP_STATUS='TO_GENERATE'");
|
|
|
|
|
+ foreach ($maps as $map) {
|
|
|
|
|
+ if ($map['MAP_FILE']) unlink($wmsDirLocation.'/.maps/'.$map['MAP_FILE'].'.map');
|
|
|
|
|
+ $MAP_FILE=strtolower(V::convert($map['MAP_NAME']));
|
|
|
|
|
+ if ($MAP_FILE=="") {
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_MAPS',(object) array('ID'=>$ID_WMS_MAPS,'MAP_STATUS'=>'ERROR','MAP_STATUS_INFO'=>'Brak nazwy mapy'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $otherMaps=DB::getPDO()->fetchall("select ID from WMS_MAPS where ID!='".$map['ID']."' and MAP_FILE='".$MAP_FILE."'");
|
|
|
|
|
+ if ($otherMaps) {
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_MAPS',(object) array('ID'=>$ID_WMS_MAPS,'MAP_STATUS'=>'ERROR','MAP_STATUS_INFO'=>'Nieunikalna nazwa mapy'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ file_put_contents($wmsDirLocation.'/.maps/'.$MAP_FILE.'.map','test');
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_MAPS',(object) array('ID'=>$ID_WMS_MAPS,'MAP_STATUS'=>'GENERATED','MAP_STATUS_INFO'=>'Mapa wygenerowana poprawnie','MAP_URL'=>'https://'.$_SERVER['SERVER_NAME'].'/wms/'.$MAP_FILE,'MAP_FILE'=>$MAP_FILE));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ ### Uzunięcie zbędnych map
|
|
|
|
|
+ $maps=DB::getPDO()->fetchall("select ID,MAP_FILE from WMS_MAPS where MAP_STATUS='GENERATED' and A_STATUS!='NORMAL'");
|
|
|
|
|
+ foreach ($maps as $map) {
|
|
|
|
|
+ if (file_exists($wmsDirLocation.'/.maps/'.$map['MAP_FILE'])) unlink($wmsDirLocation.'/.maps/'.$map['MAP_FILE']);
|
|
|
|
|
+ DB::getDB()->UPDATE_OBJ('WMS_MAPS',(object) array('ID'=>$ID_WMS_MAPS,'MAP_STATUS'=>'NONE','MAP_STATUS_INFO'=>'Mapa usunięta','MAP_URL'=>'','MAP_FILE'=>''));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
+ ### Wygenerowanie plików tif warstw
|
|
|
$bashSchema='
|
|
$bashSchema='
|
|
|
#rm -rf __PATH__/.wms
|
|
#rm -rf __PATH__/.wms
|
|
|
#mkdir __PATH__/.wms
|
|
#mkdir __PATH__/.wms
|
|
@@ -174,10 +237,17 @@ gdaltindex /tmp/generate_wms-__ID__-shp_orig.shp __PATH__/__FILE__ >/dev/null 2>
|
|
|
extent=`ogrinfo -al -so /tmp/generate_wms-__ID__-shp_orig.shp | grep Extent | sed "s/[(),\-]//g;s/ / /g;s/Extent: //g"`
|
|
extent=`ogrinfo -al -so /tmp/generate_wms-__ID__-shp_orig.shp | grep Extent | sed "s/[(),\-]//g;s/ / /g;s/Extent: //g"`
|
|
|
rm -f /tmp/generate_wms-__ID__-shp_*
|
|
rm -f /tmp/generate_wms-__ID__-shp_*
|
|
|
echo "${wgs84}|${extent}|" > __PATH__/.wms/.data
|
|
echo "${wgs84}|${extent}|" > __PATH__/.wms/.data
|
|
|
-#/opt/local/bin/gdal_translate -of GTiff -co "TILED=YES" -co "COMPRESS=DEFLATE" -co "ZLEVEL=9" -co "BIGTIFF=YES" __PATH__/__FILE__ __PATH__/.wms/__FILE__ && /opt/local/bin/gdaladdo -r average __PATH__/.wms/__FILE__ 2 4 8 16 32 64 128
|
|
|
|
|
|
|
+ok=0
|
|
|
|
|
+#/opt/local/bin/gdal_translate -of GTiff -co "TILED=YES" -co "COMPRESS=DEFLATE" -co "ZLEVEL=9" -co "BIGTIFF=YES" __PATH__/__FILE__ __PATH__/.wms/__FILE__ && /opt/local/bin/gdaladdo -r average __PATH__/.wms/__FILE__ 2 4 8 16 32 64 128 && ok=1
|
|
|
rm -f ${lock}
|
|
rm -f ${lock}
|
|
|
touch __PATH__/.wms/.completed
|
|
touch __PATH__/.wms/.completed
|
|
|
-echo "Successfully completed."
|
|
|
|
|
|
|
+if [ "$ok" -eq 1 ]; then
|
|
|
|
|
+ echo "Successfully completed."
|
|
|
|
|
+else
|
|
|
|
|
+ cp tmp/generate_wms-__ID__.log __PATH__/.wms/.error
|
|
|
|
|
+ echo "Error creating tif file."
|
|
|
|
|
+fi
|
|
|
|
|
+cp tmp/generate_wms-__ID__.log __PATH__/.wms/.test
|
|
|
';
|
|
';
|
|
|
$search=array('__ID__','__PATH__','__FILE__');
|
|
$search=array('__ID__','__PATH__','__FILE__');
|
|
|
|
|
|