surface de route par maille

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

surface de route par maille

vhung
Bonjour Gwendall,
J'ai essayé de calculer la surface de route par maille en créant une zone de "buffer" d'autour de ligne de route, ensuite intersection avec le maillage de zone d'étude.
Le code est suivant:

create table BufferRoute as select ST_Buffer(the_geom,route_autour_nantes.LARGEUR,'butt') as the_geom from route_autour_nantes;
create table GridIntersectWithBufferRoute as select ST_intersection(a.the_geom,b.the_geom) as the_geom, a.gid from maillage as a, BufferRoute as b where ST_IsValid(b.the_geom) and ST_intersects(a.the_geom,b.the_geom);
create table exploded as select STO_Explode() from GridIntersectWithBufferRoute;
create table filterPointsAndLines as select * from exploded where ST_Dimension(the_geom) = 2;
create table UnionGridBufferRoute as select ST_Union(the_geom) as the_geom,gid from filterPointsAndLines group by gid;
create table RouteDensityPerCell as select ST_area(the_geom) as area,gid from UnionGridBufferRoute;
create table DensiteSurfRouteAutourNantes as select a.the_geom, a.gid, b.area/ST_area(a.the_geom) as DensiteSurfRoute from maillage as a,RouteDensityPerCell as b where a.gid=b.gid;
drop table BufferRoute;
drop table GridIntersectWithBufferRoute;
drop table exploded;
drop table filterPointsAndLines;
drop table UnionGridBufferRoute;
drop table RouteDensityPerCell;

Mais je ne suis pas sur s'il est vrai. Est ce que tu puisse vérifier, s'il te plaît? En plus, si le code est vrai, je trouve qu'il a calculé seulement les route primaire et secondaire_autour de Nantes, pas de chemin_autour de Nantes cas il n'y a pas l'information de largeur de chemin_autour de Nantes.
Je te remercie.  

Viet Hung
Reply | Threaded
Open this post in threaded view
|

Re: surface de route par maille

Gwendall Petit
Administrator
Bonjour Le Viet,

Je vais essayer de te répondre, entre les lignes :

create table BufferRoute as select ST_Buffer(the_geom,route_autour_nantes.LARGEUR,'butt') as the_geom from route_autour_nantes;
create table GridIntersectWithBufferRoute as select ST_intersection(a.the_geom,b.the_geom) as the_geom, a.gid from maillage as a, BufferRoute as b where ST_IsValid(b.the_geom) and ST_intersects(a.the_geom,b.the_geom);
Ici, tu fais appel à la couche "maillage", mais elle n'apparaît pas au-dessus dans ton code.
Je suppose que tu penses à la grille qui va te permettre de faire le découpage ...?
Il faudrait donc que tu rajoutes au début une ligne du style : create table maillage as select STO_CreateGrid(200,200) route_autour_nantes; (avec 200, 200 la longueur et la largeur de la cellule)

create table exploded as select STO_Explode() from GridIntersectWithBufferRoute;
create table filterPointsAndLines as select * from exploded where ST_Dimension(the_geom) = 2;
create table UnionGridBufferRoute as select ST_Union(the_geom) as the_geom,gid from filterPointsAndLines group by gid;
create table RouteDensityPerCell as select ST_area(the_geom) as area,gid from UnionGridBufferRoute;
create table DensiteSurfRouteAutourNantes as select a.the_geom, a.gid, b.area/ST_area(a.the_geom) as DensiteSurfRoute from maillage as a,RouteDensityPerCell as b where a.gid=b.gid;
drop table BufferRoute;
drop table GridIntersectWithBufferRoute;
drop table exploded;
drop table filterPointsAndLines;
drop table UnionGridBufferRoute;
drop table RouteDensityPerCell;
A priori le reste est cohérent.

En plus, si le code est vrai, je trouve qu'il a calculé seulement les route primaire et secondaire_autour de Nantes, pas de chemin_autour de Nantes cas il n'y a pas l'information de largeur de chemin_autour de Nantes
Si la couche des chemins ne comporte pas l'information de la largeur, alors tu ne peux rien faire. Tu es contraint par la nature de tes données.

Cordialement,

Gwendall Petit
Équipe OrbisGIS
Reply | Threaded
Open this post in threaded view
|

Re: surface de route par maille

vhung
merci
Reply | Threaded
Open this post in threaded view
|

Re: surface de route par maille

ebocher
Administrator

Bonjour,

Pour completer :

Si la couche des chemins ne comporte pas l'information de la largeur, alors tu ne peux rien faire. Tu es contraint par la nature de tes données.

Tu peux néanmoins donner une largeur fixe a tes chemins : st_buffer(the_geom, 4) par exemple.

Erwan.