Saltar al contenido

Conectando QGIS a hojas de cálculo de Google

Hola, tenemos la respuesta a lo que estabas buscando, has scroll y la hallarás un poco más abajo.

Solución:

Hay una forma de conectar la hoja a través de la API de hojas de Google, como mencionó Cezar. Las instrucciones se pueden encontrar aquí. Después de conectarse a la API, debe crear un script de Python (pyQGIS) que se extraiga de la hoja de Google y cree puntos para la capa, se puede encontrar un tutorial aquí. Creé un ejemplo (con información confidencial eliminada) que adjunto a continuación. Este código aún no está completo. Una vez que lo limpie, intentaré publicarlo como una barra de herramientas. Mientras tanto … simplemente agregue su ID de hoja y nombre de hoja / rango.

#load the required packages/libraries/etc
from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from qgis.PyQt.QtCore import QVariant

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']

# The ID and range of a sample spreadsheet.
SAMPLE_SPREADSHEET_ID = 'SHEETID'
SAMPLE_RANGE_NAME = 'DATA_SHEET!Range:'


#adapted from quickstart
def getDataFromTable():
    """Shows basic usage of the Sheets API.
    Prints values from a sample spreadsheet.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('sheets', 'v4', credentials=creds)

    # Call the Sheets API
    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                                range=SAMPLE_RANGE_NAME).execute()
    values = result.get('values', [])
    return values


data = getDataFromTable()
headers = data.pop(0)

#now we can start the qgis-y stuff
vl = QgsVectorLayer("Point", "temp", "memory")
pr = vl.dataProvider()
for attrb in headers: 
  pr.addAttributes([QgsField(attrb, QVariant.String)])

vl.updateFields()

for datum in data:
    print(datum)
    f = QgsFeature()
    f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(float(datum[12]),float(datum[11]))))
    f.setAttributes(datum)
    pr.addFeature(f)
    vl.updateExtents()
    QgsProject.instance().addMapLayer(vl)

Hemos estado incorporando Google Sheets en QGIS a través de contenedores de datos externos de PostgreSQL. Luego, construimos una vista materializada que conecta los registros con la geometría (a través de School Numbers, por ejemplo) y usamos la vista materializada como una tabla espacial estándar.

Desde allí, también publicamos esta ‘vista materializada de la hoja de Google’ en una aplicación web a través de node.js y agregamos un botón para actualizar el mapa si se han cambiado los datos de la hoja de Google. Funciona muy bien.

Método 1: Extensión Multicorn FDW y GSheets:

(Nota: La extensión de la hoja de cálculo gss para el FDW multicornio se mantiene de manera cuestionable, y existe el riesgo de que la v4 de la API de GSheets pueda romperla … aún no lo sabemos y estamos planeando la posibilidad de que tengamos que implementar Método 2 (a continuación) si de hecho se rompe).

Para conectarse a una hoja de Google a través de PostgreSQL FDW, use Multicorn FDW:

https://github.com/Kozea/Multicorn

Luego instale la extensión gspreadsheet_fdw para Multicorn:

https://github.com/lincolnturner/gspreadsheet_fdw

En PostgreSQL, cree el FDW multicornio:

CREATE SERVER multicorn_gspreadsheet
    FOREIGN DATA WRAPPER multicorn
    OPTIONS (wrapper 'gspreadsheet_fdw.GspreadsheetFdw');

Luego cree la tabla FDW que se conecta a la hoja de Google utilizando la extensión gspreadsheet de multicorn:

CREATE FOREIGN TABLE speced_fdw.centerprogram_current_gsheet (
    column1 integer NULL,
    column2 varchar NULL,
    column3 varchar NULL 
)
SERVER multicorn_gspreadsheet
OPTIONS (keyfile '/usr/pgsql-9.5/share/credential.json', gskey 'example_d33lk2kdislids');

Ahora tiene una tabla externa que apunta directamente a su hoja de Google, desde la que puede crear una vista materializada.

Método 2: Uso de FILE_FDW y CSV GSheet Export:

La otra opción es usar FILE_FDW directamente desde PostgreSQL y conectarse a la exportación CSV de GSheet usando WGET.

Primero, crea el servidor:

CREATE SERVER fdw_files
    FOREIGN DATA WRAPPER file_fdw
    OPTIONS ()

Luego crea la tabla FDW:

CREATE FOREIGN TABLE public.test_file_fdw (
    "name" varchar NOT NULL,
    "date" varchar NULL,
    "address" varchar NULL
)
SERVER fdw_files
OPTIONS (program 'wget -q -O - "https://docs.google.com/spreadsheets/d/2343randomurlcharacters_r0/export?gid=969976&format=csv"', format 'csv', header 'true');

Las opciones anteriores para wget se enumeran aquí: https://www.gnu.org/software/wget/manual/html_node/HTTP-Options.html

La opción más básica es exportar la tabla como un archivo CSV e importarla en QGIS. Tienes la opción de mira el archivo para actualizaciones.

Si exportar archivos CSV no es una opción, puede usar una hoja de cálculo de escritorio y conectarla a una base de datos, o usar una base de datos en primer lugar. Se puede encontrar un buen ejemplo de la práctica real en una respuesta anterior.

También debe mirar la API de Google Sheets para ver si puede usarla de alguna manera.

Reseñas y calificaciones de la guía

Recuerda que puedes dar recomendación a esta crónica si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *