0

I have created a Vue.js application that uses an OpenLayers map and I want to integrate a WMS layer that can dynamically change its style. My WMS layer displays the carbon emission of many entities of the world (countries, states, etc.) depending on the zoom level on the map. If you zoom out to the maximum only large federations will be displayed (Europe, China, Russia, etc.) and if you zoom in you will see the countries or regions of these federations (Spain, UK, states of USA).

To change the style after the corresponding zoom level I use the updateParams() function of the TileWMS class and I generate an xml style that I pass to the sld_body parameter of the query on my WMS layer. But when all the countries and regions of the federations are displayed the generated xml is very long and my request ends up with a URI too long error.

Here is the generated XML:

<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
    <Name>cite:v_province</Name>
    <UserStyle>
        <FeatureTypeStyle>
            <Rule>
                <Name>cite:v_province</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>9</ogc:Literal>
                            <ogc:Literal>46</ogc:Literal>
                            <ogc:Literal>106</ogc:Literal>
                            <ogc:Literal>70</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FFEDA0</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_province</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>52</ogc:Literal>
                            <ogc:Literal>36</ogc:Literal>
                            <ogc:Literal>41</ogc:Literal>
                            <ogc:Literal>50</ogc:Literal>
                            <ogc:Literal>74</ogc:Literal>
                            <ogc:Literal>84</ogc:Literal>
                            <ogc:Literal>78</ogc:Literal>
                            <ogc:Literal>95</ogc:Literal>
                            <ogc:Literal>49</ogc:Literal>
                            <ogc:Literal>31</ogc:Literal>
                            <ogc:Literal>83</ogc:Literal>
                            <ogc:Literal>34</ogc:Literal>
                            <ogc:Literal>102</ogc:Literal>
                            <ogc:Literal>86</ogc:Literal>
                            <ogc:Literal>18</ogc:Literal>
                            <ogc:Literal>15</ogc:Literal>
                            <ogc:Literal>16</ogc:Literal>
                            <ogc:Literal>1</ogc:Literal>
                            <ogc:Literal>65</ogc:Literal>
                            <ogc:Literal>104</ogc:Literal>
                            <ogc:Literal>57</ogc:Literal>
                            <ogc:Literal>3</ogc:Literal>
                            <ogc:Literal>25</ogc:Literal>
                            <ogc:Literal>60</ogc:Literal>
                            <ogc:Literal>53</ogc:Literal>
                            <ogc:Literal>87</ogc:Literal>
                            <ogc:Literal>54</ogc:Literal>
                            <ogc:Literal>23</ogc:Literal>
                            <ogc:Literal>47</ogc:Literal>
                            <ogc:Literal>98</ogc:Literal>
                            <ogc:Literal>33</ogc:Literal>
                            <ogc:Literal>48</ogc:Literal>
                            <ogc:Literal>6</ogc:Literal>
                            <ogc:Literal>14</ogc:Literal>
                            <ogc:Literal>43</ogc:Literal>
                            <ogc:Literal>73</ogc:Literal>
                            <ogc:Literal>96</ogc:Literal>
                            <ogc:Literal>109</ogc:Literal>
                            <ogc:Literal>90</ogc:Literal>
                            <ogc:Literal>93</ogc:Literal>
                            <ogc:Literal>100</ogc:Literal>
                            <ogc:Literal>24</ogc:Literal>
                            <ogc:Literal>58</ogc:Literal>
                            <ogc:Literal>63</ogc:Literal>
                            <ogc:Literal>11</ogc:Literal>
                            <ogc:Literal>64</ogc:Literal>
                            <ogc:Literal>37</ogc:Literal>
                            <ogc:Literal>105</ogc:Literal>
                            <ogc:Literal>26</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FD8D3C</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_province</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>101</ogc:Literal>
                            <ogc:Literal>110</ogc:Literal>
                            <ogc:Literal>77</ogc:Literal>
                            <ogc:Literal>80</ogc:Literal>
                            <ogc:Literal>331</ogc:Literal>
                            <ogc:Literal>108</ogc:Literal>
                            <ogc:Literal>85</ogc:Literal>
                            <ogc:Literal>103</ogc:Literal>
                            <ogc:Literal>94</ogc:Literal>
                            <ogc:Literal>72</ogc:Literal>
                            <ogc:Literal>39</ogc:Literal>
                            <ogc:Literal>19</ogc:Literal>
                            <ogc:Literal>61</ogc:Literal>
                            <ogc:Literal>89</ogc:Literal>
                            <ogc:Literal>91</ogc:Literal>
                            <ogc:Literal>10</ogc:Literal>
                            <ogc:Literal>92</ogc:Literal>
                            <ogc:Literal>71</ogc:Literal>
                            <ogc:Literal>97</ogc:Literal>
                            <ogc:Literal>5</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FC4E2A</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_province</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>35</ogc:Literal>
                            <ogc:Literal>7</ogc:Literal>
                            <ogc:Literal>45</ogc:Literal>
                            <ogc:Literal>21</ogc:Literal>
                            <ogc:Literal>55</ogc:Literal>
                            <ogc:Literal>69</ogc:Literal>
                            <ogc:Literal>28</ogc:Literal>
                            <ogc:Literal>22</ogc:Literal>
                            <ogc:Literal>38</ogc:Literal>
                            <ogc:Literal>82</ogc:Literal>
                            <ogc:Literal>13</ogc:Literal>
                            <ogc:Literal>76</ogc:Literal>
                            <ogc:Literal>2</ogc:Literal>
                            <ogc:Literal>29</ogc:Literal>
                            <ogc:Literal>4</ogc:Literal>
                            <ogc:Literal>68</ogc:Literal>
                            <ogc:Literal>59</ogc:Literal>
                            <ogc:Literal>99</ogc:Literal>
                            <ogc:Literal>75</ogc:Literal>
                            <ogc:Literal>51</ogc:Literal>
                            <ogc:Literal>17</ogc:Literal>
                            <ogc:Literal>27</ogc:Literal>
                            <ogc:Literal>32</ogc:Literal>
                            <ogc:Literal>81</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FEB24C</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_province</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>42</ogc:Literal>
                            <ogc:Literal>12</ogc:Literal>
                            <ogc:Literal>20</ogc:Literal>
                            <ogc:Literal>40</ogc:Literal>
                            <ogc:Literal>88</ogc:Literal>
                            <ogc:Literal>56</ogc:Literal>
                            <ogc:Literal>67</ogc:Literal>
                            <ogc:Literal>30</ogc:Literal>
                            <ogc:Literal>8</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FED976</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_province</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>66</ogc:Literal>
                            <ogc:Literal>79</ogc:Literal>
                            <ogc:Literal>44</ogc:Literal>
                            <ogc:Literal>62</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#E31A1C</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
        </FeatureTypeStyle>
    </UserStyle>
</NamedLayer>
<NamedLayer>
    <Name>cite:v_static</Name>
    <UserStyle>
        <FeatureTypeStyle>
            <Rule>
                <Name>cite:v_static</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>9</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#E31A1C</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_static</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>1</ogc:Literal>
                            <ogc:Literal>5</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FD8D3C</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
            <Rule>
                <Name>cite:v_static</Name>
                <ogc:Filter>
                    <ogc:PropertyIsEqualTo>
                        <ogc:Function name="in">
                            <ogc:PropertyName>id</ogc:PropertyName>
                            <ogc:Literal>4</ogc:Literal>
                            <ogc:Literal>6</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
                    </ogc:PropertyIsEqualTo>
                </ogc:Filter>
                <PolygonSymbolizer>
                    <Fill>
                        <CssParameter name="fill">#FC4E2A</CssParameter>
                    </Fill>
                </PolygonSymbolizer>
            </Rule>
        </FeatureTypeStyle>
    </UserStyle>
</NamedLayer>

How can I change my request so that passing a long XML is not a problem?

2
  • make a POST request instead of a GET
    – Ian Turton
    Commented Jan 19, 2023 at 13:44
  • 1
    How do you do it ?
    – Max
    Commented Jan 20, 2023 at 10:15

1 Answer 1

2

Write the style to a web location accessible by the WMS server and use the SLD parameter instead of the SLD_BODY parameter to provide a URL to the SLD.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.