|
| 1 | +const { loadRecordFixture } = require('../../test/utils.js') |
| 2 | +const records = require('../../lib/providers/__fixtures__/records.json') |
| 3 | +const { verifyGeometry, getRpg } = require('./geometry.js') |
| 4 | +const db = require('../../lib/db') |
| 5 | + |
| 6 | +describe('verifyGeometry', () => { |
| 7 | + beforeAll(async () => { |
| 8 | + await loadRecordFixture() |
| 9 | + }) |
| 10 | + |
| 11 | + test("Une geometry valide ne renvoie pas d'erreur", async () => { |
| 12 | + const geomGeoJSon = { |
| 13 | + type: 'Polygon', |
| 14 | + coordinates: [ |
| 15 | + [ |
| 16 | + [6.762183076989215, 48.981124367260236], |
| 17 | + [6.764415065370428, 48.97673032941583], |
| 18 | + [6.765960288095883, 48.98095537296746], |
| 19 | + [6.762183076989215, 48.981124367260236] |
| 20 | + ] |
| 21 | + ] |
| 22 | + } |
| 23 | + expect(await verifyGeometry(geomGeoJSon, records[0].record_id)).toEqual({ |
| 24 | + valid: true |
| 25 | + }) |
| 26 | + }) |
| 27 | + test('Une geometry inclus dans une autre renvoie une erreur', async () => { |
| 28 | + const geomGeoJSon = { |
| 29 | + type: 'Polygon', |
| 30 | + coordinates: [ |
| 31 | + [ |
| 32 | + [ |
| 33 | + 5.00742078063729, |
| 34 | + 44.71418584175069 |
| 35 | + ], |
| 36 | + [ |
| 37 | + 5.00619098801252, |
| 38 | + 44.71418584175069 |
| 39 | + ], |
| 40 | + [ |
| 41 | + 5.00619098801252, |
| 42 | + 44.71353436914191 |
| 43 | + ], |
| 44 | + [ |
| 45 | + 5.00742078063729, |
| 46 | + 44.71353436914191 |
| 47 | + ], |
| 48 | + [ |
| 49 | + 5.00742078063729, |
| 50 | + 44.71418584175069 |
| 51 | + ] |
| 52 | + ] |
| 53 | + ] |
| 54 | + } |
| 55 | + expect(await verifyGeometry(geomGeoJSon, records[0].record_id)).toEqual({ |
| 56 | + valid: false |
| 57 | + }) |
| 58 | + }) |
| 59 | + |
| 60 | + test('Une geometry ne peux pas se chevaucher toute seule', async () => { |
| 61 | + const geomGeoJSon = { |
| 62 | + type: 'Polygon', |
| 63 | + coordinates: [ |
| 64 | + [ |
| 65 | + [ |
| 66 | + 5.0072, |
| 67 | + 44.72 |
| 68 | + ], |
| 69 | + [ |
| 70 | + 5.00619098801252, |
| 71 | + 44.71418584175069 |
| 72 | + ], |
| 73 | + [ |
| 74 | + 5.00619098801252, |
| 75 | + 44.71353436914191 |
| 76 | + ], |
| 77 | + [ |
| 78 | + 5.00742078063729, |
| 79 | + 44.71353436914191 |
| 80 | + ], |
| 81 | + [ |
| 82 | + 5.0072, |
| 83 | + 44.72 |
| 84 | + ] |
| 85 | + ] |
| 86 | + ] |
| 87 | + } |
| 88 | + |
| 89 | + expect(await verifyGeometry(geomGeoJSon, records[0].record_id, 1)).toEqual({ |
| 90 | + valid: true |
| 91 | + }) |
| 92 | + }) |
| 93 | + test('Une geometry qui chevauche une autre renvoie une erreur et la correction', async () => { |
| 94 | + const geomGeoJSon = { |
| 95 | + type: 'Polygon', |
| 96 | + coordinates: [ |
| 97 | + [ |
| 98 | + [ |
| 99 | + 5.0072, |
| 100 | + 44.72 |
| 101 | + ], |
| 102 | + [ |
| 103 | + 5.00619098801252, |
| 104 | + 44.71418584175069 |
| 105 | + ], |
| 106 | + [ |
| 107 | + 5.00619098801252, |
| 108 | + 44.71353436914191 |
| 109 | + ], |
| 110 | + [ |
| 111 | + 5.00742078063729, |
| 112 | + 44.71353436914191 |
| 113 | + ], |
| 114 | + [ |
| 115 | + 5.0072, |
| 116 | + 44.72 |
| 117 | + ] |
| 118 | + ] |
| 119 | + ] |
| 120 | + } |
| 121 | + expect(await verifyGeometry(geomGeoJSon, records[0].record_id)).toEqual({ |
| 122 | + valid: false, |
| 123 | + corrections: [{ |
| 124 | + id: '1', |
| 125 | + existing_minus_intersection: { |
| 126 | + coordinates: [ |
| 127 | + [ |
| 128 | + [ |
| 129 | + 5.007420781, |
| 130 | + 44.714185842 |
| 131 | + ], |
| 132 | + [ |
| 133 | + 5.007420781, |
| 134 | + 44.713534369 |
| 135 | + ], |
| 136 | + [ |
| 137 | + 5.007398535, |
| 138 | + 44.714185842 |
| 139 | + ], |
| 140 | + [ |
| 141 | + 5.007420781, |
| 142 | + 44.714185842 |
| 143 | + ] |
| 144 | + ] |
| 145 | + ], |
| 146 | + type: 'Polygon' |
| 147 | + }, |
| 148 | + new_minus_intersection: { |
| 149 | + coordinates: [ |
| 150 | + [ |
| 151 | + [ |
| 152 | + 5.0072, |
| 153 | + 44.72 |
| 154 | + ], |
| 155 | + [ |
| 156 | + 5.007398535, |
| 157 | + 44.714185842 |
| 158 | + ], |
| 159 | + [ |
| 160 | + 5.006190988, |
| 161 | + 44.714185842 |
| 162 | + ], |
| 163 | + [ |
| 164 | + 5.0072, |
| 165 | + 44.72 |
| 166 | + ] |
| 167 | + ] |
| 168 | + ], |
| 169 | + type: 'Polygon' |
| 170 | + } |
| 171 | + }] |
| 172 | + }) |
| 173 | + }) |
| 174 | + |
| 175 | + test('Une geometry qui chevauche plusieurs autres renvoie une erreur et la correction', async () => { |
| 176 | + const geomGeoJSon = { |
| 177 | + type: 'Polygon', |
| 178 | + coordinates: [ |
| 179 | + [ |
| 180 | + [ |
| 181 | + 2.83, |
| 182 | + 44.300 |
| 183 | + ], |
| 184 | + [ |
| 185 | + 6.00619098801252, |
| 186 | + 44.71418584175069 |
| 187 | + ], |
| 188 | + [ |
| 189 | + 5.00619098801252, |
| 190 | + 44.71353436914191 |
| 191 | + ], |
| 192 | + [ |
| 193 | + 5.00742078063729, |
| 194 | + 44.71353436914191 |
| 195 | + ], |
| 196 | + [ |
| 197 | + 2.83, |
| 198 | + 44.300 |
| 199 | + ] |
| 200 | + ] |
| 201 | + ] |
| 202 | + } |
| 203 | + |
| 204 | + expect(await verifyGeometry(geomGeoJSon, records[0].record_id)).toEqual({ |
| 205 | + valid: false, |
| 206 | + corrections: [ |
| 207 | + { |
| 208 | + id: '1', |
| 209 | + new_minus_intersection: { |
| 210 | + type: 'Polygon', |
| 211 | + coordinates: [ |
| 212 | + expect.anything() |
| 213 | + ] |
| 214 | + }, |
| 215 | + existing_minus_intersection: { |
| 216 | + type: 'Polygon', |
| 217 | + coordinates: [ |
| 218 | + expect.anything() |
| 219 | + ] |
| 220 | + } |
| 221 | + }, |
| 222 | + { |
| 223 | + id: '2', |
| 224 | + new_minus_intersection: { |
| 225 | + type: 'Polygon', |
| 226 | + coordinates: [ |
| 227 | + expect.anything() |
| 228 | + ] |
| 229 | + }, |
| 230 | + existing_minus_intersection: { |
| 231 | + type: 'Polygon', |
| 232 | + coordinates: [ |
| 233 | + expect.anything() |
| 234 | + ] |
| 235 | + } |
| 236 | + } |
| 237 | + ] |
| 238 | + }) |
| 239 | + }) |
| 240 | +}) |
| 241 | + |
| 242 | +describe('getRpg', () => { |
| 243 | + beforeAll(async () => { |
| 244 | + await db.query(` |
| 245 | + INSERT INTO rpg_bio |
| 246 | + (fid, geom) |
| 247 | + VALUES |
| 248 | + (515681, 'POLYGON ((745491.7935733169 6271935.155494958, 745510.4393736493 6271922.894579383, 745527.0523163083 6271905.218503128, 745539.1198044867 6271891.926054206, 745551.23593426 6271883.520513608, 745560.3627941596 6271880.77220215, 745569.6741478507 6271882.005048715, 745579.5228818299 6271881.542180538, 745600.4432527507 6271875.573545607, 745616.3857103033 6271855.772891293, 745641.8072486967 6271834.183003962, 745627.9989930595 6271698.670809223, 745751.7009122733 6271674.077824572, 745714.047093527 6271501.933145306, 745684.2356890728 6271360.350454692, 745656.8773284205 6271364.642864686, 745628.9559678858 6271410.569418287, 745607.9253442251 6271427.414142548, 745424.5120819731 6271427.746767702, 745042.5848604967 6271252.106440556, 744908.1935061275 6271450.855560919, 745465.1320560809 6271695.976953843, 745491.7935733169 6271935.155494958))'::public.geometry), |
| 249 | + (522201, 'POLYGON ((746275.9700289126 6271675.802738416, 746277.0619234701 6271678.638681659, 746279.2339504594 6271683.733959729, 746334.930190139 6271694.134554644, 746371.4935914458 6271700.761954689, 746384.8246686187 6271695.825305413, 746396.547654888 6271686.653949262, 746396.0766066704 6271669.439067037, 746427.1934671197 6271617.070393071, 746427.2337692683 6271597.999310435, 746435.0857382669 6271587.933854311, 746446.2557384084 6271579.865023484, 746465.9619347379 6271570.589475187, 746475.6064383741 6271552.898371439, 746481.2580790563 6271535.934344833, 746574.0424765397 6271489.852733912, 746572.7531098432 6271482.379957626, 746570.5530470209 6271475.356235878, 746544.8982228867 6271486.69553971, 746525.5867982131 6271497.34051006, 746508.8389753886 6271507.527254963, 746498.2784372754 6271513.652712849, 746484.0078480368 6271518.026010268, 746465.8477960338 6271517.465959002, 746466.2623851807 6271524.954021663, 746467.1194871342 6271543.257421721, 746460.2052788151 6271554.3276511915, 746447.0630729106 6271565.730912242, 746430.8629884936 6271567.851269591, 746430.5849881638 6271568.091866067, 746424.8055306341 6271573.09430096, 746412.1750212196 6271593.736983403, 746410.4829694104 6271616.745793272, 746401.9397334765 6271629.282241085, 746389.3119886309 6271646.962727652, 746385.244114756 6271664.168381298, 746382.9935658099 6271680.030329827, 746373.6239607814 6271687.600595965, 746364.3095331748 6271688.414814453, 746303.9963967515 6271674.452732089, 746274.4183806304 6271666.071638218, 746271.9512282158 6271665.372428127, 746275.9700289126 6271675.802738416))'::public.geometry), |
| 250 | + (539303, 'POLYGON ((746328.3854349583 6271799.062952504, 746345.5642921383 6271839.370831181, 746432.6709886186 6271822.137418629, 746632.9718896128 6271791.224216741, 746639.5327826783 6271790.194370847, 746579.7521927863 6271516.322137141, 746574.2935582255 6271491.312797488, 746574.0424765397 6271489.852733912, 746481.2580790563 6271535.934344833, 746475.6064383741 6271552.898371439, 746465.9619347379 6271570.589475187, 746446.2557384084 6271579.865023484, 746435.0857382669 6271587.933854311, 746427.2337692683 6271597.999310435, 746427.1934671197 6271617.070393071, 746396.0766066704 6271669.439067037, 746396.547654888 6271686.653949262, 746384.8246686187 6271695.825305413, 746371.4935914458 6271700.761954689, 746334.930190139 6271694.134554644, 746279.2339504594 6271683.733959729, 746328.3854349583 6271799.062952504))'::public.geometry), |
| 251 | + (539392, 'POLYGON ((746545.1702866767 6270769.374485272, 746490.5997018552 6270739.337576947, 746490.4153765867 6270738.983813557, 746482.3952221433 6270734.9719277965, 746465.3078380657 6271152.668667212, 746464.886064702 6271152.494781591, 746463.2429580598 6271159.887685441, 746462.4162760607 6271159.721266788, 746458.4600900173 6271158.089789572, 746446.209049344 6271556.3880568165, 746454.3670708349 6271549.309426039, 746459.4123797427 6271541.2314846935, 746458.668439948 6271525.344365834, 746458.2556805948 6271517.888738793, 746458.7281472622 6271514.788177726, 746460.405072621 6271512.140708245, 746463.0026301951 6271510.394089474, 746466.0815729322 6271509.8436909355, 746482.9865197998 6271510.364986205, 746495.2245803402 6271506.614657435, 746504.963536229 6271500.965658692, 746521.6437053891 6271490.820134045, 746521.9242906062 6271490.657589963, 746541.235705063 6271480.01263571, 746541.8317638685 6271479.717356344, 746561.0930088843 6271471.203933101, 746586.7470666785 6270792.258977248, 746545.1702866767 6270769.374485272))'::public.geometry), |
| 252 | + (551805, 'POLYGON ((745887.2423683383 6270919.109261623, 745887.2404292641 6270919.110116203, 745887.2193259746 6270919.166682666, 745887.2185807232 6270919.167023069, 745880.1523984808 6270916.319289076, 745880.1504594067 6270916.320143657, 745868.9412255639 6270950.371733325, 745851.7295102443 6270983.832267711, 745851.7293654644 6270983.832427198, 745851.7292206843 6270983.8325866815, 745848.8716615305 6270986.877603522, 745761.155263152 6271080.347250652, 745761.1551254903 6271080.34756248, 745747.9614763918 6271116.113739225, 745685.9939868766 6271284.099317347, 745685.99386345 6271284.099933874, 745691.0765275523 6271333.987291187, 745768.7938623347 6271674.034062079, 745768.8872542207 6271674.442540376, 745768.8886712901 6271674.443542566, 745768.9652186405 6271674.442844392, 745768.9653705556 6271674.4428372495, 745776.3592888773 6271673.0048241345, 745776.3600769198 6271673.005397831, 745776.367755957 6271673.039391657, 745776.3696358949 6271673.040524772, 745912.9782712813 6271643.918290538, 745912.9784231958 6271643.918283394, 745916.1385772427 6271643.9179005455, 745916.1388810604 6271643.917886253, 745919.0269748433 6271645.206771427, 745919.0271338825 6271645.206916632, 745920.7369165797 6271646.93035032, 745920.7370827326 6271646.930647883, 745921.8191530263 6271649.106553763, 745946.5803482636 6271728.687186296, 745946.5828145002 6271728.687833731, 745953.0360847511 6271723.836411091, 745953.0370104745 6271723.836672919, 745953.0381143459 6271723.840743612, 745953.040587707 6271723.841543398, 745966.978012549 6271713.01648428, 745966.9781573388 6271713.016324777, 745968.3171946862 6271712.183473542, 745975.6229176499 6271708.631788147, 745975.6230695654 6271708.631780998, 745975.6235181751 6271708.631607211, 745976.8441044118 6271708.163299697, 746031.0835335085 6271692.563001507, 746081.7256215111 6271677.99694955, 746081.9029964199 6271677.948293207, 746126.2707392243 6271666.344253345, 746126.2710359251 6271666.344086688, 746162.8852793637 6271649.333895949, 746163.0534777376 6271649.258338759, 746191.1593326956 6271637.0213345345, 746191.1594774803 6271637.0211750325, 746192.8579715042 6271636.507900757, 746192.8581234184 6271636.507893606, 746192.8582753326 6271636.507886456, 746218.5881646639 6271631.926956109, 746222.6424248976 6271632.316177631, 746222.6425768004 6271632.316170476, 746226.4191951937 6271633.770327856, 746273.4552568934 6271649.274207968, 746273.455567853 6271649.274346016, 746275.99457099 6271650.698800936, 746275.9947300351 6271650.698946133, 746277.814191826 6271652.975074868, 746277.8145099056 6271652.975365275, 746278.6485425632 6271655.769999576, 746278.6485496942 6271655.770151929, 746278.6485568254 6271655.770304282, 746279.0103390276 6271659.446809027, 746279.0106785005 6271659.447556489, 746279.0110037226 6271659.447999243, 746279.0117846767 6271659.448420542, 746305.8864129494 6271667.063542071, 746305.8864200811 6271667.063694425, 746364.8469084948 6271680.712759745, 746364.8473642392 6271680.712738285, 746370.6564755831 6271680.204818635, 746370.657372795 6271680.204471011, 746375.8875828513 6271675.9783461895, 746375.8881477136 6271675.977403458, 746377.7158951827 6271663.093718301, 746377.8453543001 6271662.408615243, 746377.8453400347 6271662.408310538, 746381.9129665063 6271645.203592159, 746381.9131112763 6271645.203432654, 746383.1299449049 6271642.522333809, 746383.1300896861 6271642.522174301, 746395.7092650952 6271624.909801576, 746403.0497197832 6271614.13812803, 746403.0499879448 6271614.137351965, 746404.591912982 6271593.176442959, 746404.5917468026 6271593.17614541, 746404.5917396696 6271593.175993061, 746404.5920149634 6271593.175369348, 746405.6941309513 6271589.748309479, 746405.6942757313 6271589.748149979, 746418.3245050473 6271569.105805169, 746419.8373845747 6271567.321101866, 746419.837529354 6271567.32094236, 746425.8945447414 6271562.078244002, 746425.894696654 6271562.078236845, 746425.8948414219 6271562.078077337, 746425.8949933343 6271562.078070183, 746425.8951452471 6271562.078063031, 746425.8954419277 6271562.077896372, 746425.8955867068 6271562.077736867, 746429.878027517 6271560.289716963, 746429.8784761099 6271560.289543147, 746429.8786280226 6271560.289535994, 746429.8789247144 6271560.289369337, 746429.8790766271 6271560.289362182, 746429.8795394871 6271560.289493068, 746438.5911707685 6271559.148602322, 746438.5924737558 6271559.147166772, 746438.5926445848 6271559.118300879, 746438.5932165553 6271559.117510507, 746444.8993847377 6271557.242031297, 746444.8998333415 6271557.241857474, 746446.206981366 6271556.35364696, 746446.2076838468 6271556.352392379, 746458.458903318 6271158.090456183, 746458.457920569 6271158.088975665, 746113.5214859911 6271015.832753151, 746066.5461641938 6270995.753605791, 745887.2423683383 6270919.109261623))'::public.geometry); |
| 253 | + `) |
| 254 | + }) |
| 255 | + afterAll(async () => { |
| 256 | + await db.query('TRUNCATE table rpg_bio;') |
| 257 | + }) |
| 258 | + |
| 259 | + test('Renvoi une seule geometrie issue du rpg', async () => { |
| 260 | + expect(await getRpg([745686.206750303, 6270916.492758632, 746458.9373331234, 6271600.843027498])).toMatchObject({ |
| 261 | + fid: 551805, |
| 262 | + geom: { |
| 263 | + coordinates: expect.anything(), |
| 264 | + type: 'Polygon' |
| 265 | + } |
| 266 | + }) |
| 267 | + }) |
| 268 | + |
| 269 | + test('Renvoi aucune geomtrie si rien ne match', async () => { |
| 270 | + expect(await getRpg([755686, 6370916, 756458, 6371600])).toBeNull() |
| 271 | + }) |
| 272 | +}) |
0 commit comments