Salta el contingut

Archivo configuración Geoportal

La configuración general del geoportal –mapas base, configuración de zoom, diseño, etc.– se realiza en el archivo de configuración. Este archivo se encuentra dentro del proyecto en la siguiente ruta src/config/production.js. Si se desean hacer ajustes en un entorno de desarrollo también se puede modificar src/config/development.js.

El geoportal tiene una configuración por defecto que se puede redefinir. Aquí se explican los cambios que se le pueden aplicar:

Marca (branding)

Propiedad para definir el logo de la barra de herramientas y el nombre que aparece en ella. También se puede añadir un enlace al ícono convirtiéndolo en un botón.

branding: {
  header: {
    logo: require('assets/logo.png'), // jpg, png, svg
    text: 'Geoportal Demo',
    link: 'https://www.infraplan.cat'
  }
}

Rutas de donde se obtienen los datos del catálogo. Si el catálogo es el de pestañas (antiguo), la ruta será (...)/giscube-admin/geoportal/category, si se utiliza el catálogo de árbol, será (...)/giscube-admin/geoportal/category/catalog.

catalog: {
  categories: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/geoportal/category/catalog/',
  search: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/geoportal/catalog/',
  base: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/',
  auth: true
}

Mapas Base

El geoportal puede tener diferentes mapas base que se cambian mediante el control de capas. Para agregarlos, se define un array con todos los mapas que se deseen agregar.

Si hay mapas de Google, se debe definir la API-key y indicar que es de tipo googleMutant.

El mapa base que se carga por defecto debe tener la propiedad default: true.

basemaps: [
  {
    default: true,
    type: 'tilelayer',
    name: 'Mapa base de fons',
    url: 'https://atilemaps.icgc.cat/mapfactory/wmts/topo_suau/CAT3857/{z}/{x}/{y}.png',
    attribution: '&copy; <a href="https://www.icgc.cat">ICGC</a>',
    maxNativeZoom: 18,
    maxZoom: 21
  },
  {
    type: 'tilelayer',
    name: 'Cartografia oficial',
    url: 'https://xxxxxxx.xxxxxxx.xxx/basemaps/carto2015/{z}/{x}/{y}.png',
    attribution: '&copy; <a href="http://www.xxxx.cat/">Ajuntament de xxxx</a>',
    maxZoom: 21,
    minZoom: 15
  },
  {
    type: 'tilelayer',
    name: 'OpenStreetMap',
    url: 'http://{s}.tile.osm.org/{z}/{x}/{y}.png',
    attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
    maxNativeZoom: 18,
    maxZoom: 21
  },
  {
    type: 'tilelayer',
    name: 'Carto DB',
    url: 'https://dnv9my2eseobd.cloudfront.net/v3/cartodb.map-4xtxp73f/{z}/{x}/{y}.png',
    attribution: '&copy; <a href="http://mapbox.com/about/maps" target="_blank">Carto</a>',
    maxNativeZoom: 18,
    maxZoom: 21
  },
  {
    type: 'googleMutant',
    name: 'Roadmap Google',
    options: {
      type: 'roadmap'
    },
    maxNativeZoom: 18,
    maxZoom: 21
  }
]

Capas Base

Se pueden agregar capas que se carguen por defecto al abrir el geoportal. Para hacerlo, se define la propiedad defaultLayers como un array de las capas que se deseen agregar.

defaultLayer: [
  {
    id: new GiscubeRef('23.13'), // giscube-admin catalog reference
    layerDescriptor: {
      title: 'Layer\'s title',
      type: 'WMS',
      url: 'https://demo.infraplan.cat/apps/giscube-admin/qgisserver/services/layer-name',
      projection: '4326',
      layers: 'layer-name'
    },
    options: {
      // Opciones de capa p.e. min y
       max zoom
    },
    title: 'title',
    auth: false
  },
  {...}
]

Editar fuentes

Las fuentes de los datos que se pueden modificar desde el panel de datos.

editsources: [
  {
    name: 'xxxx',
    url: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/'
  }
],

Sistemas de coordenadas

Sistemas de coordenadas en los que mostrar los resultados (p.e. cuando se hace clic en el mapa).

Para hacer cambios en los sistemas de coordenadas se utiliza la librería proj4, por lo tanto, los sistemas de referencia se definirán siguiendo su sintaxis.

epsgs: [
  {
    label: 'Lat/Lon',
    code: 'EPSG:4326',
    def: '+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees',
    format: ([x, y]) => `${y.toFixed(6)}°, ${x.toFixed(6)}°`
  },
  {
    label: 'UTM (ETRS89)',
    code: 'EPSG:25831',
    def: '+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs',
    format: ([x, y]) => `${x.toFixed(2)}m, ${y.toFixed(2)}m`
  }
]

API de Google

Los mapas y herramientas de Google necesitan una API-key para poder ser utilizados por terceras personas. Si se quiere utilizar mapas base de Google o StreetView, se debe introducir la API-key en el archivo de configuración.

google: {
  apiKey: 'your-api-key'
}

Mapa Geoportal

Para definir la acción al hacer clic en el mapa.

geoportalMap: {
  queryOnClick: require('components/QueryOnClick.vue').default
}

Inicio

Opciones de configuración de inicio: centro y zoom.

home: {
  center: {
    lat: 41.9,
    lng: 2.7
  },
  zoom: 15
}

Control de capas

Configuración del control de capas. Mostrar o no el panel de acciones (opacidad)

layersControl: {
  itemPanel: true // false si no quieres renderizarlo
}

Layout

Con la propiedad layout se controla la configuración del diseño de la aplicación.

La propiedad geoportalMap corresponde al componente que construye el mapa, el control de capas y la sidebar.

La propiedad header corresponde al componente de la barra de herramientas.

Las herramientas que se incluyen en la barra de herramientas se definen en headerToolbar. Esta propiedad es un array de string u object. Los string corresponden a las herramientas definidas en la propiedad tools de la configuración, deben tener el mismo nombre y aparecerán como un botón en la barra de herramientas. Los object son desplegables, cada uno tiene un ícono, una etiqueta y un array de items que contiene las herramientas que se desean agregar al desplegable. Para poner un espacio (en la barra) o una línea (en el desplegable) se debe incluir un string con guiones (p.ej. ‘—‘).

Si se desea cambiar el componente PlacePanel (panel de resultados) por defecto, se le agrega un componente diferente a defaultComponent. También se puede hacer que el componente cambie dependiendo del caso definiendo una función en strategyOptions.

La propiedad sidebar permite cambiar la configuración de los tamaños del panel.

layout: {
  /* components */
  geoportalMap: require('components/GeoportalMap.vue').default,
  header: require('components/AppHeader.vue').default,
  headerToolbar: [
    'home',
    'catalog',
    'streetview',
    'draw',
    '----------',
    'auth',
    {
      icon: 'settings',
      label: 'altres',
      items: [
        'search',
        '----------',
        'data',
        'share',
        '----------',
        'print',
        'fullscreen',
        '----------',
        'contact'
      ]
    }
  ],

  placePanel: {
    defaultComponent: () => require('components/PlacePanel.vue').default,
    strategyField: 'content_type',
    strategyOptions: {
      // 'example_value': () => require('components/PlacePanelBasedComponent.vue').default
    }
  },

  sidebar: {
    initialWidthPercentage: 30,
    minWidthPixels: 300,
    minWidthPercentage: 24,
    steps: [24, 45, 60, 75]
  }
}

Idioma

Definir en qué idioma se desea el geoportal. Actualmente, se admiten el catalán y el inglés.

locale: {
  main: 'ca',
  fallback: 'en-us'
}

Oauth

La autenticación de la conexión entre el geoportal y el administrador se realiza mediante la propiedad oauth. Se define el tipo de autenticación, el ID de cliente (definido en el administrador en Inicio/Seguridad/Aplicación/Geoportal). También se definen las rutas de token y revokeToken para registrar el login y logout en la aplicación. Finalmente, se define la propiedad profile para indicar qué usuario está logeado a la aplicación.

oauth: {
  type: 'password',
  client_id: 'b84uwJOlbtjeTAtThoazZFssE4RimQh3kyEiA8Z2',
  token: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/o/token/',
  revokeToken: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/o/revoke-token/',
  profile: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/geoportal/api/v1/profile/'
}

Motor de búsqueda

Clase que gestiona las búsquedas en el panel de búsqueda, por defecto la clase Search del geoportal.

searchEngine: Search

Búsquedas

Las API’s de búsqueda se definen como un array en la propiedad searches. Se definirá la URL y si se requiere iniciar sesión o no.

searches: [
  {
    name: 'geoportal',
    title: 'Geoportal search',
    url: 'https://xxxxxxx.xxxxxxx.xxx/apps/giscube-admin/geoportal/search/',
    auth: true
  }
]

sentry

Pendent definició

Herramientas

Definir las herramientas del geoportal. Cada herramienta debe tener un ícono (para colocarlo en el Header) y, o bien una ruta, o bien una acción. Las rutas serán un string y las acciones serán una function.

Además, también se puede definir la función supported() para indicar si la herramienta puede o no ser utilizada (por ejemplo, si son herramientas reservadas para usuarios con sesión iniciada o si se pueden utilizar en un dispositivo móvil).

Finalmente, se puede agregar la propiedad headerComponent si se desea cambiar el componente de la herramienta en el Header.

tools: {
  auth: {
    icon: 'las la-user', // icono de la herramienta en el Header
    to: 'auth', // ruta de la herramienta, cuando se active irá a la ruta definida en el router .../geoportal/#/auth
    headerComponent: require('components/header/AuthHeaderItem.js').default // el componente de la herramienta auth será AuthHeaderItem
  },
  catalog: {
    icon: 'las la-compass',
    to: 'catalog'
  },
  data: {
    icon: 'las la-pencil-alt',
    to: 'data',
    supported () {
      return !!this.$store.state.auth.username // solo aparecerá la herramienta si el usuario ha iniciado sesión
    }
  },
  fullscreen: {
    supported () {
      return this.$q.fullscreen.isCapable // solo aparecerá la herramienta si el dispositivo es capaz de hacer fullscreen
    },
    icon () {
      return this.$q.fullscreen.isActive ? 'fullscreen_exit' : 'fullscreen' // el icono depende del estado de fullscreen
    },
    action () {
      this.$q.fullscreen.toggle() // función que se ejecuta cuando se activa la herramienta
    }
  }
}