#1 Tue 05 August 2014 14:40
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Création d'isolignes à partir de polygones
Bonjour à tous
Je travaille sur un outil en C++, en utilisant Postgres / Postgis. Je précise que je suis totalement novice en Postgis, et en SIG de manière plus générale.
Je bloque sur une opération que me paraît pourtant réalisable :
- J'ai un polygone en entrée (c'est un élément d'une table de ma BDD), auquel j'effectue des traitements (lissage, etc) --> ça reste un polygone.
- A partir de ce polygone lissé , j'aimerai créer des iso-lignes pour ensuite pouvoir les afficher --> Je bloque sur cette étape
J'ai lu quelques infos sur la manière de procéder (utilisation de GDALcontour, rasterisation, etc), mais je suis complètement perdu dans la marche à suivre !
Si quelqu'un pouvait m'aiguiller, ou bien m'orienter vers des pistes, je suis preneur!
Pour que ça soit plus parlant, le dessin (fait sous Paint à la va-vite) est un peu plus parlant. le passage de l'étape A à B est fonctionnel, c'est sur l'étape B à C que je bloque :
[img]http://img4.hostingpics.net/pics/987437Temp.png[/img]
Merci d'avance !
Hors ligne
#2 Tue 05 August 2014 15:50
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Création d'isolignes à partir de polygones
bonjour,
Je ne comprends pas bien:
Les isolignes se tracent facilement avec des points d'altitude. Mais là, vous voulez générer de fausses isolignes ou extrapoler les altitudes du polygone pour générer des lignes à l'intérieur ?
Nicolas
En ligne
#3 Tue 05 August 2014 16:02
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: Création d'isolignes à partir de polygones
bonjour,
Je ne comprends pas bien:
Les isolignes se tracent facilement avec des points d'altitude. Mais là, vous voulez générer de fausses isolignes ou extrapoler les altitudes du polygone pour générer des lignes à l'intérieur ?
Nicolas
Bonjour,
En effet, mon cas est un peu particulier. Mon polygone lissé correspond en fait à une projection d'un diagramme d'antenne au sol. Ce polygone correspond à un niveau de gain particulier.
Je désirerais ainsi générer des isolignes à l'intérieur de mon polygone lissé (ces isolignes représentant des isoniveaux de gains).
Dans mon exemple ci-dessous, le polygone rouge est mon polygone de base lissé (qui correspond à un isoniveau de gain de 10dB). je désirerais donc générer les lignes intérieures. Si le nombre de lignes à générer peut-être paramétrable, ce serait le top!
J'espère avoir été assez clair.
[img]http://img4.hostingpics.net/pics/881675TEMP2.png[/img]
Dernière modification par mugenito (Tue 05 August 2014 16:04)
Hors ligne
#4 Tue 05 August 2014 17:58
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: Création d'isolignes à partir de polygones
Je fais un petit retour : je pense pouvoir m'en sortir en utilisant la fonction transcale (http://postgis.org/docs/ST_TransScale.html).
Il s'agit en fait tout bêtement d'homotéthies. Je peux ainsi paramétrer le nombre de polygones à générer, ainsi que l'espacement entre chacun d'entre eux.
Je stockerai ensuite tout ça dans un raster, et je pense que ça devrait faire le job !
Hors ligne
#5 Tue 05 August 2014 19:16
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Création d'isolignes à partir de polygones
Bonjour,
Oui, du coup, si l'espacement doit etre régulier, ca devrait le faire.
un buffer négatif, aussi. ca génèrerait des isolignes meme si la geom est un peu tordue:
Code:
select st_exteriorRing(st_buffer(geom, -15)) from testpg UNION select st_exteriorRing(st_buffer(geom, -30)) from testpg UNION select st_exteriorRing(st_buffer(geom, -45)) from testpg UNION select st_exteriorRing(st_buffer(geom, -60)) from testpg UNION select st_exteriorRing(st_buffer(geom, -75)) from testpg;
[img]http://img11.hostingpics.net/pics/925849ScreenShot20140805at191101.png[/img]
Nico
En ligne
#6 Wed 06 August 2014 15:37
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: Création d'isolignes à partir de polygones
Bonjour,
En effet, ma méthode avec TransScale fonctionne, mais ce que tu me proposes avec le buffer négatif est plus simple !
Je vais comparer les deux méthodes d'un point de vue temps d'exécution pour sélectionner la plus rapide.
Merci beaucoup
Hors ligne
#7 Wed 06 August 2014 16:34
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Création d'isolignes à partir de polygones
Hello,
Oui mais du coup, me demandais, au niveau métier, ce qu'il te fallait vraiment:
Le buffer va changer la forme du contour si le pg est tordu (cf. courbe 60) alors qu'avec TransScale, le polygone aura tjs sa forme initiale, mais plus petite, non ?
Sur des gros pg ou de gros jeux de données, transcale sera bcp plus rapide (déplacement des coordonnées uniquement) que le buffer (recalcul d'un polygone complet).
Nico
En ligne
#8 Wed 06 August 2014 17:27
- mugenito
- Participant occasionnel
- Date d'inscription: 29 Jul 2014
- Messages: 11
Re: Création d'isolignes à partir de polygones
Hello,
Mon objectif est dans un premier temps d'effectuer une approximation de projection de diagramme d'antenne au sol.
Le truc, c'est que, selon les cas (antennes reconfigurables, techno d'antenne, orientation de l'axe, etc), l'un ou l'autre des cas sera plus fidèle à la réalité physique.
J'ai finalement implémenté les deux méthodes, et dans un premier temps, l'utilisateur choisira le résultat qui lui convient le mieux.
Je verrai par la suite si je peux essayer de trouver un petit algo qui permet de choisir la meilleure des techniques selon la configuration de l'antenne.
Hors ligne