Giter Site home page Giter Site logo

de-qua / v4w_website Goto Github PK

View Code? Open in Web Editor NEW
4.0 3.0 1.0 216.45 MB

A Flask-powered framework for the dequa web platform. Currently in development from full site to just API backend.

License: GNU Affero General Public License v3.0

Python 22.42% HTML 12.21% CSS 3.02% JavaScript 55.29% Jupyter Notebook 1.35% Mako 0.03% Shell 0.01% Less 2.81% SCSS 2.85%
backend flask flask-api maps venice

v4w_website's People

Contributors

dependabot[bot] avatar freerafiki avatar lucatastrophe avatar lychfindel avatar plenoptictoolbox avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

drzedd42

v4w_website's Issues

BugTracer

Costruiamo il nostro bugtracer
ogni volta che troviamo un bug clicchiamo il bottoncino (che avra l'icona dell'insetto, quindi bug) che crea un file (pickle, json, csv, come vogliamo) per il singolo bug
Parallelamente creiamo una pagina per visualizzare e gestire i bug. Una parte della pagina e esterna, magari il chiuderli resta interno!

iFrame handling

Come possiamo gestire gli iFrame in modo che possiamo embeddare la nostra pagina, ma non tutti possono?

Multipoligoni

fastidiosi - dobbiamo gestirli e convertirli a poligoni (multipoligoni non sono neanche supportati da leaflet

Salvare nel database la shape di ogni indirizzo

Se salviamo la linea per ogni indirizzo il bound[0:2] è la coordinata del nodo sul grafo spezzettato (ancora da testare per le performance). A quel punto, quando passiamo la path da plottare a leaflet, gli aggiungiamo la shape dell'indirizzo, e magicamente il percorso diventa perfetto.
Diventa molto importante individuare l'indirizzo dei POI per poter avere questo effetto magico. Si potrebbe individuare cercando quale dei bound[2:4] è il più vicino alle coordinate del POI in fase di costruzione del database, con un certo livello di tolleranza (deve essere molto vicino per essere attribuito a quell'indirizzo) e con dei distinguo a seconda della categoria del POI.
Questa issue è strettamente collegata alla #12 ma riguarda specificatamente la costruzione del db.

Proposta strutturazione in classi

Potrebbe essere una cazzata, ma penso che il calcolo del percorso breve, potrebbe essere strutturato in una classe, dandogli una struttura organizzata, perché mi accorgo che abbiamo sempre più manipolazioni da fare. La classe potrebbe lavorare così:
viene inizializzata con una location di partenza, una di arrivo (magari opzionale se poi vogliamo inventare le passeggiate casuali) e i grafi (anche questo opzionale, solo grafo terrestre o solo grafo acqueo o entrambi).
I suoi metodi le permettono di:

  • trovare i nodi più vicini alla location (in base al tipo di location richiede operazioni diverse), su uno o più grafi;
  • calcolare il percorso con diversi tipi di peso (le funzioni peso sono suoi metodi privati)
  • aggiungere frammenti di percorso (da porta a strada)
  • modificare il percorso con lo shift se accedi con get_path_to_leaflet()
  • verificare l'altezza dell'acqua dal portale e calcolare il percorso a piedi asciutti, o se richiedi il percorso in barca il percorso dove i ponti sono alti a sufficienza.
  • altre cose che aggiungeremo....

Uno dei vantaggi di questa struttura è che aiuta a pensare la generazione di percorsi diversi da confrontare. Ma se ne può anche fare a meno, me ne rendo conto!

127 Strade senza alcuna shape

127 strade vuote su 2828:
[CASSELERIA, CAMPIELLO GIOVANNI ANDREA DELLA CROCE O DE LA MALVASIA, CAMPO UGO FOSCOLO GIA' DE LE GATE , RIVA DEI SCHIAVONI, LISTA VECHIA DEI BARI, CORTE SPECHIERA, CORTE DE LE PIZZOCHERE, RIO TERA' SAN PATERNIAN, FONDAMENTA ZORZI O BRAGADIN DETTA DE L'OSPEDALETO, CALLE DE LE BECCARIE, FONDAMENTA VENIER DAI LEONI, GHETTO VECHIO, PONTE DEI LUSTRAFERI, RIO TERA' SAN SILVESTRO, CORTE CONTARINA, FONDAMENTA DEL RIO MARIN O DEI GARZOTI, SALIZADA SANTISSIMI GIOVANNI E PAOLO O ZANIPOLO, FONDAMENTA DEL SOCORSO, CORTE SABIONCELA, ZATTERE AL PONTE LONGO, RIO TERA' DEI GESUATI, CALLE SECO MARINA, RIO TERA' BARBA FRUTARIOL, SOTOPORTEGO DE MEZZO, RAMPA SAN BASILIO, FONDAMENTA DEL MALCANTON, CALLE DE LA BISSA , RIO TERA' DEI BIRI O DEL PARSEMOLO, CORTE SORANZO, PONTE DEL MODENA, RAMO DE MEZO, PONTE DE RIALTO, RUGHETA DEL RAVANO, RIO TERA' DEL BAGATIN, CAMPO SANTISSIMI GOVANNI E PAOLO O ZANIPOLO, CALLE SAN ZULIAN GIA' DEL STRAZZARIOL, CAMPIELLO DE L'ANCONETA, CAMPIELLO DE LE STROPE, RIO TERA' SANT'APONAL, CALLE SECHERA, CALLE DE LE BECARIE, RAMO SECONDO DE LA PEGOLA O DE L'ARSENAL, CAMPO CESARE BATTISTI GIA' DE LA BELLA VIENNA, CORTE BOTERA, CHIOVERETE DE S. SIMON, CALLE DEI BOTTERI, PONTE DEI BARETERI, CORTE DEL LUGANEGHER, RAMO DE LA SALIZADA, CALLE DE LA PANADA, CORTE DEL FORNO VECHIO, FONDAMENTA SAN GIOACHIN, SALIZADA STRETA, CAMPO DE LE BECARIE, SALIZADA DEI SPECHIERI, SALIZADA SAN GIOVANNI CRISOSTOMO, CORTE DEL TEATRO VECHIO, FONDAMENTA TRAPOLINA, FONDAMENTA DEI ARSENALOTI O PORTINARI, CAMPIELLO DEL BOTER, RIO TERA' DEI NOMBOLI, CALLE TERAZZERA, PONTE DE LE BECARIE, CALLE DE MEZZO, SALIZZADA DEL FORNO, RAMO DE LE MOSCHETE, FONDAMENTA TRAPOLINA , CAMPIELLO DE LE BECARIE, CALLE DE LA SCUOLA DEI BOTERI, SALIZZADA DE LA CHIESA O DEL TEATRO, FONDAMENTA DE LE ZATTERE AI SALONI, CAMPIELLO WIDMANN GIA' BIRI, PONTE SAN PANTALON, CAMPIELLO DEI CALEGHERI, CALLE DE L'OCHIO GROSSO, RIO TERRA', CORTE TRAPOLINA, CAMPO DE LE STROPE, CORTE DEL BAGOLARO, CAMPIELLO DEL BATELO, CORTE DEL SABION, CAMPIELLO DEL CENTOPIETRE GIA' CENTO PIETRE, CORTE DE LA PAZIENZA, CORTE DE LE PIZZOCARE, CORTE DEI VEDEI, RIVA CA' DI DIO, PONTE SAN GIOVANNI GRISOSTOMO, RAMO BRUSA', CORTE DEL SQUERO VECHIO, PONTE BALBI, FONDAMENTA DE LE SECHERE, PASINA, RAMO DRIO AI INCURABILI, CAMPIELLO ZEN GIA' CERESA, PONTE DEI CONSORZI, CALLE GALEAZZA, CALLE MORANDO, CALLE DEI ZOTTI, CALLE COLONNELLA, CORTE TERAZZER, CORTE CONTARINI, CORTE DE CA' PISANI, PONTE DEL RIMEDIO, PONTE DE LA CROSE, CALLESELA QUERINI, PONTE SANT'ANTONIO, SOTOPORTEGO TRAPOLINA, SOTOPORTEGO CA' POZZO , ORTE DEL CAPPELLAN, FONDAMENTA DEL REMEDIO, FONDAMENTA DEL BATECLO, CALLESELE, CORTE ZCONTARINI, PIAZZALE TRONCHETTO, CALLE STRETTA MOROSINI O PISANI, PONTE CAVALLO, PONTE DEI FUSERI, CALLE DEL FRUTAROL DETTO DE LA MALVASIA, CAMPO SANTA MARIA MAGGIORE, CAMPO SAN CASSIAN, PONTE DE LA GUERRA, PONTE DE L'ANCONETA, CALLE DE LA RIVETA, PONTE DEL CRISTO, CALLE QUERINI, CAMPIELLO MARINONI O DELLA FENICE, PONTE GIAMBATTISTA GALLICCIOLI GIA' DEI MORTI]

calcolo dei tempi di percorrenza

implica il cambio di metodo per il calcolo del percorso breve (senza ponti), in modo che ritorni anche la lunghezza del percorso.
Per il prercorso con ponti rischia di essere più complicato: un'idea potrebbe essere far pesare i ponti 100000, in modo che dividendo la lunghezza per 100000 e sottraendolo alla lunghezza, ci ritroviamo con la lunghezza giusta. Il difetto è che ci toglie la possibilità di avere una "scala di pigrizia", anche se non ci sono particolarmente affezionato. La soluzione lunga è fare una piccola funzione che calcola la lunghezza del percorso senza usare i metodi di networkx (o magari c'è un metodo di nt che calcola solo la lunghezza!)

Automatizzare download POI

Bisognerebbe eliminare lo scaricamento dei poi tramite Java e automatizzarlo (in modo da farlo andare ad esempio una volta a settimana).
La cosa bella è che (come quasi sempre) è già tutto fatto: https://towardsdatascience.com/loading-data-from-openstreetmap-with-python-and-the-overpass-api-513882a27fd0

Qua la libreria utilizzata: http://overpass-api.de/
Qua un sito che fa la stessa cosa della libreria ma da browser: http://overpass-turbo.eu/ (basta che vi spostiate su venezia e runniate

node
  [amenity]
  ({{bbox}});
out;

Rappresentazione mappa

Attualmente noi stiamo utilizzando la mappa base di OSM.
Ci sono alcune cose che non mi piacciono, in particolare il fatto che alcuni simboli di POI siano mostrati e la maggior parte di questi sono alberghi e b&b.
Propongo di avere una rappresentazione nostra in cui decidiamo noi cosa mostrare e cosa no (ad esempio io proporrei solo nomi strade e fontanelle).
Cercando un po' in internet mi pare di capire che si possano creare i tiles personalizzati usando questo: http://maperitive.net/ oppure possiamo trovare online qualcuno che abbia già dei tiles che ci vadano bene.
Se creiamo i nostri tiles con maperitive possiamo anche utilizzarli direttamente senza doverli ogni volta caricare da OSM (non so però quanto pesino i file)

Tutorial

tutorial o un esempio di cosa si puo fare e come si puo testare

Convertitore

piccoli metodi in utils.py o in un'altra libreria per convertire

  • un numero in metri a un numero nel nostro sistema di riferimento (o viceversa)
  • una coordinata + un numero in metri in una coordinata nel nostro sistema di riferimento

Indirizzo non precisissimo quando si calcola il percorso

Attualmente invece di calcolare il percorso esatto tra due indirizzi, ovvero:
indirizzo A -> indirizzo B
estraiamo dall'indirizzo il nodo più vicino, quindi ora abbiamo:
nodo più vicino a indirizzo A -> nodo più vicino a indirizzo B

Modificare funzione di ricerca

  1. find_address_in_db cerca e ritorna una string che fetch_coordinates usa. Se find_address_in_db ritorrnasse l'oggetto, fetch_coordinates dovrebbe solo estrarre le coordinate e forse non servirebbe neanche usare fetch_coordinates

  2. Gestire meglio alcuni casi, come per esempio:

  • civico sbagliato e sestiere (o strada giusta) - da errore, dovrebbe tornare i 5 civici piu vicini
  • poi senza numero civico - cerca una shape, dovrebbe cercare le coordinate (latitude e longitude)
  1. (OPZIONALE) la ricerca potrebbe ritornare solo alcune colonne del database per migliorare le performances

usare in maniera furba i metodi delle classi all'interno di models.py

  1. repr dovrebbe ritoranre l'oggetto

  2. str dovrebbe ritornare il nome (per strade e sestiere il nome, per POI nome o un codice predefinito se il POI non ha nome)

  3. get_fancy_description o chiamiamolo come vogliamo ci da una descrizione completa. Questo viene usato per visualizzare sulla pagina web la cosa trovata o le cose che abbiamo trovato quando non siamo sicuri, quindi piu informazioni possibili

Riorganizzazione Database

Proporrei di avere gli indirizzi salvati cosi

Sestieri Area Toponimo StopWords ParolaChiave NumeriCivici Coordinate
Cannaregio / Campo San Giovanni e Paolo Campo, San Giovanni e Paolo 3100-3200 coords
Cannaregio / Barbaria delle Tole Barbaria Tole 3200-3400 coords
Santa Croce Santa Marta Ponte Santa Marta Ponte, Santa Santa Marta 167-169 coords

In modo da avere piu liberta nella ricerca e renderla piu flessibile.
Userei un dizionario, perche numericivici e coordinate sarebbero liste (quindi cerchiamo sempre una strada, ponte, piazza, calle e solo dopo il numero)

Poi magari sarebbe da avere una lista diversa solo per i sestieri

Sesitere Civici (lista) Coordinate (lista)
Cannaregio 1-6572 coordinate
San Polo 1-8000 coordinate

in modo che se un utente cerca il sestiere, cerchiamo solo il numero

Lunghezza archi

Gli archi hanno un campo lunghezza ma non è chiara l'unità di misura.
Controllare lo shapefile utilizzato, controllare quali sono i campi dello shapefile e come sono stati importati in networkx.

Questa è issue è direttamente collegata al calcolo dei tempi di percorrenza (#13)

How To Contribute

creare delle linee guida in github e una sezione nella documentazione che sia leggibile e magari dividere in contenuti tecnici e non tecnici

esempi:

  • gcc (https://gcc.gnu.org/contribute.html) - non si capisce nulla, la prima roba scritta dice che servono requisiti legali - ok per i malvagi e probabilmente molto ben strutturata, ma non proprio accogliente
  • libreadvice (https://libreadvice.org/contribute/) - piu semplice, tipo seguici sui social o scrivici qua - forse poco efficace perche la gente contribuisca, ma piu accogliente
  • disroot (https://howto.disroot.org/en/contribute/ways2contribute) - un casino arrivarci e magari capire all'inizio, ma secondo me la migliore come idea - dare alla gente istruzioni su come fare tutorial per le cose semplici (creare un account, cambiare la password ecc) e aggiungere un "Technical level required: Basic." in modo che uno capisca che puo aiutare senza essere malvagio (per alcune cose)

[Example] Good first Issue

Per fare una segnalazione per un problema, quello che a noi aiuta molto sarebbe avere il contesto e gli step per riprodurla.

Informazioni utili:

  • tempo (data e ora, in modo da poter guardare i log per vedere cos'e successo)
  • descrizione degli step (aperto la pagina, cercato questo, successo questo)
  • piattaforma (telefono, tablet, computer, browser)
  • come vorreste che funzionasse
  • (inattiva per ora) screenshot del problema, dove possibile (bisogna che capiamo come caricarlo)

Esempio Segnalazione:

Data: 23.06.2020, 14:42
Steps:

  • Apro la pagina dequa.it/acqueo,
  • cerco di calcolare la strada tra 2 punti
  • Partenza san polo
  • Arrivo piazza san marco
  • la strada non viene calcolata (o almeno non visualizzata)

Piattaforma
telefono
Corretto sarebbe
La mappa mostra la strada da san polo a san marco

Nel caso in cui vogliate proporre una nuova funzionalita, semplicemente descrivere la funzionalita e magari aggiungere un disegno per farci capire come dovrebbe funzionare.

Esempio nuova funzionalita':

Bar nei dintorni:

mi piacerebbe avere una funzionalita per cui io clicco sulla mappa e la interrogo per sapere se ci sono dei bar nei dintorni, che verranno visualizzati con dei marker sulla mappa. Dovrebbe funzionare sia su telefono e computer con un clic prolungato.

Grazie!

ricerca asincrona

studiare la ricerca asincrona

  1. come funziona mentre l'utente digita sulla barra di ricerca

  2. possiamo gestire il tutto asincrono? pythonanywhere + threads?
    2b. asincrona e solo esatta o anche con wuzzy?

find_POI

wrapper in modo che in routes.py possiamo fare:
POI_vicini = find_POI(X, coordinata, poiCategory, poiCategoryType)
e il metodo faccia

find_POI(X, coordinata, poiCategory, poiCategoryType)
   cerchi concentrici che si allargano fino a che non troviamo X POI
   return lista con POI, category, categoryType

facendo attenzione che

  • i cerchi siano rapidi (che crescano velocemente)
  • poiCategory sono le keys del dizionario di OSM
  • poiCategoryType sono i values del dizionario di OSM
  • se non mettiamo poiCategoryType prendiamo tutti i type

Bug in fuzzywuzzy

La ricerca di fuzzywuzzy ha dei bug importanti con python 3.7 (seatgeek/fuzzywuzzy#216).
Noto ora che la libreria non è aggiornata da un bel po'.
La mia proposta è forkare la libreria da github e metterla a posto per farla funzionare senza errori.

Un piccolo workaround per evitare errori macroscopici è cambiare la funzione di scorer:

> process.extract("Zattere",choices)
[(<Poi(id=1031,name='A',types=['ferry_terminal (amenity)'])>, 90),
 (<Poi(id=1515,name='Alle Zattere',types=['restaurant (amenity)', 'italian (cuisine)'])>,
  90),
 (<Poi(id=1517,name='Alle Zattere',types=['restaurant (amenity)'])>, 90),
 (<Poi(id=1802,name='Scuola materne "Isidoro Barbon"',types=['kindergarten (amenity)'])>,
  64),
 (<Poi(id=1858,name='Latteria 2465',types=['restaurant (amenity)'])>, 64)]

> process.extract("Zattere",choices,scorer=fuzz.token_set_ratio)
[(<Poi(id=1515,name='Alle Zattere',types=['restaurant (amenity)', 'italian (cuisine)'])>,
  100),
 (<Poi(id=1517,name='Alle Zattere',types=['restaurant (amenity)'])>, 100),
 (<Poi(id=1952,name='Santa Teresa',types=['place_of_worship (amenity)', 'church (building)'])>,
  63),
 (<Poi(id=1509,name='Ai Botteri',types=['restaurant (amenity)', 'italian (cuisine)'])>,
  59),
 (<Poi(id=2204,name='Panetteria',types=['bakery (shop)'])>, 59)]

> process.extract("Zattere",choices,scorer=fuzz.token_sort_ratio)
[(<Poi(id=1515,name='Alle Zattere',types=['restaurant (amenity)', 'italian (cuisine)'])>,
  74),
 (<Poi(id=1517,name='Alle Zattere',types=['restaurant (amenity)'])>, 74),
 (<Poi(id=1952,name='Santa Teresa',types=['place_of_worship (amenity)', 'church (building)'])>,
  63),
 (<Poi(id=1509,name='Ai Botteri',types=['restaurant (amenity)', 'italian (cuisine)'])>,
  59),
 (<Poi(id=2204,name='Panetteria',types=['bakery (shop)'])>, 59)]

> process.extract("Ospedale",choices)
[(<Poi(id=1031,name='A',types=['ferry_terminal (amenity)'])>, 90),
 (<Poi(id=1920,name="Chiesa dell'Ospedaletto",types=['place_of_worship (amenity)', 'church (building)'])>,
  90),
 (<Poi(id=1949,name='Ospedale Giustinian',types=['hospital (amenity)'])>, 90),
 (<Poi(id=1470,name='Istituto Ospedaliero Fatebenefratelli',types=['hospital (amenity)'])>,
  79),
 (<Poi(id=937,name='Cea',types=['restaurant (amenity)'])>, 60)]

> process.extract("Ospedale",choices,scorer=fuzz.token_set_ratio)
[(<Poi(id=1949,name='Ospedale Giustinian',types=['hospital (amenity)'])>, 100),
 (<Poi(id=246,name='Posteitaliane',types=['post_office (amenity)'])>, 57),
 (<Poi(id=281,name='Salute',types=['ferry_terminal (amenity)'])>, 57),
 (<Poi(id=9677,name='Salute',types=['roof (building)'])>, 57),
 (<Poi(id=2780,name='Donà Palace',types=['hotel (tourism)'])>, 56)]

> process.extract("Ospedale",choices,scorer=fuzz.token_sort_ratio)
[(<Poi(id=1949,name='Ospedale Giustinian',types=['hospital (amenity)'])>, 59),
 (<Poi(id=246,name='Posteitaliane',types=['post_office (amenity)'])>, 57),
 (<Poi(id=281,name='Salute',types=['ferry_terminal (amenity)'])>, 57),
 (<Poi(id=9677,name='Salute',types=['roof (building)'])>, 57),
 (<Poi(id=2780,name='Donà Palace',types=['hotel (tourism)'])>, 56)]

Eliminare file pesanti da repo

Gli shapefile sono molto pesanti e sono utili solo in fase di inizializzazione del database o di creazione del grafo. Il fatto che siano pesanti, oltre a un mio problema personale visto che ho il computer strapieno, è la causa per cui su pythonanywhere abbiamo poco spazio libero. Propongo quindi di eliminare i file dalla repo e, in caso di necessità, scaricarli da una cartella online.
Qua c'è una vecchia cartella condivisa che avevo creato tempo fa, potremmo usare questa o crearne un'altra da un'altra parte: https://mega.nz/folder/ModGiYpT#ga7VXQeAAbGKDejkSX2gpg

riorganizzazione codice

creare un file interface.py che gestisce le richieste del sito e le forwarda alle librerie
quindi:
-routes fa solo routing e chiama un metodo di interface con mille flag
-- interface chiama i metodi delle altre librerie che sono
--- library_database (gestione database, update delle tabelle, ecc)
--- library_communication (comunicazione tra python e javascript)
--- library_graph (lavoro sul grafo networkx)
--- library_search (ricerca nel database, fuzzy search eeccetera)

Modifiche alle tabelle del database

  1. aggiungere una colonna per i punteggi

  2. aggiungere un collegamento one-to-many sestiere --> location

  3. aggiungere i campi nullable per i nomi (e anche per la shape?)

Funzione di test

Scrivere una buona funzione di test per poter verificare sempre che il nuovo codice non crei errori su cose pregresse.
La funzione dovrebbe avere dei semplici ma significativi test su database, ricerca, percorso.
Ovviamente la funzione deve essere facilmente implementabile con nuovi test.

Una proposta interessante è creare un'ulteriore funzione che faccia i test prima di ogni push per verificare che non venga pushato del codice con errori. Forse però questo è esagerato e alla fine può addirittura risultare scomodo… da decidere!

Correzione del sistema di riferimento

TLDR: Cambiare i parametri di trasformazione quando importiamo gli shp file

I dati del comune sono nel sistema di riferimento Monte Mario 2 (EPSG:3004), le mappe di OSM sono invece in WGS84 (EPSG:3857), bisogna quindi fare una trasformazione di coordinate per sovrapporre le coordinate dei dati del coune con la mappa OSM.
La trasformazione di default non è ottimale perché usando noi solo venezia non è ottimizzata per la città
Schermata 2020-06-28 alle 19 23 28
La regione FVG ha modificato leggermente i parametri di trasformazione per ottimizzarli sul territorio del FVG (discussione su google group).
Partendo da quelli del FVG si possono ottimizzare ancora di più per Venezia.
Dopo alcune prove empiriche basate su campo san luca, i parametri che sembrano ottimali per venezia sono:
+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-130.5633,-29.2694,-6.12,-1.05572,-2.6951,-2.28808,-16.9352 +units=m +no_defs
Oppure formattati in wkt:
PROJCS["unnamed",GEOGCS["International 1909 (Hayford)",DATUM["unknown",SPHEROID["intl",6378388,297],TOWGS84[-130.5633,-29.2694,-6.12,-1.05572,-2.6951,-2.28808,-16.9352]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2520000],PARAMETER["false_northing",0],UNIT["Meter",1]]
Questo il risultato utilizzando la nuova proiezione:
Schermata 2020-06-28 alle 19 28 59

Il tutto sembra quindi risolto, l'unica cosa da fare nel codice è cambiare la trasformazione che effettuiamo sugli shapefile da quella standard a quella con i nuovi parametri.

Reference db - grafo

Riusciamo ad avere un collegamento univoco tra grafo e db? Ogni nodo nel grafo potrebbe avere un ID o un modo per essere ricollegato a un elemento del db, e la stessa cosa vale per gli archi. Ma al momento le cose sono diverse e non sembra cosi facile..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.