[Gfoss] mapfile - postgis

Ciao a tutti, sto facendo le prime esperienze nel webgis, sto iniziando
con mapserver+ka-map, dopo aver provato con geoserver ed openlayers, il
tutto sotto debian lenny.
Voglio fare un servizio webgis dei dati di OSM italiani, suddivisi per
tipologia (vie di comunicazione, turismo, negozi ecc ecc).
Per prima cosa ho importato il file osm in postgres, il file manca di
una chiave primaria e perciò ha dei problemi con qgis e mapserver, una
delle soluzioni che ho trovato in rete è di aggiungere il flag "Has
OIDs" in pgadminIII, ma non mi è permesso pur essendo l'amministratore
del database. Ho risolto aggiungendo una colonna seriale con chiave
primaria, anche se non penso sia la soluzione corretta.
Per visualizzare se il mapfile è corretto ho provato shp2img ma il
risultato è un'immagine bianca, presumo perciò in qualche errore. Quello
che segue è quello che fin'ora ho buttato giù. Ultima cosa il file
map.xml per codificare il mapfile su quanta o altri editor dove
dev'essere aggiunto?

map

  name "OPEN STREET MAP ITALIA"
  units DD
  extent 6 35 19 47.5
  status on
  size 600 600
  imagecolor 255 255 255
  imagetype PNG
  
  web

    imagepath "mapserver/ka-map-1.0/htdocs/tmp"
    imageurl "mapserver/ka-map-1.0/tmp"

  end

  projection

    "init=epsg:4326"

  end

  legend

    imagecolor 255 255 255
    outlinecolor 0 0 0
    status on

  end

  layer

    name "strade"
    group "strade"
    status on
    type line
    connectiontype postgis
    connection "user=luca password=********* dbname=gis host=localhost
port=5432"
    data "way from italy_line"
    
    class

      name "autostrade"
      expression ([highway] = motorway)
      
      style

        color 0 160 0
      
      end
    end
  end
end

grazie mille
Luca

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Luca Delucchi ha scritto:

Per prima cosa ho importato il file osm in postgres, il file manca di
una chiave primaria e perciò ha dei problemi con qgis e mapserver, una
delle soluzioni che ho trovato in rete è di aggiungere il flag "Has
OIDs" in pgadminIII, ma non mi è permesso pur essendo l'amministratore
del database. Ho risolto aggiungendo una colonna seriale con chiave
primaria, anche se non penso sia la soluzione corretta.

Ciao Luca,
manca una chiave primaria ma penso che ci sia un campo identificativo
univoco no? In genere si chiama gid o id.
Se c'e' basta trasformare quello in chiave primaria (altrimenti l'idea
di mettere una colonna identificativa con chiave primaria non e' affatto
sbagliata):

da riga di comando:

ALTER TABLE nometabella ADD CONSTRAINT nomechiaveprimaria
PRIMARY KEY (campo_con_id_univoco);

altrimenti da pgadminIII c'e' modo di mettere una chiave primaria su una
colonna.

Poi pero' quando usi mapserver devi dirgli che usi quel campo come
chiave primaria perche', se non ricordo male, di default cerca l'oid di
postgres.

ciao
Lia

- --
Emilia Venturato
email+jabber: venturato@faunalia.it
www.faunalia.it
Tel: (+39) 347-2770007 Tel+Fax: (+39) 0587-213742
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy
http://www.faunalia.it/ev
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIIFV5OsndmJr6cvYRAuGZAJ97c3qa3GIEFt2ZLCoBqvqwTLllAwCeK+lP
jwOXTha/3nhnnt6kroTn+hY=
=Itcm
-----END PGP SIGNATURE-----

Il giorno mar, 06/05/2008 alle 14.56 +0200, Emilia Venturato ha scritto:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Luca Delucchi ha scritto:

> Per prima cosa ho importato il file osm in postgres, il file manca di
> una chiave primaria e perciò ha dei problemi con qgis e mapserver, una
> delle soluzioni che ho trovato in rete è di aggiungere il flag "Has
> OIDs" in pgadminIII, ma non mi è permesso pur essendo l'amministratore
> del database. Ho risolto aggiungendo una colonna seriale con chiave
> primaria, anche se non penso sia la soluzione corretta.

Ciao Luca,
manca una chiave primaria ma penso che ci sia un campo identificativo
univoco no? In genere si chiama gid o id.

Tabella "public.italy_line"
  Colonna | Tipo |
Modificatori
-----------+----------+----------------------------------------------------------
osm_id | integer |
aeroway | text |
amenity | text |
bicycle | text |
bridge | text |
boundary | text |
building | text |
foot | text |
highway | text |
horse | text |
junction | text |
landuse | text |
layer | text |
learning | text |
leisure | text |
man_made | text |
motorcar | text |
name | text |
natural | text |
oneway | text |
place | text |
railway | text |
ref | text |
religion | text |
residence | text |
route | text |
sport | text |
tourism | text |
tunnel | text |
waterway | text |
z_order | integer |
way_area | real |
way | geometry |
key | integer | not null default
nextval('italy_line_key_seq'::regclass)
Indici:
    "italy_line_pkey" PRIMARY KEY, btree ("key")
    "italy_line_index" gist (way)

key e la chiave su key le ho aggiunte io; speravo che osm_id fosse
univoco, gli altri sicuramente non lo sono, ma avevo ricevuto questa
risposta

gis=# ALTER TABLE italy_line ADD primary key (osm_id);
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index
"italy_line_pkey" for table "italy_line"
ERROR: impossibile creare un inidce univoco
DETAIL: La tabella contiene valori duplicati.

i dati gli ho importati con osm2pgsql

Se c'e' basta trasformare quello in chiave primaria (altrimenti l'idea
di mettere una colonna identificativa con chiave primaria non e' affatto
sbagliata):

da riga di comando:

ALTER TABLE nometabella ADD CONSTRAINT nomechiaveprimaria
PRIMARY KEY (campo_con_id_univoco);

altrimenti da pgadminIII c'e' modo di mettere una chiave primaria su una
colonna.

Poi pero' quando usi mapserver devi dirgli che usi quel campo come
chiave primaria perche', se non ricordo male, di default cerca l'oid di
postgres.

Non l'ho letto da nessuna parte comunque cerco di informarmi meglio

ciao
Lia

ciao
Luca

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Luca Delucchi ha scritto:

key e la chiave su key le ho aggiunte io; speravo che osm_id fosse
univoco, gli altri sicuramente non lo sono, ma avevo ricevuto questa
risposta

gis=# ALTER TABLE italy_line ADD primary key (osm_id);
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index
"italy_line_pkey" for table "italy_line"
ERROR: impossibile creare un inidce univoco
DETAIL: La tabella contiene valori duplicati.

Allora contiene duplicati. Non so quale sia la struttura dei dati di osm
ma mi pare strano che un id contenga dati duplicati. Boh, o non e'
l'identificativo usato da osm o hai caricato piu' volte la stessa strada.
Magari verifica quali sono i duplicati con

select osm_id, count(osm_id) from italy_line group by osm_id order by
count desc;

dovrebbero venirti tutti gli id con il conteggio di quanti ce ne sono
duplicati, in ordine discendente.
A questo punto vai a vedere una strada di quelle duplicate e verifica
che non sia la stessa strada identica. Se sono copie, butta via i
duplicati, altrimenti va bene usare la chiave che hai aggiunto tu.
:slight_smile:
ciao
lia

- --
Emilia Venturato
email+jabber: venturato@faunalia.it
www.faunalia.it
Tel: (+39) 347-2770007 Tel+Fax: (+39) 0587-213742
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy
http://www.faunalia.it/ev
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIIF5pOsndmJr6cvYRAi2hAJwPTMpTIaC9+sG6a/lnWdIVm69pJwCfRIQK
au2auZHL2Tc1X967w0MHt+0=
=p+x9
-----END PGP SIGNATURE-----

Il giorno mar, 06/05/2008 alle 15.34 +0200, Emilia Venturato ha scritto:

Allora contiene duplicati. Non so quale sia la struttura dei dati di osm
ma mi pare strano che un id contenga dati duplicati. Boh, o non e'
l'identificativo usato da osm o hai caricato piu' volte la stessa strada.
Magari verifica quali sono i duplicati con

select osm_id, count(osm_id) from italy_line group by osm_id order by
count desc;

dovrebbero venirti tutti gli id con il conteggio di quanti ce ne sono
duplicati, in ordine discendente.
A questo punto vai a vedere una strada di quelle duplicate e verifica
che non sia la stessa strada identica. Se sono copie, butta via i
duplicati, altrimenti va bene usare la chiave che hai aggiunto tu.

Ho provato a rimportare il file osm e questa volta è andata, osm_id è
univoco, prima c'erano degli elementi duplicati.
La mappa comunque continua a non vedersi! :slight_smile:

:slight_smile:
ciao
lia

grazie
Lia

Ciao Luca,
spero ti possa aiutare ...

           layer
               name "strade"
               group "strade"
               status on
               type line
               connectiontype postgis
               connection "user=luca password=********* dbname=gis
host=localhost port=5432"
               data "the_geom FROM public.italy_line USING UNIQUE
(nome_chiave) USING srid=4326"
               class
                       name "autostrade"
                       expression ([highway] = motorway)
                       style
                               color 0 160 0
                       end
              end
           end
Ciao
D.

--
dott. Davide Zizioli
Dipartimento di Scienze della Terra
Università di Pavia
Via Ferrata 1, 27100 Pavia
Tel. +393498345440
Tel. Skype: Riverlab
davide.zizioli@manhattan.unipv.it
WMS http://geoserver1.unipv.it/cgi-bin/wms?

Il giorno mar, 06/05/2008 alle 18.42 +0200, Davide ha scritto:

Ciao Luca,
spero ti possa aiutare ...

non è cambiato nulla, shp2img rende un'immagine tutta bianca

           layer
               name "strade"
               group "strade"
               status on
               type line
               connectiontype postgis
               connection "user=luca password=********* dbname=gis
host=localhost port=5432"
               data "the_geom FROM public.italy_line USING UNIQUE
(nome_chiave) USING srid=4326"
               class
                       name "autostrade"
                       expression ([highway] = motorway)
                       style
                               color 0 160 0
                       end
              end
           end
Ciao
D.

grazie
Luca

Ri-ciao .... prova a fare una prova importando dal mio database PG
perchè a me con pmapper funge scritto così.....

layer
               name "strade"
               group "strade"
               status on
               type line
               connectiontype postgis
               connection "host=geoserver1.unipv.it dbname=osm_italy
port=5432 user=osmers password=osmers port=5432"
               data "the_geom FROM public.it_osm_line USING UNIQUE
gid1 USING srid=4326"
               CLASS
      NAME "autostrade"
                        expression ([highway] = motorway)
      STYLE
             SYMBOL "punto"
             COLOR 0 0 0
             SIZE 7
            END
            STYLE
             SYMBOL "punto"
             COLOR 220 220 220
             SIZE 5
            END
            STYLE
             SYMBOL "linea10"
             COLOR 0 0 0
             SIZE 1
            END
    END
end
Questi sono i due simboli da mettere o in symbol.sym o nel mapfile
#--- 17 ---
SYMBOL
   NAME "punto"
   TYPE ellipse
   POINTS
    1 1
   END
   FILLED true
END

#--- 18 ---

SYMBOL
   NAME "linea10"
   TYPE ellipse
   POINTS
    1 1
   END
   STYLE
  10 9 10 9
   END
END

Ciao
D

Il giorno mer, 07/05/2008 alle 10.07 +0200, Davide ha scritto:

Ri-ciao .... prova a fare una prova importando dal mio database PG
perchè a me con pmapper funge scritto così.....

mi dice che la colonna the_geom nn esiste! :frowning:

luca@debianluca:~$ shp2img -m mapserver/davide.map -o da.png
msDrawMap(): Image handling error. Failed to draw layer named 'strade'.
<br>
prepare_database(): Query error. Error executing POSTGIS DECLARE (the
actual query) statement: 'DECLARE mycursor BINARY CURSOR FOR SELECT
"highway"::text,asbinary(force_collection(force_2d(the_geom)),'NDR'),gid1::text from public.it_osm_line WHERE the_geom && setSRID('BOX3D(6 34.75,19 47.75)'::BOX3D, 4326 )'

Postgresql reports the error as 'ERROR: column "the_geom" does not
exist
'

More Help:

Error with POSTGIS data variable. You specified 'check your .map file'.
Standard ways of specifiying are :
(1) 'geometry_column from geometry_table'
(2) 'geometry_column from (sub query) as foo using unique column name
using SRID=srid#'

Make sure you put in the 'using unique column name' and 'using SRID=#'
clauses in.

For more help, please see http://postgis.refractions.net/documentation/

Mappostgis.c - version of Jan 23/2004.
<br>

Ciao
D

ciao
Luca

2008/5/7 Luca Delucchi <lucadeluge@gmail.com>:

Il giorno mer, 07/05/2008 alle 10.07 +0200, Davide ha scritto:

> Ri-ciao .... prova a fare una prova importando dal mio database PG
> perchè a me con pmapper funge scritto così.....
>
>

mi dice che la colonna the_geom nn esiste! :frowning:

e ha ragione !!
sorry in un altro database è così in questo funge con
data "way FROM public.it_osm_line USING UNIQUE
gid1 USING srid=4326"
ciao
D.