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.