[Gfoss] database locale da igm95 online
Ely Parker
elyparker1 a gmail.com
Lun 13 Mar 2017 00:54:58 CET
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
Maggiori informazioni sulla lista
Gfoss