Deberías ver muchas líneas que representan carreteras. Todas estas líneas están en la capa vectorial que acabas de cargar para crear el mapa básico.
Refiérase a la imagen que muestra el diseño de la interfaz y comprobar que recuerdas los nombres y las funciones de los elementos de la pantalla.
Guardar como
Zoom a la capa
Ayuda
Renderizado on/off
Línea de medida
Debería haber cinco capas en tu mapa:
lugares
agua
edificios
ríos y
carreteras.
Todas las capas vectoriales deberían cargarse en el mapa. Probablemente todavía no tendrá buen aspecto (arreglaremos los colores feos más adelante).
Comprueba que los colores están cambiando como esperas que cambien.
Por ahora es suficiente cambiar sólo la capa agua. Debajo hay un ejemplo, pero puede tener diferente aspecto dependiendo del color que elijas.
Nota
Si quieres trabajar en una sola capa a la vez y no quieres otras capas que te distraigan, puedes ocultar una capa, haga clic en la casilla de verificación que esta junto a su nombre en la lista de capas. Si la casilla está en blanco, entonces la capa está oculta.
Ahora tu mapa debería aparecer así:
Si tu eres un usuario principiante, puede detenerse aquí.
Use el método anterior para cambiar los colores y estilos a todas las capas restantes.
Trata de usar colores naturales para los objetos. Por ejemplo, una carretera no debería ser roja o azul, pero si puede ser gris o negro.
También sientete libre de experimentar con diferentes Estilos de Relleno´ y :guilabel:`Estilos de borde ajustados para polígonos.
Personaliza tu construcciones capa como gustes, pero recuerda que tiene que ser fácil de contar las diferentes partes del mapa.
He aquí un ejemplo:
para hacer el símbolo requerido, necesitas dos capas de símbolo:
La capa de símbolo mas bajo es amplio, línea solida color amarilla. Encima hay una línea solida mas ligera color gris.
Si sus capas de símbolos se parece a los anteriores, pero no obtendrá el resultado que desea, asegurarse que sus niveles de símbolos se vean como esto:
Ahora tu mapa debería tener este aspecto:
Ajustar tus niveles de símbolo a estos valores:
Probar con diferentes valores para dar diferentes resultados.
Abrir de nuevo su mapa original antes de continuar con el siguiente ejercicio.
El campo NAME es el más útil para presentarlo como etiqueta. Esto es porque todos los valores son únicos para cada objeto y es muy poco probable que contengan valores NULL. Si tus datos tienen algunos valores NULL, no te preocupes siempre y cuando sus lugares tengan nombre.
Su mapa ahora debe presentar los puntos del marcador y las etiquetas deben compensarse por :kbd::2.0 mm: El estilo de los marcadores y etiquetas debe permitir que sean claramente visibles en el mapa:
Una posible solución tiene este producto final:
Para llegar a este resultado:
Use un tamaño de fuente de 10, un :guialabel::Distancia de etiqueta de 1,5 mm, :guialabel:`Ancho de símbolo` and :guialabel:`Tamaño de símbolo` de 3.0 mm.
Además, este ejemplo usa el Etiqueta envuelta en caracteres opción:
Introduzca un _kbd:espacio en este campo y clic en Aplicar para lograr el mismo efecto. En nuestro caso, algunos de los nombres de lugares son muy largos, resultando en nombres con múltiples líneas que no sera muy fácil de usar. Usted puede encontrar un ajuste que sea mas apropiado a su mapa.
Aún en modo edición, establecer los valores de FONT_SIZE a cualquiera que prefiera. El ejemplo usa 16 para ciudades, 14 para suburbios, 12 para localidades y 10 para haldeas.
Recuerda guardar cambios y salir del modo edición.
Regresar a Texto opción de formato de la capa lugares y selecciona Tamaño de fuente en el Campo de atributos de el tamaño de fuente de datos desplegable:
Sus resultados, si usó los valores antes mencionados, debería ser esto:
Usa el nombre del método como en el primer ejercicio de la lección para deshacerse de los límites:
Los ajustes utilizados pueden no ser los mismos, pero con los valores Clases = 6 y Modo = Natural Breaks(Jenks) (y usando los mismos colores, por supuesto), el mapa se verá así:
La simbología no importa, pero los resultados deberían verse más o menos como esto:
La forma exacta no importa, pero debería estar recibiendo un agujero en medio de su rasgo, como la siguiente:
Deshacer su edición antes de continuar con el ejercicio con la siguiente herramienta.
Primero selecciona el Bontebok National Part:
Ahora agregar su nueva parte:
Deshacer su edición antes de continuar con el ejercicio con la siguiente herramienta.
Use la herramienta Merge Selected Features, para estar seguro, primero seleccione los poligonos que desee unir.
Use el rasgo con el OGC_FID de 1 como la fuente de sus atributos (clic en la entrada correspondiente de la ventana de dialogo, después clic en el botón Tomar los atributos del rasgo seleccionado):
Nota
Polígono original OGC_FID no será 1. Solo tiene que elegir el rasgo que tiene un OGC_FID.
Nota
Usando la herramienta Unir atributos de los rasgos seleccionados mantendrá las distintas geometrías, pero les dará los mismo atributos.
Para el TIPO, hay obviamente un cantidad límite de tipos que una carretera puede tener, si revisa la tabla de atributos de la capa, verá que están predefinidos.
Establecer el widget a Valor del mapa y clic Cargar datos de la capa.
Seleccionar Carreteras in el Etiqueta desplegable y autopista para ambos las opciones de Valor y Descripción:
Clic tres veces en Ok.
Si usa la herramienta Identificación en una calle mientras esta activo el modo edición, la ventana de dialogo que deberías ver será como esto:
Para propositos de este ejercicio, las capas de OSM que estamos interesados son multipolígonos y líneas. La capa multipolígono contiene los datos que necesitamos para presentar las capas de casas, escuelas y restaurantes. La capa líneas contiene el conjunto de carreteras.
La Constructor de consultas se encuentra en las propiedades de la capa:
Usando el Constructor de consultas para la capa multipolígono, hacer la siguiente consulta a las capas de casas, escuelas, restaurantes y residencial:
Una vez que haya introducido cada consulta, haga clic en Aceptar. Verá que el mapa se actualiza para mostrar sólo los datos que ha seleccionado. Dado que necesita volver a usar los datos multipolígono del conjunto de datos de OSM, en este punto puede usar uno de los siguientes métodos:
Cambiar el nombre de la capa OSM filtrada y reimportar la capa de osm_data.osm, O
Duplicar la capa filtrada, cambiar el nombre a la copia, limpiar la consulta y crear su nueva consulta en el Constructor de consultas.
Nota
Aunque el campo de OSM building tiene el valor house, la cobertura en su zona - como en la nuestra - puede no ser completa. En nuestra región de prueba es por tanto más preciso excluir todos los edificios definidos como cualquier cosa distinta de house. Puede decidir simplemente incluir los edificios que estén definidos como house y todos los demás valores sin un significado claro como:kbd:yes.
Para crear la capa carreteras, construya la consulta contra la capa líneas de OSM:
Debería terminar con un mapa parecido al siguiente:
Su diálogo de buffer debería parecerse a esto:
La Distancia de buffer es 1000 metros (esto es, 1 kilómetro).
El valor de :guilabel: Segmentos para aproximar se establece en :kbd: 20. Esto es opcional, pero se recomienda, ya que hace que los buffers de salida se ven más suaves. Compare esto:
A esto:
La primera imagen muestra el buffer con el valor Segmentos para aproximar se establece en 5 y la segunda muestra el valor se establece en 20. En nuestro ejemplo, la diferencia es sutil, pero se puede ver que los bordes del buffer son más suaves con el valor más alto.
Volver al texto
Para crear la nueva capa houses_restaurants_500m, pasamos por un proceso de dos pasos:
Primero, crear un buffer de 500m alrededor de los restaurantes y agregar la capa al mapa:
Siguiente, seleccionar los edificios dentro del área del buffer:
Ahora guardar esa selección como nuestra nueva capa houses_restaurants_500m:
Su mapa debe mostrar solo aquellos edificios que estén a menos de 50m de la carretera, 1 km de la escuela y 500m de un restaurante:
Establezca su dialogo Calculadora Raster como esto:
Para la versión de 5 grados, remplazar 2 en la expresión y el nombre del archivo con 5.
Sus resultados:
2 grados:
5 grados:
Abrir el Constructor de consultas con clic derecho sobre la capa todo_terreno in la Lista de capas, seleccionar la pestaña General.
Después construir la consulta "suitable" = 1.
Clic OK para filtrar todos los polígonos que no cumplan con esa condición.
Cuando vea el raster original, el área debe sobreponerse perfectamente:
Puede guardar esta capa, clic derecho sobre la capa todo_terreno en el La lista de capas y elegir Guardar como..., después continua según las instrucciones.
Podrá notar que algunos de los edificios en su capa nueva_solución han sido “cortados” por la herramienta Intersectar. Esto muestra que sólo parte del edificio -y por lo tanto solamente parte de la propiedad- se ubica en un terreno adecuado. Podemos entonces con seguridad eliminar esos edificios de nuestro Conjunto de datos.
Por el momento, su análisis deberá verse más o menos así:
Considera un área circular, con 100 metros a la redonda
Si es más grande que 100 metros de radio, entonces extraer 100 metros de su tamaño (en todas las direcciones) resultará en que una parte de el quede sobrante en el medio.
Por lo tanto, puede ejecutar un buffer interior de 100 metros en su capa vectorial existente terreno_apto. En el resultado de la aplicación de la función buffer, lo que sea que quede en la capa original representará áreas en donde hay terreno apto más allá de los 100.
Para demostrar:
Ir a Vector ‣ Herramientas de Geoprocesamiento ‣ Buffer(s) para abrir el diálogo de Buffer(s).
Configúralo así:
Use la capa terreno_apto con 10 segmentos y una distancia de buffer de -100. (La distancia es automáticamente reconocida en metros debido a que su mapa está usando un SRC proyectado).
Guarda la capa resultante en datos_ejercicio/desarrollo_residencial/ como terreno_apto_continuos100m.shp.
Si es necesario, mueva la nueva capa encima de su capa original terreno_apto.
Sus resultados se verán más o menos así:
Ahora utilice la herramienta Selección por ubicación (Vector ‣ Herramientas de investigación ‣ Selección por ubicación).
Configurar de la siguiente manera:
Seleccione elementos en nueva_solución que intersecte elementos de terreno_apto_continuos100m.shp.
Este es el resultado:
Los edificios en color amarillo están seleccionados. Aunque algunos de los edificios caen parcialmente afuera de la nueva capa terreno_apto_continuos100m.shp, caen bien dentro de la capa original terreno_apto y por lo tanto cumplen con todos nuestros requerimientos.
Guarde la selección en datos_ejercicio/desarrollo_residencial/ con el nombre respuesta_final.shp.
Su mapa debería verse así (puede que necesite re-ordenar las capas):
Utilice el mismo método que antes para agregar el nuevo servidor y la capa adecuada según como se encuentre alojada en el servidor:
Si realiza un acercamiento en el área Swellendam, notará que este conjunto de datos tiene una baja resolución.
Por lo tanto, es mejor no usar este dato para el mapa actual. El dato de Blue Marble es más apropiado para las escalas nacionales y globales.
Usted podrá notar que muchos servidores WMS no siempre están disponibles. A veces esto es temporal, a veces es permanente. Un ejemplo de un servidor WMS que funcionaba en el momento de escribir este manual es el: guilabel: Depósitos Minerales Mundial WMS en: kbd: `http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows `. El cual no requiere cargos ni tiene restricciones de acceso, y es además de cobertura global. Por lo tanto, cumple con los requisitos. Tenga en cuenta, sin embargo, que esto no es más que un ejemplo. Hay muchos otros servidores WMS para elegir.
Para nuestra tabla de direcciones teórica, podríamos querer almacenar las siguientes propiedades:
House Number
Street Name
Suburb Name
City Name
Postcode
Country
Al crear la tabla para representar un objeto de dirección, crearemos columnas para representar cada una de estas propiedades y les estaríamos asignando nombres compatibles con SQL y posiblemente nombres cortos
house_number
street_name
suburb
city
postcode
country
El mayor problema con la capa de gente es que hay solo un campo de dirección que contiene los datos de domicilio de las personas. Pensando en nuestra tabla teórica direccion anteriormente en esta lección, sabemos que una dirección esta compuesta por varias propiedades. Mediante el almacenamiento de todas estas propiedades en un solo campo, con esto haremos mucho mas difícil la actualización y la consulta de nuestros datos. Por lo tanto tenemos que dividir el campo de dirección en varias propiedades. Esto nos daría una tabla que tenga las siguiente estructura:
id | name | house_no | street_name | city | phone_no
--+---------------+----------+----------------+------------+-----------------
1 | Tim Sutton | 3 | Buirski Plein | Swellendam | 071 123 123
2 | Horst Duester | 4 | Avenue du Roix | Geneva | 072 121 122
Nota
En la siguiente sección, aprenderemos acerca de relaciones de llave foránea, que podrán ser usados en este ejemplo para mejorar aún más la estructura de nuestra base de datos.
Actualmente nuestra tabla de personas se ve así:
id | name | house_no | street_id | phone_no
---+--------------+----------+-----------+-------------
1 | Horst Duster | 4 | 1 | 072 121 122
La columna street_id representa una relacion ‘uno a muchos’ entre el objeto personas y el objeto relacionado calle, que esta en la tabla de calles.
Una forma para normalizar aún más la tabla es dividir el nombre del campo en nombre y apellido:
id | first_name | last_name | house_no | street_id | phone_no
---+------------+------------+----------+-----------+------------
1 | Horst | Duster | 4 | 1 | 072 121 122
Podemos crear también tablas independientes para nombre pueblo o ciudad y país, enlazándolos a nuestra tabla de personas a través de una relación de ‘uno a muchos’:
id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
1 | Horst | Duster | 4 | 1 | 2 | 1
Un diagrama de ER para representar esto sería así:
El SQL necesario para crear la tabla correcta de personas es:
create table people (id serial not null primary key,
name varchar(50),
house_no int not null,
street_id int not null,
phone_no varchar null );
EL esquema para la tabla (introduzca d personas) se ve así:
Table "public.people"
Column | Type | Modifiers
-----------+-----------------------+-------------------------------------
id | integer | not null default
| | nextval('people_id_seq'::regclass)
name | character varying(50) |
house_no | integer | not null
street_id | integer | not null
phone_no | character varying |
Indexes:
"people_pkey" PRIMARY KEY, btree (id)
Nota
Para fines de ilustración, hemos omitido a propósito la restricción del fkey.
El motivo del comando DROP no funcionaría en este caso, porque la tabla personas tiene un restricción de llave foránea para la tabla calles. Esto significa que dropping (o eliminar) la tabla de calles dejaría a la tabla de personas con las referencias a calles de datos no existentes.
Nota
Es posible para ‘fuerza’ la tabla de calles para ser eliminado mediante el uso del comando CASCADE, pero también se eliminaría la tabla de personas y alguna otra que tenga relación con la tabla calles. ¡Utilizar con precaución!
El comando SQL, que debe usar se ve así (puede reemplazar el nombre de la calle con uno de su elección):
insert into streets (name) values ('Low Road');
Aquí esta la sentencia SQL correcta:
insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
values ('Joe Smith',55,2,'072 882 33 21');
Si se fija en la tabla de calles nuevamente (utilizando una sentencia select como antes), vera que el id de la entidad Carretera Principal es 2.
Eso es por qué podríamos solo introducir el numero 2 arriba. Aunque no estemos viendo Carretera principal escrito completamente en la entrada de arriba, la base de datos podrá estar asociada a street_id con el valor de 2.
Nota
If you have already added a new street object, you might find
that the new Main Road has an ID of 3 not 2.
Aquí esta la sentencia SQL correcta que debe usar:
select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;
Resultado:
count | name
------+-------------
1 | Low Street
2 | High street
1 | Main Road
(3 rows)
Nota
You will notice that we have prefixed field names with table names
Las unidades usadas para el ejemplo de consulta son grados, porque el SRC que la capa esta usando es WGS84. Este es un SRC Geografico, que significa que las unidades están en grados. Un proyecto SRC, como la proyección UTM que esta en metros.
Recuerde que cuando escriba la consulta, necesita saber en que unidades esta el SRC de la capa. Esto te permitirá escribir una consulta que regrese los resultados que tu esperas.
CREATE INDEX cities_geo_idx
ON cities
USING gist (the_geom);
alter table streets add column the_geom geometry;
alter table streets add constraint streets_geom_point_chk check
(st_geometrytype(the_geom) = 'ST_LineString'::text OR the_geom IS NULL);
insert into geometry_columns values ('','public','streets','the_geom',2,4326,
'LINESTRING');
create index streets_geo_idx
on streets
using gist
(the_geom);
delete from people;
alter table people add column city_id int not null references cities(id);
(capturar ciudades en QGIS)
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Faulty Towers',
34,
3,
'072 812 31 28',
1,
'SRID=4326;POINT(33 33)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('IP Knightly',
32,
1,
'071 812 31 28',
1,
'SRID=4326;POINT(32 -34)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Rusty Bedsprings',
39,
1,
'071 822 31 28',
1,
'SRID=4326;POINT(34 -34)');
Si recibe el siguiente mensaje de error:
ERROR: insert or update on table "people" violates foreign key constraint
"people_city_id_fkey"
DETAIL: Key (city_id)=(1) is not present in table "cities".
entonces significa que mientras experimentaba con la creación de polígonos para la tabla de ciudades, debe haber eliminado algunos de ellos y empezar de nuevo. Vea las entradas de su tabla de ciudades y use cualquier id que exista.
create table cities (id serial not null primary key,
name varchar(50),
the_geom geometry not null);
alter table cities
add constraint cities_geom_point_chk
check (st_geometrytype(the_geom) = 'ST_Polygon'::text );
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
select people.name,
streets.name as street_name,
st_astext(people.the_geom) as geometry
from streets, people
where people.street_id=streets.id;
Resultado:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
Como puede ver, nuestra limitación permite agregar nulos en la base de datos.