database locale da igm95 online

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

database locale da igm95 online

Ely Parker
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.




_______________________________________________
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: database locale da igm95 online

pcav
Il 13 marzo 2017 00:55:08 CET, Ely Parker <[hidden email]> 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.
>
>
>
>
>_______________________________________________
>[hidden email]
>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
_______________________________________________
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: database locale da igm95 online

Ely Parker
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


_______________________________________________
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: database locale da igm95 online

pcav
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
_______________________________________________
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: database locale da igm95 online

Ely Parker
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

_______________________________________________
[hidden email]
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
Loading...