From baea86766225bfba877874abbfcd7e79927be6fa Mon Sep 17 00:00:00 2001 From: jirik Date: Mon, 16 Mar 2020 16:56:52 +0100 Subject: [PATCH] Treat attribute names in SLD (aka 'launder') Change it to lowercase and replace some characters. Fix #45 --- CHANGELOG.md | 4 + sample/data/upper_attr.geojson | 13 + sample/data/upper_attr.sld | 626 ++++++++++++++++++++++++++++++ src/layman/layer/geoserver/sld.py | 16 + src/layman/layer/rest_test.py | 92 ++++- 5 files changed, 744 insertions(+), 7 deletions(-) create mode 100644 sample/data/upper_attr.geojson create mode 100644 sample/data/upper_attr.sld diff --git a/CHANGELOG.md b/CHANGELOG.md index 28e54ba9b..1ac8d4b12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,10 @@ - Load data into redis on startup even in Flower. - Better handle Micka's HTTP errors, [#43](https://github.com/jirik/layman/issues/43) +## v1.1.8 +2020-03-16 +- Treat attribute names in SLD (aka 'launder'), [#45](https://github.com/jirik/layman/issues/45) + ## v1.1.7 2020-03-09 - Assert version of Micka on startup. diff --git a/sample/data/upper_attr.geojson b/sample/data/upper_attr.geojson new file mode 100644 index 000000000..785d195e6 --- /dev/null +++ b/sample/data/upper_attr.geojson @@ -0,0 +1,13 @@ +{ +"type": "FeatureCollection", +"name": "SilniceDalnice", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "ID": 3559.0, "DPR_SMER_K": 0, "FID_ZBG": "4952518", "SILNICE": "353", "SILNICE_BS": "353", "TYPSIL_P": "silnice 2. třídy", "CISLOUSEKU": "2322A064 2322A004", "JMENO": null, "TYPSIL_K": "S2", "PEAZKOM1": null, "PEAZKOM2": null, "PEAZKOM3": null, "PEAZKOM4": null, "VYM_TAHY_K": null, "VYM_TAHY_P": null, "R_INDSIL7": "353", "KRUH_OBJ_K": "~", "ETAH1": null, "ETAH2": null, "ETAH3": null, "ETAH4": null, "KRUH_OBJ_P": "není kruhový objezd", "DPR_SMER_P": "obousměrný úsek" }, "geometry": { "type": "LineString", "coordinates": [ [ 15.965498589793402, 49.582105220081836 ], [ 15.965431080796268, 49.582050820369744 ], [ 15.965390766471627, 49.582007655465922 ], [ 15.965349322233068, 49.581936041587731 ], [ 15.96530525236424, 49.581822285628519 ], [ 15.965291195742234, 49.581770603107969 ], [ 15.965275138191572, 49.581687490428621 ], [ 15.96526785088707, 49.581621447555044 ], [ 15.965259678080095, 49.581452232306219 ], [ 15.965273350506987, 49.580963436824767 ], [ 15.965279314441981, 49.580379768688886 ], [ 15.965278086108039, 49.580106499674521 ], [ 15.965277921325224, 49.580070193488773 ], [ 15.96527766174809, 49.580010840094509 ], [ 15.965272073582195, 49.579925950959826 ], [ 15.965263468520655, 49.579837392661503 ], [ 15.965236445633277, 49.57969360688211 ], [ 15.965204671511485, 49.579551470204748 ], [ 15.9651724204062, 49.579422460432546 ], [ 15.965124418913264, 49.579258885494582 ], [ 15.965068897326992, 49.579128978317186 ], [ 15.965051104697283, 49.579091596534923 ], [ 15.965001094849077, 49.578996364448351 ], [ 15.964853145129887, 49.578730108856647 ], [ 15.964505923560573, 49.57814227915658 ], [ 15.964423437023106, 49.57800384235545 ], [ 15.964339435201772, 49.577867644217157 ], [ 15.964059201179765, 49.577402506165491 ], [ 15.963969424555938, 49.577253276332208 ], [ 15.963917903925887, 49.577176559964592 ], [ 15.963872050095942, 49.577113255909865 ], [ 15.963819271777897, 49.577045406531795 ], [ 15.963692058825696, 49.576903238132061 ], [ 15.963411189692252, 49.576593201048944 ], [ 15.963202485856586, 49.576372302087833 ], [ 15.962384758434206, 49.575498852506499 ], [ 15.962001367640285, 49.575090928749979 ], [ 15.961807308063889, 49.574884446425983 ], [ 15.961577681433651, 49.574640362704081 ], [ 15.961526046778165, 49.574591447240692 ], [ 15.961442998065399, 49.574512805510096 ], [ 15.961338256712375, 49.574419298615204 ], [ 15.96128211731518, 49.574372213621608 ], [ 15.961234440996206, 49.574335367669526 ], [ 15.96117129036878, 49.574288564882792 ], [ 15.961138511897333, 49.574266746918923 ], [ 15.961072664891679, 49.574226121721047 ], [ 15.960992067228405, 49.574180347490135 ], [ 15.960932178524212, 49.574149490404864 ], [ 15.960851435054993, 49.574110730205533 ], [ 15.960743420650124, 49.574066693777887 ], [ 15.960635821575435, 49.574027631788553 ], [ 15.960524211075063, 49.573991062407501 ], [ 15.960434080735551, 49.573964960346615 ], [ 15.960353595782342, 49.573943366012749 ], [ 15.960294329575053, 49.573929430865874 ], [ 15.960241383396909, 49.573917822591291 ], [ 15.960171758266208, 49.57390474818844 ], [ 15.960043233538004, 49.573883216290952 ], [ 15.959820416533562, 49.573847052696642 ], [ 15.959474910457619, 49.573799033596906 ], [ 15.958939594925834, 49.573724933080264 ], [ 15.957791441853221, 49.573600428859095 ], [ 15.95741248680392, 49.573560227702167 ], [ 15.956162735940453, 49.573428158805562 ], [ 15.955373171058559, 49.573344976168137 ], [ 15.954698530156936, 49.573281767344092 ], [ 15.954099392012177, 49.573216354095713 ], [ 15.953767726406385, 49.573173470398586 ], [ 15.953657071001238, 49.573154312447286 ], [ 15.953583758485181, 49.573139613682507 ], [ 15.953486528210815, 49.573117175835982 ], [ 15.953337134676408, 49.573076694628185 ], [ 15.953280469533624, 49.573060771567718 ], [ 15.953233957452586, 49.573046914946488 ], [ 15.953182908083326, 49.573028096218906 ], [ 15.952934698725636, 49.572913443177868 ], [ 15.952357838410416, 49.57261356013872 ], [ 15.951301380206864, 49.57205883222899 ], [ 15.950114884252109, 49.57143278581357 ], [ 15.949526982211655, 49.571122567399712 ], [ 15.947724306020175, 49.570146049595081 ], [ 15.946752434350104, 49.569613269505616 ], [ 15.946752426250162, 49.569613265102426 ] ] } }, +{ "type": "Feature", "properties": { "ID": 30201.0, "DPR_SMER_K": 0, "FID_ZBG": "4988974", "SILNICE": "37", "SILNICE_BS": "37", "TYPSIL_P": "silnice 1. třídy", "CISLOUSEKU": "2322A053 2322A004", "JMENO": null, "TYPSIL_K": "S1", "PEAZKOM1": null, "PEAZKOM2": null, "PEAZKOM3": null, "PEAZKOM4": null, "VYM_TAHY_K": null, "VYM_TAHY_P": null, "R_INDSIL7": "37", "KRUH_OBJ_K": "~", "ETAH1": null, "ETAH2": null, "ETAH3": null, "ETAH4": null, "KRUH_OBJ_P": "není kruhový objezd", "DPR_SMER_P": "obousměrný úsek" }, "geometry": { "type": "LineString", "coordinates": [ [ 15.934132454401137, 49.586129087122487 ], [ 15.934152016037311, 49.586050671098846 ], [ 15.934186888915272, 49.585957686361319 ], [ 15.934212913266604, 49.585902676943817 ], [ 15.934241407535275, 49.585850807086558 ], [ 15.934300325017226, 49.58575088999806 ], [ 15.934355533186375, 49.585664524079846 ], [ 15.934455302203654, 49.585526534232137 ], [ 15.934519746894594, 49.585432723659999 ], [ 15.934623864128621, 49.585283657543549 ], [ 15.934754659347041, 49.585107398691072 ], [ 15.934892737792023, 49.584913279715821 ], [ 15.934918366424871, 49.58486880549119 ], [ 15.934948557292609, 49.584801483750013 ], [ 15.934972682549036, 49.584743713166695 ], [ 15.935014741016996, 49.584623508634564 ], [ 15.935061959463216, 49.584489039533182 ], [ 15.935092207251158, 49.584393113157198 ], [ 15.935212570626639, 49.584033134238496 ], [ 15.935299775990851, 49.583769231230029 ], [ 15.935383527884913, 49.583531446991223 ], [ 15.935478480878553, 49.583217651912499 ], [ 15.935514186891487, 49.583078358673077 ], [ 15.935540414283713, 49.582972122008833 ], [ 15.935578202729562, 49.582845227654666 ], [ 15.935696539071442, 49.582463610430295 ], [ 15.935769273937748, 49.582233316284437 ], [ 15.93579125115382, 49.582149661187245 ], [ 15.935850227720495, 49.581938227767957 ], [ 15.935904172317107, 49.581736560044888 ], [ 15.935943447858529, 49.581584782333451 ], [ 15.935967305970511, 49.58149261537617 ], [ 15.93599261020764, 49.581377734779217 ], [ 15.936019034542383, 49.58127580445781 ], [ 15.936046863158747, 49.581166928439927 ], [ 15.936074458971234, 49.581060116988112 ], [ 15.936112634186996, 49.580916992068808 ], [ 15.936124218612816, 49.580874327185867 ], [ 15.936132451960891, 49.58084323090651 ], [ 15.936163033694893, 49.580774798142201 ], [ 15.936175801961488, 49.580747976439689 ], [ 15.936218370694794, 49.580675531506195 ], [ 15.936261771902622, 49.580613923582057 ], [ 15.936310595352516, 49.580553905547248 ], [ 15.936392621042982, 49.5804555035335 ], [ 15.936540466795879, 49.580299962157348 ], [ 15.936722949593962, 49.580108653708251 ], [ 15.936815636049074, 49.58001482961776 ], [ 15.936881016155203, 49.579935548124865 ], [ 15.937004227934844, 49.579789592058184 ], [ 15.937166441640583, 49.579564074766566 ], [ 15.937256675180883, 49.579429359362607 ], [ 15.937417642270075, 49.579192737960881 ], [ 15.93757499656852, 49.578949187049034 ], [ 15.937648707766044, 49.57883669795018 ], [ 15.937710520849185, 49.578730047614862 ], [ 15.937789357210789, 49.578590643567694 ], [ 15.937823255303551, 49.578519855762828 ], [ 15.937898166110104, 49.578328955556863 ], [ 15.937952951386944, 49.578171487213559 ], [ 15.938012485134763, 49.577992597874861 ], [ 15.938082609563727, 49.577764639588274 ], [ 15.938160508974862, 49.577532701352453 ], [ 15.938203250601035, 49.577402671275216 ], [ 15.938258442652826, 49.577233500631493 ], [ 15.938312411752529, 49.577070809656661 ], [ 15.938362562402036, 49.576943933022953 ], [ 15.93841468558603, 49.576835557898498 ], [ 15.938518790724642, 49.576653761235775 ], [ 15.938602021167025, 49.576524252021954 ], [ 15.938674803118481, 49.576428332126127 ], [ 15.938818974259478, 49.576249015744381 ], [ 15.938907961683752, 49.576150463881639 ], [ 15.939050105616454, 49.575988040578494 ], [ 15.939221731392056, 49.575788452361131 ], [ 15.939571879173673, 49.575385436775242 ], [ 15.939650446407162, 49.575296104271686 ], [ 15.939828607080836, 49.575089498713425 ], [ 15.939998341881989, 49.574895505687152 ], [ 15.940161775301533, 49.574711914964467 ], [ 15.940254497807592, 49.574602637872069 ], [ 15.940721189233827, 49.574054503434958 ], [ 15.940945085702378, 49.573802743770223 ], [ 15.941128733388537, 49.573587944915261 ], [ 15.941793960647896, 49.572818645961178 ], [ 15.941867195093637, 49.572733216002767 ], [ 15.942127432554939, 49.572441751794408 ], [ 15.942303966722097, 49.572229986408161 ], [ 15.942537218049809, 49.571963591428315 ], [ 15.942829870353272, 49.571617665881824 ], [ 15.942866330161349, 49.571571715720182 ], [ 15.942955965905634, 49.5714260703162 ], [ 15.943002207499697, 49.571335588706667 ], [ 15.943041334801858, 49.57124054589157 ], [ 15.943066576691706, 49.571163947181681 ], [ 15.943128635119246, 49.570926782470472 ], [ 15.943158575253468, 49.570735889354957 ], [ 15.943161186874804, 49.570533093241899 ], [ 15.943144229559053, 49.570403842064074 ], [ 15.94308577183547, 49.570256892337532 ], [ 15.943049753010957, 49.570185372202673 ], [ 15.943003738589319, 49.570113082167985 ], [ 15.942971066126422, 49.570067446832248 ], [ 15.942810120541857, 49.569922536826269 ], [ 15.942696774023483, 49.569830282892667 ], [ 15.942522942489331, 49.569699356741275 ], [ 15.942422687522383, 49.56962799510756 ] ] } }, +{ "type": "Feature", "properties": { "ID": 29066.0, "DPR_SMER_K": 0, "FID_ZBG": "4981596", "SILNICE": "35313", "SILNICE_BS": "35313", "TYPSIL_P": "silnice 3. třídy", "CISLOUSEKU": "2322A064 2411A069", "JMENO": null, "TYPSIL_K": "S3", "PEAZKOM1": null, "PEAZKOM2": null, "PEAZKOM3": null, "PEAZKOM4": null, "VYM_TAHY_K": null, "VYM_TAHY_P": null, "R_INDSIL7": "35313", "KRUH_OBJ_K": "~", "ETAH1": null, "ETAH2": null, "ETAH3": null, "ETAH4": null, "KRUH_OBJ_P": "není kruhový objezd", "DPR_SMER_P": "obousměrný úsek" }, "geometry": { "type": "LineString", "coordinates": [ [ 15.965498589793402, 49.582105220081836 ], [ 15.965771025237363, 49.582071525210161 ], [ 15.966112459523579, 49.582036466775058 ], [ 15.966416209442013, 49.582000204112774 ], [ 15.966508794561474, 49.581985503342956 ], [ 15.966584591327582, 49.581971248489751 ], [ 15.96664579541361, 49.58195606720173 ], [ 15.966706430375257, 49.581937230535736 ], [ 15.966743235326279, 49.581923628638535 ], [ 15.966983025584897, 49.581827993359489 ], [ 15.967517505086214, 49.581589393919856 ], [ 15.967674204406091, 49.581522342466286 ], [ 15.96819883488449, 49.581326863880214 ], [ 15.968243618297729, 49.581310073753485 ], [ 15.968295274930661, 49.581291759154972 ], [ 15.968373954761047, 49.581266550604091 ], [ 15.968922747032261, 49.581096612275338 ], [ 15.969200460671864, 49.581006376143385 ], [ 15.969610753461366, 49.580873056780348 ], [ 15.970139463326554, 49.580700222753642 ], [ 15.970465442754657, 49.580593538813041 ], [ 15.970788278641535, 49.580487294575569 ], [ 15.97086314460836, 49.580463460966527 ], [ 15.970982011516863, 49.580424859088673 ], [ 15.971051517983692, 49.580404511601714 ], [ 15.971181810272121, 49.580369818006453 ], [ 15.971277829783222, 49.580345180640741 ], [ 15.971327368790011, 49.580333611635687 ], [ 15.971363940585089, 49.580326182998938 ], [ 15.971439735686202, 49.580313464148389 ], [ 15.971512948415723, 49.580302722087055 ], [ 15.971905611244591, 49.580245868422779 ], [ 15.971974650384739, 49.580237434885888 ], [ 15.972324959906297, 49.580190041634758 ], [ 15.972383101726546, 49.580182591959833 ], [ 15.97273790903561, 49.580131075546674 ], [ 15.97287549505247, 49.580111825443559 ], [ 15.973298319307053, 49.58005849496768 ], [ 15.973539836063832, 49.580025054662677 ], [ 15.973953149728253, 49.579965433136984 ], [ 15.974163476570688, 49.579937746937475 ], [ 15.974309945738502, 49.579919883990279 ], [ 15.974396787902458, 49.579909992620244 ], [ 15.974463550703037, 49.579903376705971 ], [ 15.974524968082985, 49.579898618667421 ], [ 15.974621739350635, 49.579893915940687 ], [ 15.974777513195788, 49.579890156262501 ], [ 15.975270068059189, 49.579885677714707 ], [ 15.976279943916971, 49.579885888516216 ], [ 15.97656241041558, 49.579884633461759 ], [ 15.976701496081375, 49.579882394414589 ], [ 15.976768304774202, 49.579879401834312 ], [ 15.977007396636465, 49.579865207277841 ], [ 15.977582874001884, 49.579821504962794 ], [ 15.977817301513625, 49.579805443394854 ], [ 15.978229153790066, 49.579777218482718 ], [ 15.979876962846385, 49.579648374708825 ], [ 15.981164517619018, 49.579547634501466 ], [ 15.982556039704995, 49.579438334765882 ], [ 15.98277919394563, 49.57942292123343 ], [ 15.983088164690875, 49.579399432997882 ], [ 15.983153458685777, 49.579394783102693 ], [ 15.983413489671893, 49.579385837240757 ], [ 15.983469292012183, 49.579387384530115 ], [ 15.983555279518615, 49.579393897859696 ], [ 15.983666524088919, 49.579406307477363 ], [ 15.98435997867653, 49.579505906241167 ], [ 15.984635908003584, 49.579547173488095 ], [ 15.985804164927892, 49.579718508025188 ], [ 15.986230181606484, 49.579781067692913 ], [ 15.986540243832202, 49.579824552695918 ], [ 15.987521029354752, 49.579966347172324 ], [ 15.987716547551997, 49.579993534109335 ], [ 15.987869430451537, 49.580010639943033 ], [ 15.98802167465881, 49.580031390727342 ], [ 15.988077763026826, 49.580040362518353 ], [ 15.988128486109661, 49.580052395291325 ], [ 15.98817565415937, 49.580065154704478 ], [ 15.988230554818486, 49.580084103132336 ], [ 15.98833379618708, 49.580125124375307 ], [ 15.988398594784011, 49.580152009890305 ], [ 15.988438254482011, 49.580169225036805 ], [ 15.988492680039958, 49.58019805914109 ], [ 15.988558700745195, 49.580232116297331 ], [ 15.988890533493874, 49.580419189304891 ], [ 15.989217504408845, 49.580601547841482 ], [ 15.989407167322739, 49.580707879858046 ], [ 15.989664197923624, 49.580850089869585 ], [ 15.98980712227106, 49.580925091576603 ], [ 15.989883427672797, 49.580962370505837 ], [ 15.989953460176197, 49.580993471387728 ], [ 15.990059094559493, 49.581035685857024 ], [ 15.990118788498734, 49.58105532193742 ], [ 15.990171298743524, 49.581069978452824 ], [ 15.990199298213399, 49.581076895562084 ], [ 15.990236590636604, 49.581084787591315 ], [ 15.990321967142567, 49.581099396787387 ], [ 15.990421084999936, 49.58111408633637 ], [ 15.990512742949619, 49.581124716865354 ], [ 15.990594947900062, 49.58112920027542 ], [ 15.990671842574883, 49.581131226772811 ], [ 15.990742264418049, 49.581129124164448 ], [ 15.990843605223661, 49.581122218912327 ], [ 15.990925868027752, 49.581113779227557 ], [ 15.991041022155636, 49.581096440392287 ], [ 15.991108652898577, 49.581084340387399 ], [ 15.991159621465513, 49.581074165932684 ], [ 15.991239167142355, 49.581056015092756 ], [ 15.991346922139721, 49.581031942097809 ], [ 15.991578461164876, 49.580971248749123 ], [ 15.99165851159079, 49.58095105372665 ], [ 15.991935417059571, 49.58088370808742 ], [ 15.993168155008947, 49.580577590267858 ], [ 15.993590808660587, 49.580465676051631 ], [ 15.994589936316016, 49.580213847479705 ], [ 15.995178338662992, 49.580070362214649 ], [ 15.995601232782123, 49.579970358765024 ] ] } }, +{ "type": "Feature", "properties": { "ID": 28619.0, "DPR_SMER_K": 0, "FID_ZBG": "5461214712823808", "SILNICE": "353", "SILNICE_BS": "353", "TYPSIL_P": "silnice 2. třídy", "CISLOUSEKU": "2411A028 2322A064", "JMENO": null, "TYPSIL_K": "S2", "PEAZKOM1": null, "PEAZKOM2": null, "PEAZKOM3": null, "PEAZKOM4": null, "VYM_TAHY_K": null, "VYM_TAHY_P": null, "R_INDSIL7": "353", "KRUH_OBJ_K": "~", "ETAH1": null, "ETAH2": null, "ETAH3": null, "ETAH4": null, "KRUH_OBJ_P": "není kruhový objezd", "DPR_SMER_P": "obousměrný úsek" }, "geometry": { "type": "LineString", "coordinates": [ [ 15.992984897785272, 49.603615907389631 ], [ 15.992983318241217, 49.603611554002903 ], [ 15.992817610921403, 49.603112624922993 ], [ 15.992759456460385, 49.602917759673907 ], [ 15.992739901812968, 49.602833268249874 ], [ 15.992734524925437, 49.602794840597554 ], [ 15.992733741346925, 49.602728425639221 ], [ 15.992736444759123, 49.602684543844411 ], [ 15.992739941218939, 49.602644478864704 ], [ 15.992743194199527, 49.602618064925323 ], [ 15.992749921890816, 49.602584535894579 ], [ 15.992759828884083, 49.602551609419955 ], [ 15.992773724831833, 49.602513752216652 ], [ 15.992811688691729, 49.6024230012424 ], [ 15.992825349608511, 49.602390268149513 ], [ 15.992840592147175, 49.602360370459337 ], [ 15.992856122001843, 49.602332757652491 ], [ 15.992871507393367, 49.602309841280302 ], [ 15.992891204473047, 49.602284625738633 ], [ 15.992941587712698, 49.602224162603683 ], [ 15.993247819317888, 49.601831626218207 ], [ 15.993372293660176, 49.601666958049854 ], [ 15.993444268576628, 49.60157146460341 ], [ 15.993526434877108, 49.601450941918017 ], [ 15.993565074485911, 49.601391491558232 ], [ 15.993593680674334, 49.601342960283269 ], [ 15.993618892694558, 49.601294715478886 ], [ 15.993637230010503, 49.601248304454366 ], [ 15.993658007744866, 49.601185149605691 ], [ 15.993674662271887, 49.601125575563231 ], [ 15.993688745547358, 49.601053133419022 ], [ 15.993697968290586, 49.601003951009112 ], [ 15.993707691529721, 49.600937968596831 ], [ 15.993715010663808, 49.600795943513241 ], [ 15.993709636398755, 49.600647798504852 ], [ 15.993703154643173, 49.600569636933336 ], [ 15.993696939904893, 49.600503988153321 ], [ 15.993686739963348, 49.600438037988262 ], [ 15.993648715922422, 49.600270766987151 ], [ 15.993616421909534, 49.600160960743452 ], [ 15.993600837969723, 49.600114971755595 ], [ 15.993587528334297, 49.600078841056572 ], [ 15.993573678075659, 49.60004728630075 ], [ 15.993550446189834, 49.600004339952299 ], [ 15.993500389685138, 49.599924512349901 ], [ 15.993377636855366, 49.599747393259037 ], [ 15.993264999521108, 49.599597020016461 ], [ 15.993115461268886, 49.599393704208957 ], [ 15.993050865768488, 49.599309517740089 ], [ 15.993017554701394, 49.599269973105301 ], [ 15.992978146847525, 49.599224807340583 ], [ 15.992935495513073, 49.599178309924625 ], [ 15.992861481206852, 49.5991047266984 ], [ 15.99265509648934, 49.598901546221889 ], [ 15.992535322785184, 49.598782497407591 ], [ 15.992408473942337, 49.598665629052945 ], [ 15.992355382993896, 49.59861988064025 ], [ 15.992297665008053, 49.598571971677423 ], [ 15.992237422706344, 49.598522604366003 ], [ 15.991783499468442, 49.598168954405594 ], [ 15.991497625399882, 49.597951456836576 ], [ 15.99137406051512, 49.597854696913153 ], [ 15.990898040713981, 49.597502711306483 ], [ 15.990257431235028, 49.597004689247989 ], [ 15.990018504346862, 49.596810835936928 ], [ 15.989786879158515, 49.596624903343802 ], [ 15.989686563442294, 49.59655358203856 ], [ 15.989541417920879, 49.596460400997884 ], [ 15.989482439957259, 49.596427331785648 ], [ 15.989440971761724, 49.596405364374554 ], [ 15.989404169343171, 49.59638736202006 ], [ 15.989174970683274, 49.596282850239078 ], [ 15.988819069490155, 49.59612963316961 ], [ 15.988551151602364, 49.596011227074122 ], [ 15.987681029719433, 49.595619930603412 ], [ 15.987396031041246, 49.595487283259502 ], [ 15.987182477127936, 49.595391184114177 ], [ 15.987117512617829, 49.595362005651232 ], [ 15.987037364929957, 49.59532506942783 ], [ 15.986810177500757, 49.595214901628481 ], [ 15.986204081289076, 49.594903958518557 ], [ 15.986133950240497, 49.594866467166888 ], [ 15.986076890059701, 49.594834220021291 ], [ 15.985907243347103, 49.59473451656654 ], [ 15.984940067598787, 49.594144700052091 ], [ 15.984854596114431, 49.594090394111802 ], [ 15.984574574491582, 49.593909538293701 ], [ 15.984526795422907, 49.593881387719904 ], [ 15.984453464623082, 49.593843969708985 ], [ 15.984397584332129, 49.593817740446049 ], [ 15.984344224132091, 49.593795323068342 ], [ 15.984243573668396, 49.593755474212145 ], [ 15.98320321539315, 49.593378858956235 ], [ 15.982323212375602, 49.593071745454232 ], [ 15.981839667978218, 49.592901711575458 ], [ 15.981188530244539, 49.59267081093671 ], [ 15.980817932729359, 49.592532638507322 ], [ 15.980693243726192, 49.592481640819464 ], [ 15.980630780432872, 49.592453697713147 ], [ 15.98057295725626, 49.592424730041373 ], [ 15.980244915990902, 49.592248290195357 ], [ 15.980085043452281, 49.592164163654161 ], [ 15.979515335836364, 49.591860625335286 ], [ 15.979279623377883, 49.591733318156805 ], [ 15.979106979007367, 49.591634615935675 ], [ 15.979052947823936, 49.591601362984328 ], [ 15.978935659468108, 49.591520605856829 ], [ 15.978872421745393, 49.591474080847441 ], [ 15.978838835927624, 49.591443924927837 ], [ 15.978805213027156, 49.591410869277432 ], [ 15.978772269495277, 49.591373248141949 ], [ 15.978743285108397, 49.591335293279919 ], [ 15.97870373395171, 49.591274720413544 ], [ 15.978676708492738, 49.591228947456223 ], [ 15.978641943482073, 49.591169642490243 ], [ 15.978614033567551, 49.591119638185233 ], [ 15.978489120022626, 49.590877931569281 ], [ 15.978322577598878, 49.590576145993843 ], [ 15.977855687906199, 49.589725303462089 ], [ 15.977709874493545, 49.589450308459341 ], [ 15.97763714996197, 49.589327019523395 ], [ 15.977590327236706, 49.589250324042965 ], [ 15.977565793681482, 49.589210080675016 ], [ 15.977537521211106, 49.589171273990978 ], [ 15.977496175295354, 49.58912305737028 ], [ 15.977464517086364, 49.589089154203037 ], [ 15.977438144412778, 49.589060721191856 ], [ 15.977397269662191, 49.589023856305047 ], [ 15.97733138675658, 49.588972693703049 ], [ 15.9772851801347, 49.588941490099444 ], [ 15.977232149841885, 49.588907958752372 ], [ 15.977172660737452, 49.588877830607785 ], [ 15.977134161089957, 49.588860337680025 ], [ 15.977086236689496, 49.588841044103951 ], [ 15.976542475942129, 49.588658453130819 ], [ 15.976434977418242, 49.588623255370017 ], [ 15.976348616507543, 49.588594973675498 ], [ 15.976309170424395, 49.588582061877133 ], [ 15.97584146911278, 49.588435369215986 ], [ 15.975537449435363, 49.588338814586116 ], [ 15.975409808166059, 49.588301256013807 ], [ 15.975134761480913, 49.588226088611776 ], [ 15.974968110812343, 49.588184757561173 ], [ 15.974865113360353, 49.588161197413086 ], [ 15.974760664497463, 49.58813951877238 ], [ 15.974646081438966, 49.588116890687651 ], [ 15.974250628115662, 49.588045828118986 ], [ 15.974217755198643, 49.588039904810252 ], [ 15.973775668453436, 49.587975281307031 ], [ 15.973424717520796, 49.587929778568707 ], [ 15.973322264352001, 49.587912504736224 ], [ 15.973272756107086, 49.587902051696233 ], [ 15.973227652947292, 49.587890330277006 ], [ 15.973013718420003, 49.587798218040042 ], [ 15.972888607747628, 49.587748898453633 ], [ 15.972774279760408, 49.587707004983223 ], [ 15.972733243524342, 49.587693572932388 ], [ 15.972642889368586, 49.587667076609669 ], [ 15.972533510279494, 49.587637960661262 ], [ 15.972461849536149, 49.587619037704563 ], [ 15.972363293831192, 49.58759285166154 ], [ 15.972282245621916, 49.587569206261996 ], [ 15.972158438259445, 49.587529625998087 ], [ 15.972106726598245, 49.587511355583551 ], [ 15.972065695217177, 49.587495569873255 ], [ 15.971852520107145, 49.587409333821057 ], [ 15.971646737298359, 49.587315428812211 ], [ 15.971557221522158, 49.587277126710717 ], [ 15.970888119253685, 49.586989283398218 ], [ 15.970315609743386, 49.586755194992861 ], [ 15.970093919185873, 49.586665385196106 ], [ 15.970081055173846, 49.586660172628527 ], [ 15.97005311743977, 49.586649335443809 ], [ 15.969906683860746, 49.586584317381515 ], [ 15.969612613272004, 49.586467044547774 ], [ 15.96939190950293, 49.586381680650717 ], [ 15.969188701260197, 49.58630280371591 ], [ 15.968986775909466, 49.586222213101436 ], [ 15.968899713641301, 49.586183605899414 ], [ 15.968810373538114, 49.586139846668871 ], [ 15.968701037909231, 49.586081036151455 ], [ 15.96863594599103, 49.586042601779724 ], [ 15.968574677758983, 49.586005362756367 ], [ 15.968508729956184, 49.585961612627365 ], [ 15.968416977385642, 49.585891733174776 ], [ 15.968353354157204, 49.585840464251177 ], [ 15.968302726802346, 49.58579359426291 ], [ 15.968256156168666, 49.585748172708868 ], [ 15.968206614331466, 49.585695256142799 ], [ 15.968166903867312, 49.58564652560969 ], [ 15.968140982897371, 49.585612511322282 ], [ 15.968115629978545, 49.585574556805618 ], [ 15.968058002755967, 49.585469795762009 ], [ 15.968023792612991, 49.585399655692342 ], [ 15.967996541755877, 49.585337367509212 ], [ 15.967969576496628, 49.585253319459767 ], [ 15.967956277728355, 49.585186223509972 ], [ 15.967950634822646, 49.585127675081559 ], [ 15.967948431544162, 49.585056170247007 ], [ 15.967952582402114, 49.584930648450566 ], [ 15.967959312271157, 49.584863134812387 ], [ 15.967968208371532, 49.584806359444173 ], [ 15.96797969081525, 49.584756352794507 ], [ 15.967999371097671, 49.584681619745261 ], [ 15.968098212690043, 49.584337147618392 ], [ 15.968163560103159, 49.584141572757936 ], [ 15.968204890297812, 49.584002848113272 ], [ 15.968251230962636, 49.583794315714464 ], [ 15.968259769612978, 49.58371804022525 ], [ 15.968259904936479, 49.583684083632718 ], [ 15.968254191935236, 49.583631975633359 ], [ 15.968242242587349, 49.58357559219337 ], [ 15.968232714313523, 49.583535198988272 ], [ 15.968223289977304, 49.583504699545216 ], [ 15.968212633766189, 49.583477184652928 ], [ 15.968180794861949, 49.58341175998217 ], [ 15.96814712410684, 49.583353438705409 ], [ 15.96812040779526, 49.583316104874804 ], [ 15.968089789862324, 49.583277624012503 ], [ 15.96805226340409, 49.583236518646622 ], [ 15.967981790319309, 49.583166804502085 ], [ 15.967929229012714, 49.583119090261484 ], [ 15.967867629224942, 49.583067431081119 ], [ 15.967811597848584, 49.583026406176678 ], [ 15.967685656199148, 49.582944805931852 ], [ 15.967603188459078, 49.582893826358628 ], [ 15.967540844242178, 49.582857953238822 ], [ 15.96749803280491, 49.582836598605411 ], [ 15.967455344930354, 49.582816882872002 ], [ 15.967398861056621, 49.582794128577454 ], [ 15.967363544773329, 49.582782214594332 ], [ 15.96733227152242, 49.582772599062231 ], [ 15.96725375632616, 49.582750798246295 ], [ 15.96721687624337, 49.582741390920638 ], [ 15.967079836654804, 49.582710531823111 ], [ 15.9668719410411, 49.582666555138104 ], [ 15.966592788014873, 49.582611620827926 ], [ 15.966536915348902, 49.58260020157396 ], [ 15.966488194032644, 49.582591217098468 ], [ 15.966442669589718, 49.582580945255117 ], [ 15.966382128851665, 49.582563884684163 ], [ 15.966328175068339, 49.582547206290457 ], [ 15.966235971940463, 49.582514633898661 ], [ 15.966165740332761, 49.58248563007313 ], [ 15.966107661953776, 49.582460128679678 ], [ 15.966011468751566, 49.582414262153584 ], [ 15.965857140953002, 49.582337005252199 ], [ 15.965748875112553, 49.582277728996814 ], [ 15.965704247695912, 49.582250985007533 ], [ 15.965671032843291, 49.582229153907825 ], [ 15.965498589793402, 49.582105220081836 ] ] } }, +{ "type": "Feature", "properties": { "ID": 25869.0, "DPR_SMER_K": 0, "FID_ZBG": "4967087", "SILNICE": "35016", "SILNICE_BS": "35016", "TYPSIL_P": "silnice 3. třídy", "CISLOUSEKU": "2322A053 2322A057", "JMENO": null, "TYPSIL_K": "S3", "PEAZKOM1": null, "PEAZKOM2": null, "PEAZKOM3": null, "PEAZKOM4": null, "VYM_TAHY_K": null, "VYM_TAHY_P": null, "R_INDSIL7": "35016", "KRUH_OBJ_K": "~", "ETAH1": null, "ETAH2": null, "ETAH3": null, "ETAH4": null, "KRUH_OBJ_P": "není kruhový objezd", "DPR_SMER_P": "obousměrný úsek" }, "geometry": { "type": "LineString", "coordinates": [ [ 15.934132454401137, 49.586129087122487 ], [ 15.934093052586155, 49.586168999431834 ], [ 15.93407030124488, 49.586199044201685 ], [ 15.934048344185662, 49.586232408721401 ], [ 15.934031962070467, 49.586259950976647 ], [ 15.934012800507912, 49.586293102910112 ], [ 15.933992043560158, 49.586332325903243 ], [ 15.933972762170903, 49.586372865400335 ], [ 15.933934290660781, 49.586457301130999 ], [ 15.933909916267567, 49.586519688041562 ], [ 15.933884370961817, 49.586587490279285 ], [ 15.933498061270308, 49.587772290794923 ], [ 15.933391252672697, 49.58813984748177 ], [ 15.933215831743571, 49.588652728233534 ], [ 15.933136917132916, 49.588897408161081 ], [ 15.933091375015376, 49.589031099426215 ], [ 15.933061371200196, 49.589119529895029 ], [ 15.932947423331902, 49.589484397051187 ], [ 15.932901399690472, 49.589639915804419 ], [ 15.932781781403486, 49.589882626827318 ], [ 15.932710975512911, 49.590002714606918 ], [ 15.9325955035109, 49.590174354609857 ], [ 15.932415633638289, 49.590423566286361 ], [ 15.932346719263425, 49.590535468831661 ], [ 15.932294832096991, 49.5906263063114 ], [ 15.932247952682351, 49.590714084931193 ], [ 15.932212600119323, 49.590784272500848 ], [ 15.93212920206409, 49.590951022265472 ], [ 15.932079708705325, 49.591068749881842 ], [ 15.932052323818212, 49.591139544400725 ], [ 15.931930954703358, 49.591494520896454 ], [ 15.931881830618517, 49.591621782799514 ], [ 15.931857788068877, 49.591676119165179 ], [ 15.931806592580172, 49.59176642983418 ], [ 15.931750187695791, 49.591848322238093 ], [ 15.93160201828772, 49.592035813281065 ], [ 15.931443997855956, 49.592250438536574 ], [ 15.931242406606756, 49.592521406909171 ], [ 15.931150694145414, 49.592621993674356 ], [ 15.931000757621813, 49.592776231906882 ], [ 15.930739886836168, 49.59302417812512 ], [ 15.930701633136351, 49.593064086797369 ], [ 15.930629567747182, 49.593141435955594 ], [ 15.930580313092491, 49.593200876870057 ], [ 15.930522843083136, 49.593278613703596 ], [ 15.930495385790138, 49.593318892221824 ], [ 15.93043430782973, 49.593416869415044 ], [ 15.93040713609517, 49.593472325267406 ], [ 15.93038123543341, 49.593532549575116 ], [ 15.930338960340588, 49.593664198907199 ], [ 15.93031982620124, 49.593767227734823 ], [ 15.930290117070317, 49.593865874717331 ], [ 15.930262724446052, 49.593934912117632 ], [ 15.930232381643817, 49.593999686872579 ], [ 15.930185955079356, 49.594086150655109 ], [ 15.930150217266315, 49.594144077301351 ], [ 15.930123930262743, 49.594183267992257 ], [ 15.930074969125748, 49.594251576459328 ], [ 15.930025173611336, 49.594314624621589 ], [ 15.929933290484916, 49.594416510592296 ], [ 15.929650905208739, 49.594719500255934 ], [ 15.929467609868169, 49.594935701937985 ], [ 15.929430467787878, 49.594982639125035 ], [ 15.929342188296078, 49.595112258738965 ], [ 15.929307874863962, 49.595163512685332 ], [ 15.929265775063728, 49.595234000562883 ], [ 15.929222467220065, 49.595311186532278 ], [ 15.929162870933963, 49.595419995679947 ], [ 15.92903401753801, 49.595684227777724 ], [ 15.928991834032528, 49.595776799855201 ], [ 15.928944438498805, 49.595895954309491 ], [ 15.92890146599599, 49.596019157736599 ], [ 15.928877070126333, 49.596099595429514 ], [ 15.928847387294395, 49.596203169451343 ], [ 15.928827180487863, 49.596288181506331 ], [ 15.928791506271889, 49.596502204790376 ], [ 15.928784300673417, 49.596553278986626 ], [ 15.928784518156249, 49.596608141870362 ], [ 15.92878962077088, 49.596656152272907 ], [ 15.928799500135202, 49.596707333250173 ], [ 15.92880782893355, 49.596739926865105 ], [ 15.928819439173543, 49.596772861053338 ], [ 15.928829751094883, 49.596797548129722 ], [ 15.928836759612139, 49.596812748888091 ], [ 15.928848865282903, 49.596836757823056 ], [ 15.928867707648765, 49.596871682584435 ], [ 15.928955281309468, 49.597018241557194 ], [ 15.92904140308675, 49.59715076546334 ], [ 15.929079425842728, 49.597218820870452 ], [ 15.929129864877492, 49.597322062752987 ], [ 15.929160639027467, 49.597404902483724 ], [ 15.929170858573471, 49.597436282074831 ], [ 15.929176197187479, 49.597462210738101 ], [ 15.929181131131219, 49.59749980572419 ], [ 15.929183819567555, 49.597556957250944 ], [ 15.929180376648626, 49.597595896693889 ], [ 15.929174811727847, 49.597639110682081 ], [ 15.929163238632514, 49.59769609903028 ], [ 15.929122256559419, 49.597848344033977 ], [ 15.929040554733865, 49.598119401243615 ], [ 15.928893561978864, 49.598616538752687 ], [ 15.928860166743828, 49.598733428373222 ], [ 15.928837597169673, 49.598802959967863 ], [ 15.928810059297756, 49.598876096556538 ], [ 15.928782161111892, 49.598941962865766 ], [ 15.928756864731353, 49.598994175516765 ], [ 15.92873242198354, 49.599040342075511 ], [ 15.9287324211593, 49.599040343424285 ] ] } }, +{ "type": "Feature", "properties": { "ID": 25927.0, "DPR_SMER_K": 0, "FID_ZBG": "4967288", "SILNICE": "37", "SILNICE_BS": "37", "TYPSIL_P": "silnice 1. třídy", "CISLOUSEKU": "2322A002 2322A053", "JMENO": null, "TYPSIL_K": "S1", "PEAZKOM1": null, "PEAZKOM2": null, "PEAZKOM3": null, "PEAZKOM4": null, "VYM_TAHY_K": null, "VYM_TAHY_P": null, "R_INDSIL7": "37", "KRUH_OBJ_K": "~", "ETAH1": null, "ETAH2": null, "ETAH3": null, "ETAH4": null, "KRUH_OBJ_P": "není kruhový objezd", "DPR_SMER_P": "obousměrný úsek" }, "geometry": { "type": "LineString", "coordinates": [ [ 15.935484088857574, 49.603821192390797 ], [ 15.935537053844357, 49.603621932325147 ], [ 15.935566514792797, 49.60349480169932 ], [ 15.935587603550749, 49.60339093475411 ], [ 15.935641823439132, 49.603083072359979 ], [ 15.935645182770786, 49.603064433603443 ], [ 15.935665412347179, 49.602936038899813 ], [ 15.935698447545121, 49.60268704968496 ], [ 15.935709974188475, 49.602604545151294 ], [ 15.935718526229422, 49.602511493261382 ], [ 15.935724346778304, 49.60234625869856 ], [ 15.935725305279131, 49.6021546706585 ], [ 15.935717131665966, 49.601924172877084 ], [ 15.935703677598783, 49.601703883692146 ], [ 15.935698796605902, 49.601623841947166 ], [ 15.935686909265458, 49.601515201178927 ], [ 15.935670010116528, 49.601381734595201 ], [ 15.93565715921277, 49.601288411279299 ], [ 15.935625288064603, 49.601071382415135 ], [ 15.935576527382915, 49.600828424231793 ], [ 15.935523899332766, 49.600615274200919 ], [ 15.935466513228558, 49.600407891024297 ], [ 15.935408179127474, 49.600236685544985 ], [ 15.93531028472924, 49.599947625209879 ], [ 15.935240536321109, 49.599771204848707 ], [ 15.935185952631867, 49.59962889352613 ], [ 15.93499109620943, 49.599150430678591 ], [ 15.934878874821996, 49.598884315580037 ], [ 15.934591515728398, 49.598211220640536 ], [ 15.934482910249319, 49.597954433561242 ], [ 15.934295128279452, 49.597515617961456 ], [ 15.934157872720686, 49.597189834097385 ], [ 15.934025091263466, 49.596824555399365 ], [ 15.933990308869465, 49.596696063529123 ], [ 15.933967332983594, 49.596587845143937 ], [ 15.933948937335394, 49.596476625765327 ], [ 15.933932598668813, 49.596370995099363 ], [ 15.933922830416009, 49.596265231046203 ], [ 15.933918920835483, 49.596158645666073 ], [ 15.933922400116032, 49.596065931568297 ], [ 15.933928642759442, 49.595983386721599 ], [ 15.933942978223598, 49.595861351341341 ], [ 15.933960469516521, 49.595766626146549 ], [ 15.933994509404867, 49.595624906250201 ], [ 15.934031608438033, 49.595511032382227 ], [ 15.934079609238593, 49.595386128694635 ], [ 15.934116403130368, 49.595297128603775 ], [ 15.934227237519901, 49.595085569965242 ], [ 15.934300220599578, 49.594965013168647 ], [ 15.934398478995689, 49.594818587011353 ], [ 15.934515275563221, 49.5946612598229 ], [ 15.934574848870184, 49.594581870872538 ], [ 15.934746395246457, 49.594359544404881 ], [ 15.934973988201211, 49.594057288566283 ], [ 15.935029203173587, 49.59397657172444 ], [ 15.935072711856504, 49.59391135020482 ], [ 15.935132308879117, 49.593812497983279 ], [ 15.935188209476399, 49.593720244896446 ], [ 15.935242187961512, 49.593619335192265 ], [ 15.935260836019502, 49.593583092837385 ], [ 15.935283581378638, 49.59353647940835 ], [ 15.935326917287471, 49.59343666051636 ], [ 15.935364211448942, 49.593340998821262 ], [ 15.935384820727373, 49.593280733094836 ], [ 15.935405351015765, 49.593212403785117 ], [ 15.935434269234692, 49.593112211308373 ], [ 15.935456031239491, 49.593015946317159 ], [ 15.935469308936284, 49.592944040900292 ], [ 15.935477573850864, 49.592888901008521 ], [ 15.935491280161807, 49.592761983273384 ], [ 15.935492088205296, 49.592638320397306 ], [ 15.935489496412004, 49.592493566650383 ], [ 15.935470642175479, 49.592336112898735 ], [ 15.935450794960285, 49.592199705212025 ], [ 15.93542534283112, 49.592046483965049 ], [ 15.935258144112739, 49.591284850458109 ], [ 15.935210793005325, 49.591077722997355 ], [ 15.935030166404095, 49.590278580493546 ], [ 15.93488063487138, 49.589600586637715 ], [ 15.934822047880553, 49.589341450943415 ], [ 15.934801002271403, 49.589251124223942 ], [ 15.934740815197344, 49.588980006507107 ], [ 15.934667780473331, 49.588644173817222 ], [ 15.934649253932786, 49.588565373804641 ], [ 15.934461675544171, 49.587712175000341 ], [ 15.934431615149832, 49.587580692464186 ], [ 15.934309935371063, 49.587041887141275 ], [ 15.934205015599339, 49.586608228529514 ], [ 15.934157344152165, 49.586397209511773 ], [ 15.934134647955519, 49.586287463740028 ], [ 15.934132454401137, 49.586129087122487 ] ] } } +] +} diff --git a/sample/data/upper_attr.sld b/sample/data/upper_attr.sld new file mode 100644 index 000000000..34752694a --- /dev/null +++ b/sample/data/upper_attr.sld @@ -0,0 +1,626 @@ + + + + SilniceDalnice + + SilniceDalnice + + + D1 + + D1 + + + + TYPSIL_K + D1 + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dc4600 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + + + + + D1p + + D1p + + + + TYPSIL_K + D1p + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dc4600 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + + + + + D1v + + D1v + + + + TYPSIL_K + D1v + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dc4600 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + + + + + D2 + + D2 + + + + TYPSIL_K + D2 + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dc4600 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + + + + + D2p + + D2p + + + + TYPSIL_K + D2p + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dc4600 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + + + + + D2v + + D2v + + + + TYPSIL_K + D2v + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dc4600 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + + + + + M + + M + + + + TYPSIL_K + M + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dca000 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + 4 2 + + + + + Mp + + Mp + + + + TYPSIL_K + Mp + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dca000 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + 4 2 + + + + + Mv + + Mv + + + + TYPSIL_K + Mv + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #dca000 + 6 + bevel + square + + + + + #4c4c4c + 1 + bevel + square + 4 2 + + + + + S1 + + S1 + + + + TYPSIL_K + S1 + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #e3c83c + 6 + bevel + square + + + + + S1p + + S1p + + + + TYPSIL_K + S1p + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #e3c83c + 6 + bevel + square + + + + + S1v + + S1v + + + + TYPSIL_K + S1v + + + 2 + 100000 + + + #4c4c4c + 7 + bevel + square + + + + + #e3c83c + 6 + bevel + square + + + + + S2 + + S2 + + + + TYPSIL_K + S2 + + + 2 + 100000 + + + #4c4c4c + 6 + bevel + square + + + + + #e3c83c + 4 + bevel + square + + + + + S2p + + S2p + + + + TYPSIL_K + S2p + + + 2 + 100000 + + + #4c4c4c + 6 + bevel + square + + + + + #e3c83c + 4 + bevel + square + + + + + S2v + + S2v + + + + TYPSIL_K + S2v + + + 2 + 100000 + + + #4c4c4c + 6 + bevel + square + + + + + #e3c83c + 4 + bevel + square + + + + + S3 + + S3 + + + + TYPSIL_K + S3 + + + 2 + 100000 + + + #4c4c4c + 6 + bevel + square + + + + + #ffffff + 4 + bevel + square + + + + + S3p + + S3p + + + + TYPSIL_K + S3p + + + 2 + 100000 + + + #4c4c4c + 6 + bevel + square + + + + + #ffffff + 4 + bevel + square + + + + + S3v + + S3v + + + + TYPSIL_K + S3v + + + 2 + 100000 + + + #4c4c4c + 6 + bevel + square + + + + + #ffffff + 4 + bevel + square + + + + + + + diff --git a/src/layman/layer/geoserver/sld.py b/src/layman/layer/geoserver/sld.py index d9f44d3bc..af263535d 100644 --- a/src/layman/layer/geoserver/sld.py +++ b/src/layman/layer/geoserver/sld.py @@ -1,6 +1,7 @@ import io import json import traceback +import re from urllib.parse import urljoin import xml.etree.ElementTree as ET @@ -72,6 +73,11 @@ def get_publication_uuid(username, publication_type, publication_name): return None +def launder_attribute_name(attr_name): + # https://github.com/OSGeo/gdal/blob/355b41831cd2685c85d1aabe5b95665a2c6e99b7/gdal/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp#L129,L155 + return re.sub(r"['\-#]", '_', attr_name.lower()) + + def create_layer_style(username, layername): sld_file = get_layer_file(username, layername) # print('create_layer_style', sld_file) @@ -112,6 +118,16 @@ def create_layer_style(username, layername): else: sld_content_type = 'application/vnd.ogc.sld+xml' + propertname_els = tree.findall('.//{http://www.opengis.net/ogc}PropertyName') + for el in propertname_els: + el.text = launder_attribute_name(el.text) + + sld_file = io.BytesIO() + tree.write( + sld_file, + encoding=None, + xml_declaration=True, + ) sld_file.seek(0) r = requests.put( diff --git a/src/layman/layer/rest_test.py b/src/layman/layer/rest_test.py index 472b3f05f..7c1087ea1 100644 --- a/src/layman/layer/rest_test.py +++ b/src/layman/layer/rest_test.py @@ -37,6 +37,13 @@ num_layers_before_test = 0 +def wait_till_ready(username, layername): + last_task = util._get_layer_task(username, layername) + while last_task is not None and not celery_util.is_task_ready(last_task): + time.sleep(0.1) + last_task = util._get_layer_task(username, layername) + + @pytest.fixture(scope="module") def client(): # print('before app.test_client()') @@ -176,13 +183,6 @@ def test_get_layers_testuser1_v1(client): }) -def wait_till_ready(username, layername): - last_task = util._get_layer_task(username, layername) - while last_task is not None and not celery_util.is_task_ready(last_task): - time.sleep(0.1) - last_task = util._get_layer_task(username, layername) - - @pytest.mark.usefixtures('app_context') def test_post_layers_simple(client): username = 'testuser1' @@ -508,6 +508,84 @@ def test_post_layers_complex(client): }) +def test_uppercase_attr(client): + with app.app_context(): + username = 'testuser2' + rest_path = url_for('rest_layers.post', username=username) + file_paths = [ + 'sample/data/upper_attr.geojson', + ] + for fp in file_paths: + assert os.path.isfile(fp) + files = [] + sld_path = 'sample/data/upper_attr.sld' + assert os.path.isfile(sld_path) + layername = 'upper_attr' + try: + files = [(open(fp, 'rb'), os.path.basename(fp)) for fp in file_paths] + rv = client.post(rest_path, data={ + 'file': files, + 'name': layername, + 'sld': (open(sld_path, 'rb'), os.path.basename(sld_path)), + }) + assert rv.status_code == 200 + resp_json = rv.get_json() + # print(resp_json) + finally: + for fp in files: + fp[0].close() + + last_task = util._get_layer_task(username, layername) + assert last_task is not None and not celery_util.is_task_ready(last_task) + wait_till_ready(username, layername) + # last_task['last'].get() + assert celery_util.is_task_ready(last_task) + + with app.app_context(): + rest_path = url_for('rest_layer.get', username=username, layername=layername) + rv = client.get(rest_path) + assert 200 <= rv.status_code < 300 + resp_json = rv.get_json() + # print(resp_json) + for source in [ + 'wms', + 'wfs', + 'thumbnail', + 'file', + 'db_table', + 'metadata', + ]: + assert 'status' not in resp_json[source], f"{source}: {resp_json[source]}" + + style_url = urljoin(settings.LAYMAN_GS_REST_WORKSPACES, + username + '/styles/' + layername) + r = requests.get(style_url + '.sld', + auth=settings.LAYMAN_GS_AUTH + ) + r.raise_for_status() + sld_file = io.BytesIO(r.content) + tree = ET.parse(sld_file) + root = tree.getroot() + assert root.attrib['version'] == '1.0.0' + + feature_type = get_feature_type(username, 'postgresql', layername) + attributes = feature_type['attributes']['attribute'] + attr_names = ["id", "dpr_smer_k", "fid_zbg", "silnice", "silnice_bs", "typsil_p", "cislouseku", "jmeno", "typsil_k", "peazkom1", "peazkom2", "peazkom3", "peazkom4", "vym_tahy_k", "vym_tahy_p", "r_indsil7", "kruh_obj_k", "etah1", "etah2", "etah3", "etah4", "kruh_obj_p", "dpr_smer_p"] + for attr_name in attr_names: + assert next(( + a for a in attributes if a['name'] == attr_name + ), None) is not None + + with app.app_context(): + rest_path = url_for('rest_layer.delete_layer', username=username, layername=layername) + rv = client.delete(rest_path) + assert 200 <= rv.status_code < 300 + + uuid.check_redis_consistency(expected_publ_num_by_type={ + f'{LAYER_TYPE}': num_layers_before_test + 4 + }) + + @pytest.mark.usefixtures('app_context') def test_get_layers_testuser1_v2(client): username = 'testuser1'