-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcomandos.php
178 lines (142 loc) · 8.18 KB
/
comandos.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<?php
/****************************************************
Genera el listado de comandos para importar SHP
a la base de datos de publicación
Además de este script, se requiere un archivo
config.php, un directorio llamado tmp, otro
llamado create_tables y un tercero llamado
SHPs.
- config.php: archivo de configuración
- tmp: directorio temporal donde guardar archivos
- create_tables: directorio donde persisten los
archivos de creación de tablas
(para evitar eliminar una tabla
creada en corridas previas)
- SHPs: directorio donde estarán los subdirectorios,
cada uno con sus respectivos archivos SHP
****************************************************/
require_once 'config.php';
require_once 'LibStrings.php';
require_once 'LibDirs.php';
$aDatos = array();
if ($sSistemaOperativo == 'windows') {
$sBashComentario = 'REM';
$sComandosIniciales = 'chcp 65001';
$sEnvVar = 'SET';
$sCopy = 'copy';
$sDirSep = "\\";
$sEnvQuotes = "";
} elseif ($sSistemaOperativo == 'linux') {
$sBashComentario = '#';
$sComandosIniciales = '';
$sEnvVar = 'export';
$sCopy = 'cp';
$sDirSep = '/';
$sEnvQuotes = "\"";
} else {
die('Falta indicar el sistema operativo');
}
//Vistas para el nomenclador
$aClases = array();
$aClases[1] = 'v_geodesia_demarcacion';
$aClases[2] = 'v_habitat_infraestructura';
$aClases[3] = 'v_hidrografia_oceanografia';
$aClases[4] = 'v_industria_servicios';
$aClases[5] = 'v_relieve_suelo';
$aClases[6] = 'v_transporte';
$aClases[7] = 'v_vegetacion';
createDir('create_tables');
createDir('tmp');
echo '
'.$sComandosIniciales.'
'.$sBashComentario.' Crear variable entorno password
'. $sEnvVar.' PGPASSWORD='.$sEnvQuotes.$sDBPsw.$sEnvQuotes.'
'.$sBashComentario.' Extension para UUID
psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "CREATE EXTENSION IF NOT EXISTS \\"uuid-ossp\\""
'.$sBashComentario.' Extension postgis para s$sDBName
psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "CREATE EXTENSION IF NOT EXISTS \\"postgis\\""
'.$sBashComentario.' Extension para busquedas en texto
psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "CREATE EXTENSION IF NOT EXISTS \\"fuzzystrmatch\\""
';
/*
foreach ($aClases as $sVista) {
echo '
'.$sBashComentario.' Eliminar vista
psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "DROP VIEW public.'.$sVista.'"
';
}
*/
if ($gestor = opendir('SHPs')) {
while (false !== ($entrada = readdir($gestor))) { //Recorre el directorio SHPs
if ($entrada != '.' && $entrada != '..' && is_dir('SHPs'.$sDirSep.$entrada) && ($gestor2 = opendir('SHPs'.$sDirSep.$entrada))) {
while (false !== ($entrada2 = readdir($gestor2))) { //Recorre los subdirectorios del directorio SHPs
if (!is_dir('SHPs'.$sDirSep.$entrada.'/'.$entrada2) && preg_match('/.shp$/i', $entrada2)) { //Si encontro archivos SHP
$sShp = $entrada.$sDirSep.$entrada2;
$sTabla = nombreSHP2NombreTabla($entrada2); //Genera el nombre de la tabla a partir del nombre del SHP
echo "\n".$sBashComentario."Eliminar tabla $sDBName\n" . 'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "DROP TABLE '.$sTabla.'" '."\n";
if (file_exists('create_tables/create_'.$sTabla.'.sql')) { //Si ya existe el script de creación de la tabla, lo utiliza
echo "\n".$sBashComentario.' Crear la tabla en BD' . "\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -f create_tables'.$sDirSep.'create_'.$sTabla.'.sql'."\n";
} else { //Si no existe el script de creacion de tabla, lo genera a partir del SHP
echo "\n".$sBashComentario.' Generar solo CREATE TABLE'."\n".
$sBashComentario.' shp2pgsql -s '.$iEPSGTransformation.' -t 3DZ -p "SHPs'.$sDirSep.$sShp.'" '.$sTabla.' > tmp'.$sDirSep.'create_'.$sTabla.'.sql'."\n".
'shp2pgsql -s '.$iEPSGTransformation.' -t 3DZ -p "SHPs'.$sDirSep.$sShp.'" '.$sTabla.' > tmp'.$sDirSep.'create_'.$sTabla.'.sql'."\n".
$sCopy.' tmp'.$sDirSep.'create_'.$sTabla.'.sql create_tables'.$sDirSep.'create_'.$sTabla.'.sql'."\n\n".
$sBashComentario.' Crear la tabla en BD'."\n".'
psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -f tmp'.$sDirSep.'create_'.$sTabla.'.sql'."\n";
}
echo "\n".$sBashComentario.' Permisos sobre la tabla';
foreach ($aDBGrantUsers as $sGrantUser) { //Recorre el vector de usuarios y le asigna permisos sobre la tabla creada
echo "\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "GRANT ALL ON TABLE public.'.$sTabla.' TO '.$sGrantUser.'"';
}
echo "\n".$sBashComentario.' Agregar columna centroide'
."\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "SELECT AddGeometryColumn(\'\',\''.$sTabla.'\',\'centroide\',\''.$iEPSGTransformation.'\',\'POINT\',2)"'
."\n"
."\n".$sBashComentario.' Agregar columna UUID (Global ID)'
."\n".$sBashComentario.' psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "ALTER TABLE '.$sTabla.' ADD COLUMN globalid uuid DEFAULT uuid_generate_v4()"'
."\n"
."\n".$sBashComentario.' Generar solo INSERT'
."\n".$sBashComentario.' shp2pgsql -s SRS_Origen:SRS_destino -t 3DZ -a "SHPs'.$sDirSep.$sShp.'" '.$sTabla.' > tmp'.$sDirSep.'insert_'.$sTabla.'.sql'
."\n".'shp2pgsql -s '.$iEPSGTransformation.' -t 3DZ -a "SHPs'.$sDirSep.$sShp.'" '.$sTabla.' > tmp'.$sDirSep.'insert_'.$sTabla.'.sql'
."\n"
."\n".$sBashComentario.' Ejecutar INSERT'
."\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -f tmp'.$sDirSep.'insert_'.$sTabla.'.sql'
."\n".$sBashComentario.' Transforma la geometria a EPSG '.$iEPSGTransformation." La transformación se debe hacer al momento de generar el insert"
."\n".$sBashComentario.'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "UPDATE '.$sTabla.' set geom = ST_Transform(geom, '.$iEPSGTransformation.')"'
."\n".$sBashComentario.' Calcular el centroide'
."\n".$sBashComentario.'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "UPDATE '.$sTabla.' set centroide = ST_Centroid(geom)"'
."\n"
."\n".$sBashComentario.' Calcular el centroide'
."\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "UPDATE '.$sTabla.' set centroide = ST_Centroid(geom)"'
."\n"
."\n".$sBashComentario.' Crear un indice espacial'
."\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "CREATE INDEX '.$sTabla.'_gix ON '.$sTabla.' USING GIST (geom)"'
."\n"
."\n".$sBashComentario.' Crear trigger para calcular centroide'
."\n".$sBashComentario.'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "CREATE TRIGGER '.$sTabla.'_centroide_trigger AFTER INSERT ON public.'.$sTabla.' FOR EACH ROW EXECUTE PROCEDURE public.calcular_centroide()"'
."\n"
."\n".$sBashComentario.' Crear indices de búsqueda'
."\n".$sBashComentario.'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "SELECT crear_indice_para_busqueda_por_texto(\''.$sTabla.'\')"'
."\n"
."\n".$sBashComentario.' Ejecutar VACUUM y ANALYZE'
."\n".'psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -c "VACUUM ANALYZE '.$sTabla.'"'
;
}
}
closedir($gestor2);
}
}
closedir($gestor);
}
/*
foreach ($aClases as $sVista) { //Crea las vistas para el nomenclador
echo '
'.$sBashComentario.' Crear vista
psql -h '.$sDBHost.' -U '.$sDBUsr.' -d '.$sDBName.' -f views\\'.$sVista.'.sql
';
}
*/
echo '
'.$sBashComentario.' Eliminar variable entorno password
'.$sEnvVar.' PGPASSWORD=
';
die;