Script para generar archivo sql a partir de datos de padrones urbanos dnc catastro e importarlo en PostgreSql

1. Bajar el archivo csv de padrones urbanos de:

https://catalogodatos.gub.uy/dataset/padrones-urbanos-y-rurales

2. Crear un .NET:


using System;
using System.IO;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //PadronesUrbanos();


        }

        static void PadronesUrbanos()
        {
            var arch = @"C:\_MAPAS\_PADRONES DNC\datos-abiertos-dnc-2019-06\Padrones Urbanos.CSV";

            var fila = 0;
            var numero_archivo = 0;
            var archOut = @"C:\temp\out\Padrones Urbanos_" + numero_archivo + ".sql";


            var f = new StreamReader(arch);
            var fOut = new StreamWriter(archOut);

            fOut.WriteLine("DROP TABLE padrones_urbanos;");

            fOut.WriteLine("CREATE TABLE padrones_urbanos (" +
                "codigo_regimen VARCHAR(2), " +
                "codigo_departamento VARCHAR(1), " +
                "codigo_localidad VARCHAR(2), " +
                "numero_padron integer, " +
                "block_manzana VARCHAR(20), " +
                "entrepiso_subsuelo VARCHAR(2), " +
                "unidad integer, " +
                "area_predio integer, " +
                "area_edificada integer, " +
                "valor_real_terreno integer, " +
                "valor_real_mejoras integer, " +
                "valor_real_total integer, " +
                "valor_real_para_impuestos integer, " +
                "fecha_ultima_djcu VARCHAR(10), " +
                "vigencia_ultima_djcu VARCHAR(10)" +
                ");");

            fOut.WriteLine();

            while (!f.EndOfStream)
            {
                var linea = f.ReadLine();
                fila++;

                var v = linea.Split(',');

                var v1 = v[0].Replace("\"", "'");
                var v2 = v[1].Replace("\"", "'");
                var v3 = v[2].Replace("\"", "'");
                var v4 = v[3].Replace("\"", "'");
                var v5 = "'" + v[4].Replace("\"", "").Replace("'", "") + "'"; ;
                var v6 = v[5].Replace("\"", "'");
                var v7 = v[6].Replace("\"", "'");
                var v8 = v[7].Replace("\"", "'");
                var v9 = v[8].Replace("\"", "'");
                var v10 = v[9].Replace("\"", "'");
                var v11 = v[10].Replace("\"", "'");
                var v12 = v[11].Replace("\"", "'");
                var v13 = v[12].Replace("\"", "'");
                var v14 = "\'" + v[13] + "\'";
                var v15 = "\'" + v[14] + "\'";

                fOut.WriteLine("INSERT INTO padrones_urbanos (codigo_regimen, codigo_departamento, codigo_localidad, numero_padron, block_manzana, entrepiso_subsuelo, unidad, area_predio, area_edificada, valor_real_terreno, valor_real_mejoras, valor_real_total, valor_real_para_impuestos, fecha_ultima_djcu, vigencia_ultima_djcu) " +
                    "VALUES (" + v1 + ", " + v2 + ", " + v3 + ", " + v4 + ", " + v5 + ", " + v6 + ", " +
                                 v7 + ", " + v8 + ", " + v9 + ", " + v10 + ", " + v11 + ", " + v12 + ", " + v13 + ", " + v14 + ", " + v15 + ");");

                if (fila > 300000)
                {
                    fila = 0;

                    numero_archivo++;
                    fOut.Close();
                    archOut = @"C:\temp\out\Padrones Urbanos_" + numero_archivo + ".sql";

                    fOut = new StreamWriter(archOut);
                }
            }

            fOut.Close();

            Console.WriteLine("fin");
            Console.ReadLine();
        }
    }
}


3. Para importarlo en postgreSql:

C:\Program Files\PostgreSQL\11\bin>psql -h localhost -d catastro -U admin -v ON_ERROR_STOP=1 -f "c:\temp\Padrones Urbanos_0.sql"

(hacerlo para el 1, 2, 3, etc)





Importar SHP en PostgreSQL

1. Instalar extensiones POSTGIS (con el application stack builder de postgis):

2. Ejecutar en la base:

CREATE EXTENSION postgis;

3. Ejecutar:

C:\Program Files\PostgreSQL\11\bin>shp2pgsql -I -s 2263 "C:\_MAPAS\_CCZ\sig_comunales.shp" ccz | psql -U admin -d catastro

Usando el GUI:

C:\Program Files\PostgreSQL\11\bin\postgisgui

ejecutar shp2pgsql-gui.exe


Si da error que falta libintl-9.dll

Hacer una copia de libintl-8.dll y renombrarlo a libintl-9.dll


Si da error de encoding:

Luego al abrir el GUI, click en el boton Options... y poner LATIN1

Importar SQL en posgresql desde linea de comando

C:\Program Files\PostgreSQL\11\bin>psql -h localhost -d catastro -U admin -v ON_ERROR_STOP=1 -f "c:\temp\Padrones Urbanos.sql"

Ver mapa de edificios exportados de OSM en QGIS (OpenStreetMap) y query SQL

Referencia: https://github.com/tudelft3d/3dfier/wiki/Extracting-building-footprints-from-OpenStreetMap

1. Abrir browser en openstreetmap

2. Click en exportar

3. Seleccionar el area a exportar

4. Click en Overpass API (esto permite exportar archivos grandes)

5. El archivo exportado (map) renombrarlo a map.osm

6. Instalar QGIS (o instalar OSGeo4W, en el cual viene incluido)

7. En QGIS: Layer / Add Layer / Add Vector Layer

8. Elegir el archivo map.osm

9. Elegir multipolygons solamente

10. Luego de importar el mapa, en la ventana Layers (a la izquierda) click derecho en map_multipolygons, y en Filter definir:

"building" is not null

(esto permite que se muestren todos los edificios/casas)

Para hacer Query SQL:

Database / DB Manager
Virtual Layers / Project Layers
Database / SQL Window


select * from "map multipolygons"
where building is not null

^^^ ojo que tiene que ir con comillas y tiene un espacio luego de map!!





Cargar mapa en PosgreSql

1. Bajar el dataset de
https://data.humdata.org/dataset/604b5629-756d-4979-8b6f-59d6598ccd61

Por ejemplo:

hotosm_ury_buildings_gpkg.zipzipped geopackage

Geopackage, SQLite compatible

2. Instalar OSGeo4W (esto instala el ogr2ogr.exe, que es lo que permite subir el dataset a PosgreSQL)

3. Instalar PosgreSQL

4. Crear una base de datos (ej prueba2)

5. Crear un usuario y darle permisos sobre la base:
create user carlos with encrypted password 'Carlos1';grant all privileges on database prueba2 to carlos;
6. Instalar extensiones de GIS en PosgreSQL
-Abrir el PostgreSQL stack builder
-Ir a Spatial Extensions
-Marcar PostGIS

7. Crear extensiones postgis para la base de datos prueba2:
Ejecutar este query:
CREATE EXTENSION postgis;

8. Abrir la consola de OSGeo4W (OSGeo4W Shell)
ogr2ogr -f PostgreSQL "PG:dbname=prueba2 host='localhost' port='5432' user='carlos' password=Carlos" C:\_MAPAS\hotosm_ury_buildings_gpkg\hotosm_ury_buildings.gpkg -nlt PROMOTE_TO_MULTI

ATENCION: Si da un problema y pide password:
editar:
C:\Program Files\PostgreSQL\11\data\pg_hba.conf
cambiar todo lo que dice md5 por trust
(despues de ejecutar el script dejarlo con md5 de nuevo)