Node capacity must be greater than 1

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

Node capacity must be greater than 1

AntoninLB
Hello,

My name is Antonin, I'm trying to create a NoiseMap for a territorial collectivity in Morbihan in order to protect biodiversity and to preserve the ecological continuities. It may not be scientifically good, but I'm now trying to evaluate the noise emission (in the air) for boat traffic.
I have collected all the trafic datas and now I try to compute the NoiseMap for a small piece of area (I'll do it next for the whole area).
I reached the step of calculating the sound propagation with the function BR_TriGrid but failed to it. I obtain this error after a few minutes of calculating :

"General error: "com.vividsolutions.jts.util.AssertionFailedException: Node capacity must be greater than 1"; SQL statement:
create table tri_lvl as SELECT * from BR_TriGrid('bati','roads_src','DB_M','',750,50,1.5,2.8,75,2,1,0.23) [50000-196]
OVERALL EXECUTION TIME: 349,912 seconds
"

Here is the script I use :

"-- Compute the sound level for each segment of roads
drop table if exists roads_src_global;
CREATE TABLE roads_src_global AS SELECT the_geom,BR_EvalSource(lv_speed, hv_speed,vl_per_hou, pl_per_hou, beginZ, endZ, rlenght) as db_m from ess1;

-- Apply frequency repartition of road noise level
drop table if exists roads_src;
CREATE TABLE roads_src AS SELECT the_geom,
BR_SpectrumRepartition(100,1,db_m) as db_m100,
BR_SpectrumRepartition(125,1,db_m) as db_m125,
BR_SpectrumRepartition(160,1,db_m) as db_m160,
BR_SpectrumRepartition(200,1,db_m) as db_m200,
BR_SpectrumRepartition(250,1,db_m) as db_m250,
BR_SpectrumRepartition(315,1,db_m) as db_m315,
BR_SpectrumRepartition(400,1,db_m) as db_m400,
BR_SpectrumRepartition(500,1,db_m) as db_m500,
BR_SpectrumRepartition(630,1,db_m) as db_m630,
BR_SpectrumRepartition(800,1,db_m) as db_m800,
BR_SpectrumRepartition(1000,1,db_m) as db_m1000,
BR_SpectrumRepartition(1250,1,db_m) as db_m1250,
BR_SpectrumRepartition(1600,1,db_m) as db_m1600,
BR_SpectrumRepartition(2000,1,db_m) as db_m2000,
BR_SpectrumRepartition(2500,1,db_m) as db_m2500,
BR_SpectrumRepartition(3150,1,db_m) as db_m3150,
BR_SpectrumRepartition(4000,1,db_m) as db_m4000,
BR_SpectrumRepartition(5000,1,db_m) as db_m5000 from roads_src_global;

-- Sound propagation from sources through buildings
drop table if exists tri_lvl;
create table tri_lvl as SELECT * from BR_TriGrid('bati','roads_src','DB_M','',750,50,1.5,2.8,75,2,1,0.23);
"

The traffic rate I have for this sample of territory is very law (about one or two boats per hour, I tried to put a greater rate but obtained the same message of error). My lv_speed is 18.5 km.h. The buildings table comes from IGN BDTOPO2016.

Here is a look of the space I want to map :




Thanks a lot in advance for the help you could provide to me,
Best regards,

Antonin
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

Nicolas F.
Administrator
Hi.

Thanks for the feedback.

The error is not complete so it is not useful. I think the 'bati' table is not good (illegal polygons)

The function BR_EvalSource and BR_SpectrumRepartition are only valid for light vehicle emission.

Noisemodelling is following the NMPB08 standards and are not made for marine traffic so you should not use this library for this purpose.

best regards,

Nicolas Fortin
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

AntoninLB
Hi,

Thanks for the answer.
I note the remark for NMPB 2008. I actually stopped trying to modelize the boat traffic which was not so pertinent for my study.
Though I still need to modelize noise levels for road trafic. I tried with the same script, and obtained the same error message "Node capacity must be greater than 1". I even changed my buildings layer after reading your answer (from IGN to the landcover we have here). Though when I tried with a smaller area (just a roundabout and 100m of road each side of it) I obtained my noisemap.
So the script works with my buildings layer, but not for the whole area I'd like.
Is it possible that the whole space could not be modelized because of a lack of boundingbox ? or maybe the whole territory I want to map is way too big ?

Thanks in advance,

Have a good day,

Antonin
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

Nicolas F.
Administrator
There is an updated version of NoiseModelling here (with better building meshing). It could work with this version.

https://github.com/Ifsttar/NoiseModelling/releases/tag/2.1.1-SNAPSHOT

There is no limitation of the map size.

2018-04-19 14:01 GMT+02:00 AntoninLB [via OrbisGIS] <[hidden email]>:
Hi,

Thanks for the answer.
I note the remark for NMPB 2008. I actually stopped trying to modelize the boat traffic which was not so pertinent for my study.
Though I still need to modelize noise levels for road trafic. I tried with the same script, and obtained the same error message "Node capacity must be greater than 1". I even changed my buildings layer after reading your answer (from IGN to the landcover we have here). Though when I tried with a smaller area (just a roundabout and 100m of road each side of it) I obtained my noisemap.
So the script works with my buildings layer, but not for the whole area I'd like.
Is it possible that the whole space could not be modelized because of a lack of boundingbox ? or maybe the whole territory I want to map is way too big ?

Thanks in advance,

Have a good day,

Antonin


If you reply to this email, your message will be added to the discussion below:
http://orbisgis.3871844.n2.nabble.com/Node-capacity-must-be-greater-than-1-tp7575442p7575444.html
To start a new topic under NoiseModelling, email [hidden email]
To unsubscribe from NoiseModelling, click here.
NAML



--
-Nicolas Fortin
GIS Workshop
IRSTV FR CNRS 2488
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

AntoninLB
Ok, I'll try this.
Thanks for the answer.

Have a good day

Antonin
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

AntoninLB
In reply to this post by Nicolas F.
Hey Nicolas,

Thanks for helping, unfortunately even with the updated version of NoiseModelling I obtain the same result.

Well, I try now to do something of my own on QGIS. Of course much more simple and very  modelized. Though I used the fonction 4 of BrEvalSource in NoiseModelling : BR_EvalSource(double lv_speed, double hv_speed,int vl_per_hour, int pl_per_hour, double beginZ, double endZ,double road_length_2d) to calculate LAeq with my trafic data.

I aim to create my own isophones (-3dB when the distance is doubled for a lineic source and with free field). I need to know if this LAeq is calculated in the middle of the road, or if it is calculated by the side of the road (and if it is the case at how many meters). This will change the way I modelize my isophones (actually I want to place my "isophone 0").

At first try I said that BrEvalSource gives me a LAeq measured by the side of the road, considering that the source is in the middle of the road. Is that correct ?

Have a nice day,
Antonin
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

Nicolas F.
Administrator
Hi,

This error has been fixed and tested so you have an issue for the update of your version. Please run orbisgis_safemode or delete the plugin cache located in /home/user/.Orbisgis/5.1/cache/ or C:\Users\username\.OrbisGIS\5.1\cache

If you follow the NMPB method so the noise source is located on the center of the road:

best regards,

2018-05-02 16:04 GMT+02:00 AntoninLB [via OrbisGIS] <[hidden email]>:
Hey Nicolas,

Thanks for helping, unfortunately even with the updated version of NoiseModelling I obtain the same result.

Well, I try now to do something of my own on QGIS. Of course much more simple and very  modelized. Though I used the fonction 4 of BrEvalSource in NoiseModelling : BR_EvalSource(double lv_speed, double hv_speed,int vl_per_hour, int pl_per_hour, double beginZ, double endZ,double road_length_2d) to calculate LAeq with my trafic data.

I aim to create my own isophones (-3dB when the distance is doubled for a lineic source and with free field). I need to know if this LAeq is calculated in the middle of the road, or if it is calculated by the side of the road (and if it is the case at how many meters). This will change the way I modelize my isophones (actually I want to place my "isophone 0").

At first try I said that BrEvalSource gives me a LAeq measured by the side of the road, considering that the source is in the middle of the road. Is that correct ?

Have a nice day,
Antonin


If you reply to this email, your message will be added to the discussion below:
http://orbisgis.3871844.n2.nabble.com/Node-capacity-must-be-greater-than-1-tp7575442p7575447.html
To start a new topic under NoiseModelling, email [hidden email]
To unsubscribe from NoiseModelling, click here.
NAML



--
-Nicolas Fortin
GIS Workshop
IRSTV FR CNRS 2488
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

AntoninLB
Hi,

Thanks for your answer, indeed now it works.
Well ... I still have this problem, which I guess is a geometry problem : after beginning the script, about 5h of calculating, here is the error I have :

"Evaluate cell 10/16
Begin processing of cell 2,3 of the 4x4  grid..
Begin delaunay
General error: "com.vividsolutions.jts.geom.TopologyException: found non-noded intersection between LINESTRING ( 281348.3 6751488.5, 281348.3 6751484.21 ) and LINESTRING ( 281348.3 6751484.21, 281348.3 6751484.22 ) [ (281348.3, 6751484.21, NaN) ]"; SQL statement:
create table tri_lvl as SELECT * from BR_TriGrid('buildings','roads_src','DB_M','',750,50,1.5,2.8,75,2,1,0.23) [50000-196]
OVERALL EXECUTION TIME: 18 281,931 seconds
"

I verificated the geometry of my layer in QGIS and no one was found ... I don't know how to solve this.
Can it be an error in my roads layer (I use both IGN layer for roads and buildings) ?
I think after this it is going to be ok ! Next step is to integrate Digital Elevation Model and Landcover.

Here is the script I enter at the beginning :

"-- Compute the sound level for each segment of roads
drop table if exists roads_src_global;
CREATE TABLE roads_src_global AS SELECT the_geom, BR_EvalSource(vitesse, hv_speed, vlhd, plhd, z_ini, z_fin, length) as db_m from roads;

-- Apply frequency repartition of road noise level
drop table if exists roads_src;
CREATE TABLE roads_src AS SELECT the_geom,
BR_SpectrumRepartition(100,1,db_m) as db_m100,
BR_SpectrumRepartition(125,1,db_m) as db_m125,
BR_SpectrumRepartition(160,1,db_m) as db_m160,
BR_SpectrumRepartition(200,1,db_m) as db_m200,
BR_SpectrumRepartition(250,1,db_m) as db_m250,
BR_SpectrumRepartition(315,1,db_m) as db_m315,
BR_SpectrumRepartition(400,1,db_m) as db_m400,
BR_SpectrumRepartition(500,1,db_m) as db_m500,
BR_SpectrumRepartition(630,1,db_m) as db_m630,
BR_SpectrumRepartition(800,1,db_m) as db_m800,
BR_SpectrumRepartition(1000,1,db_m) as db_m1000,
BR_SpectrumRepartition(1250,1,db_m) as db_m1250,
BR_SpectrumRepartition(1600,1,db_m) as db_m1600,
BR_SpectrumRepartition(2000,1,db_m) as db_m2000,
BR_SpectrumRepartition(2500,1,db_m) as db_m2500,
BR_SpectrumRepartition(3150,1,db_m) as db_m3150,
BR_SpectrumRepartition(4000,1,db_m) as db_m4000,
BR_SpectrumRepartition(5000,1,db_m) as db_m5000 from roads_src_global;

-- Sound propagation from sources through buildings
drop table if exists tri_lvl;
create table tri_lvl as SELECT * from BR_TriGrid('buildings','roads_src','DB_M','',750,50,1.5,2.8,75,2,1,0.23);

-- Use the triangle area contouring interpolation (split triangle covering level parameter)
-- iso lvls in w corresponding to dB->'45,50,55,60,65,70,75,200'
-- the output iso will be [-inf to 45] -> 0 ]45 to 50] -> 1 etc..
-- Theses levels corresponding to the ranges specified in the standard NF S 31 130
drop table if exists tricontouring_noise_map;
create table tricontouring_noise_map AS SELECT * from ST_TriangleContouring('tri_lvl','w_v1','w_v2','w_v3',31622, 100000, 316227, 1000000, 3162277, 1e+7, 31622776, 1e+20);

-- Merge adjacent triangle into polygons (multiple polygon by row, for unique isoLevel and cellId key)
drop table if exists multipolygon_iso;
create table multipolygon_iso as select ST_UNION(ST_ACCUM(the_geom)) the_geom ,idiso from tricontouring_noise_map GROUP BY IDISO, CELL_ID;
-- Explode each row to keep only a polygon by row
drop table if exists contouring_noise_map;
create table contouring_noise_map as select the_geom,idiso from ST_Explode('multipolygon_iso');
drop table multipolygon_iso;
"

Best ragards,
Antonin
Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

Sebastien Guyon
Hi,

I have not found the cause and the exact solution to this problem but in some cases, the simplification of the geometries of the tables used in input of the function Br_TriGrid can limit the appearance of this problem.

For that I use the functions ST_PrecisionReducer to reduce the number of decimals of the coordinates of the geometries, associated with the function ST_SimplifyPreserveTopology in order to simplify the geometries of these tables.

This gives for example for the table building:


CREATE TABLE buildings2 AS SELECT ST_precisionreducer(ST_simplifypreservetopology(st_buffer(st_union(st_accum(the_geom)),0),0.1),1) the_geom, height FROM buildings group by height;

For the table roads :


CREATE TABLE roads2 AS SELECT id_way, ST_PRECISIONREDUCER(ST_SIMPLIFYPRESERVETOPOLOGY(THE_GEOM),0.1),1) the_geom, highway_type t FROM roads;

Reply | Threaded
Open this post in threaded view
|

Re: Node capacity must be greater than 1

AntoninLB
Hi,

Thanks for your answer, I try it now.

Regards,
Antonin