[Gfoss] database locale da igm95 online

salve a tutti

volevo condividere qualche scritp che ho costruito magari qualcuno suggerisce qualche cambiamento

in particolare volevo costruirmi una base di dati locale dei punti igm95

http://www.igmi.org/geodetica/

immagino che non sia precisa ma tantè visto che è gratis

penso sia una cosa utile

prerequisiti bash,wget,python

1)prima fase scaricare capisaldi igm95 che ci interessano

su linux si usa direttamente bash su windows bisogna andare in osgeo shell e lanciare bash

poi dare le seguenti riche di codice dando invio

c=1

while [ $c -lt 1000 ]; do wget -E -k -m http://37.207.194.154/ware/schedaigm95.php?id=$c;

let c=c+1;

done

questo codice prelevere i punti da 1 al 1000 completi di immagine se vi interessa altro potete variare gli estremi (1 e 1000) su cui varia la c, le opzioni che ho messo su wget creano una copia locale dei punti completi di immagini se non vi interessano potete toglierle

2) creare un file gis.py (o come vorreste chiamarlo) nella stessa cartella dove sono le schede con il seguente codice

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup

import sys

import csv

import argparse

import os

parser = argparse.ArgumentParser(description='legge una scheda igm95 e la converte in csv.')

parser.add_argument('--delimiter', '-d', action='store', default=';',help="Carattere per separare le colonne csv")

parser.add_argument('--quotechar', '-q', action='store', default='"',help="carattere per contenere testi csv")

parser.add_argument('filename',nargs="?",help="SCHEDA HTML IGM95 da cui estrarre i dati")

args = parser.parse_args()

if sys.stdin.isatty() and not args.filename:

   parser.print_help()

   sys.exit(-1)

elif not sys.stdin.isatty():

   args.filename = sys.stdin

else:

   args.filename = open(sys.argv[1],'r')

#print "Opening file"

fin = args.filename.read()

#print "Parsing file"

soup = BeautifulSoup(fin,convertEntities=BeautifulSoup.HTML_ENTITIES)

#print "Preemptively removing unnecessary tags"

[s.extract() for s in soup('script')]

img=soup.findAll('a')

t=soup.findAll("td")

h=[u"n.",u"Nome:",u"Cart S 25:",u"Cart S 25V:",u"Nazione:",u"Regione:",u"Provincia:",u"Comune:",u"Carabinieri:",\

u"ROMA40 φ:".encode('utf-8'),u" R40 λ:".encode('utf-8'),u"F.O. N.:",u" F.O. E.:",u"F.E. N.:",u" F.E. E.:",\

u"ETRF2000 φ:".encode('utf-8'),u"ETRF2000 λ:".encode('utf-8'),u"F.32 N.:",u" F.32 E.:",u"F.33 N.:",u" F.33 E.:",\

u"Q.S.l.m:",u" QEll.:",u"Materializzazione:",u"Accesso:",u"Informazioniausiliare:",u"Categoriadel punto:",u"Quota s.l.m.:",\

u"Produttore:",u"Segnalizzato:",u"Ultima ricognizione:",u"Collegamenti:",u"M img:",u"C img",u"F img1",u"F img2"]

riga=

riga.append((soup.title.text.encode('utf-8')[18:]))

if os.path.isfile('igm95.csv'):

     csvfile=open('igm95.csv',"ab")

     fout = csv.writer(csvfile, delimiter=args.delimiter, quotechar=args.quotechar, quoting=csv.QUOTE_MINIMAL)

else:

     csvfile=open('igm95.csv',"wb")

     fout = csv.writer(csvfile, delimiter=args.delimiter, quotechar=args.quotechar, quoting=csv.QUOTE_MINIMAL)

     fout.writerow(h)

for i in (2,4,8,10,12,14,16, 25,33,41,46,51,56, 28,36,43,48,53,58, 31,39, 61,63,65,67,69,71,73,76,79):

     s=t[i].text.encode('utf-8')

     if i==4 :

         a=s.split(",")

         riga.append(a[0][9:])

         riga.append(a[1][10:])

         continue

     elif i>= 41 and i<=58 :

         s=s[2:]

     elif i==61 : s=s.replace(";",".")

     riga.append(s)

riga.append(img[0]['href'].encode('utf-8'))

riga.append(img[1]['href'].encode('utf-8'))

riga.append(img[2]['href'].encode('utf-8'))

riga.append(img[3]['href'].encode('utf-8'))

fout.writerow(riga)

tra le librerie di python ci deve essere
BeautifulSoup

se non c'è installatela
  
a questo punto dentro la cartella con le schede igm

se siete in osgeoshell di windows potete fare

for %i in (*.html) do python gis.py %i

mentre se siete in bash potete fare

for i in $( ls ); do python gis.py $i; done

scusate se non sono stato chiarissimo ma ci dovrebbe essere tutto

saluti

Salvo C.

Il 13 marzo 2017 00:55:08 CET, Ely Parker <elyparker1@gmail.com> ha scritto:

salve a tutti

volevo condividere qualche scritp che ho costruito magari qualcuno
suggerisce qualche cambiamento

in particolare volevo costruirmi una base di dati locale dei punti
igm95

http://www.igmi.org/geodetica/

immagino che non sia precisa ma tantè visto che è gratis

penso sia una cosa utile

prerequisiti bash,wget,python

1)prima fase scaricare capisaldi igm95 che ci interessano

su linux si usa direttamente bash su windows bisogna andare in osgeo
shell e lanciare bash

poi dare le seguenti riche di codice dando invio

c=1

while [ $c -lt 1000 ]; do wget -E -k -m
http://37.207.194.154/ware/schedaigm95.php?id=$c;

let c=c+1;

done

questo codice prelevere i punti da 1 al 1000 completi di immagine se
vi
interessa altro potete variare gli estremi (1 e 1000) su cui varia la
c, le opzioni che ho messo su wget creano una copia locale dei punti
completi di immagini se non vi interessano potete toglierle

2) creare un file gis.py (o come vorreste chiamarlo) nella stessa
cartella dove sono le schede con il seguente codice

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup

import sys

import csv

import argparse

import os

parser = argparse.ArgumentParser(description='legge una scheda igm95 e
la converte in csv.')

parser.add_argument('--delimiter', '-d', action='store',
default=';',help="Carattere per separare le colonne csv")

parser.add_argument('--quotechar', '-q', action='store',
default='"',help="carattere per contenere testi csv")

parser.add_argument('filename',nargs="?",help="SCHEDA HTML IGM95 da cui
estrarre i dati")

args = parser.parse_args()

if sys.stdin.isatty() and not args.filename:

  parser.print_help()

  sys.exit(-1)

elif not sys.stdin.isatty():

  args.filename = sys.stdin

else:

  args.filename = open(sys.argv[1],'r')

#print "Opening file"

fin = args.filename.read()

#print "Parsing file"

soup = BeautifulSoup(fin,convertEntities=BeautifulSoup.HTML_ENTITIES)

#print "Preemptively removing unnecessary tags"

[s.extract() for s in soup('script')]

img=soup.findAll('a')

t=soup.findAll("td")

h=[u"n.",u"Nome:",u"Cart S 25:",u"Cart S
25V:",u"Nazione:",u"Regione:",u"Provincia:",u"Comune:",u"Carabinieri:",\

u"ROMA40 φ:".encode('utf-8'),u" R40 λ:".encode('utf-8'),u"F.O. N.:",u"
F.O. E.:",u"F.E. N.:",u" F.E. E.:",\

u"ETRF2000 φ:".encode('utf-8'),u"ETRF2000 λ:".encode('utf-8'),u"F.32
N.:",u" F.32 E.:",u"F.33 N.:",u" F.33 E.:",\

u"Q.S.l.m:",u"
QEll.:",u"Materializzazione:",u"Accesso:",u"Informazioniausiliare:",u"Categoriadel
punto:",u"Quota s.l.m.:",\

u"Produttore:",u"Segnalizzato:",u"Ultima
ricognizione:",u"Collegamenti:",u"M img:",u"C img",u"F img1",u"F img2"]

riga=

riga.append((soup.title.text.encode('utf-8')[18:]))

if os.path.isfile('igm95.csv'):

    csvfile=open('igm95.csv',"ab")

fout = csv.writer(csvfile, delimiter=args.delimiter,
quotechar=args.quotechar, quoting=csv.QUOTE_MINIMAL)

else:

    csvfile=open('igm95.csv',"wb")

fout = csv.writer(csvfile, delimiter=args.delimiter,
quotechar=args.quotechar, quoting=csv.QUOTE_MINIMAL)

    fout.writerow(h)

for i in (2,4,8,10,12,14,16, 25,33,41,46,51,56, 28,36,43,48,53,58,
31,39, 61,63,65,67,69,71,73,76,79):

    s=t[i].text.encode('utf-8')

    if i==4 :

        a=s.split(",")

        riga.append(a[0][9:])

        riga.append(a[1][10:])

        continue

    elif i>= 41 and i<=58 :

        s=s[2:]

    elif i==61 : s=s.replace(";",".")

    riga.append(s)

riga.append(img[0]['href'].encode('utf-8'))

riga.append(img[1]['href'].encode('utf-8'))

riga.append(img[2]['href'].encode('utf-8'))

riga.append(img[3]['href'].encode('utf-8'))

fout.writerow(riga)

tra le librerie di python ci deve essere
BeautifulSoup

se non c'è installatela

a questo punto dentro la cartella con le schede igm

se siete in osgeoshell di windows potete fare

for %i in (*.html) do python gis.py %i

mentre se siete in bash potete fare

for i in $( ls ); do python gis.py $i; done

scusate se non sono stato chiarissimo ma ci dovrebbe essere tutto

saluti

Salvo C.

_______________________________________________
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni
dell'Associazione GFOSS.it.
808 iscritti al 07/03/2017

Grazie. Potresti metterli su un repo git?
Saluti.
--
Sent from mobile. Sorry for being short

Il 13/03/2017 08:24, Paolo Cavallini ha scritto:

Grazie. Potresti metterli su un repo git?
Saluti.
--

essendo in pratica tre script non so se sia indicato, è piu una procedura che un programma, peraltro va completata con la creazione dello shape finale
ho preferito condividerla ora anche se non completamente matura perchè sapete come sono ste cose uno rimanda rimanda e poi non le fa mai

se ci sono miglioramenti da fare o dubbi così si vedono assieme comunque
saluti
SC

Il 13/03/2017 09:47, Ely Parker ha scritto:

essendo in pratica tre script non so se sia indicato, è piu una
procedura che un programma, peraltro va completata con la creazione
dello shape finale
ho preferito condividerla ora anche se non completamente matura perchè
sapete come sono ste cose uno rimanda rimanda e poi non le fa mai

se ci sono miglioramenti da fare o dubbi così si vedono assieme comunque

scusa se insisto: è poprio per questo che metterli su un repo ha senso.
cosa ci vedi di negativo?
saluti.

--
Paolo Cavallini - www.faunalia.eu
QGIS & PostGIS courses: http://www.faunalia.eu/training.html
https://www.google.com/trends/explore?date=all&geo=IT&q=qgis,arcgis

Il 13/03/2017 10:21, Paolo Cavallini ha scritto:

Il 13/03/2017 09:47, Ely Parker ha scritto:

essendo in pratica tre script non so se sia indicato, è piu una
procedura che un programma, peraltro va completata con la creazione
dello shape finale
ho preferito condividerla ora anche se non completamente matura perchè
sapete come sono ste cose uno rimanda rimanda e poi non le fa mai

se ci sono miglioramenti da fare o dubbi così si vedono assieme comunque

scusa se insisto: è poprio per questo che metterli su un repo ha senso.
cosa ci vedi di negativo?
saluti.

perchè sono tre script di minchia alla fine , niente di piu , e serve un quarto che ancora deve nascere

i repo li vedo piu per progetti piu complessi e piu omogenei

comunque non ho detto che non lo farò, sicuramente lo farò , ma per ora vediamo se ci sono osservazioni interessanti