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





_______________________________________________
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

Rispondere a