[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