<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Postgis - Tag - Simon Jakubowski</title><link>https://sijakubo.github.io/info/tags/postgis/</link><description>Postgis - Tag - Simon Jakubowski</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>sijakubo@gmail.com ( Simon Jakubowski)</managingEditor><webMaster>sijakubo@gmail.com ( Simon Jakubowski)</webMaster><lastBuildDate>Thu, 27 Apr 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://sijakubo.github.io/info/tags/postgis/" rel="self" type="application/rss+xml"/><item><title>Create a Feature Collection from Postgis Geometries using Postgis &gt;= 3.0.0</title><link>https://sijakubo.github.io/info/posts/post-8/</link><pubDate>Thu, 27 Apr 2023 00:00:00 +0000</pubDate><author>sijakubo@gmail.com ( Simon Jakubowski)</author><guid>https://sijakubo.github.io/info/posts/post-8/</guid><description><![CDATA[<p>Generating a Feature and Feature Collection form postgis is rather simple. If you convert a simple <a href="https://postgis.net/docs/geometry.html">GEOMETRY</a> with the <a href="https://postgis.net/docs/ST_AsGeoJSON.html"><code>st_asgeojson</code></a> postgis will generate a GeoJSON &ldquo;geometry&rdquo;.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">SELECT</span><span class="w"> </span><span class="n">st_asgeojson</span><span class="p">(</span><span class="n">f</span><span class="p">.</span><span class="n">geometry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">FROM</span><span class="w"> </span><span class="n">field</span><span class="w"> </span><span class="n">f</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div><p>will result in a single geometry:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;type&#34;</span> <span class="p">:</span> <span class="s2">&#34;Polygon&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;coordinates&#34;</span> <span class="p">:</span> <span class="p">[</span><span class="err">...</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>If you provide a <strong>RECORD</strong> (since Postgis 3.0.0), postgis will generate a Feature with all the fields as Properties:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">SELECT</span><span class="w"> </span><span class="n">st_asgeojson</span><span class="p">(</span><span class="n">f</span><span class="p">.</span><span class="o">*</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">FROM</span><span class="w"> </span><span class="n">field</span><span class="w"> </span><span class="n">f</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div><p>will result in:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;type&#34;</span> <span class="p">:</span> <span class="s2">&#34;Feature&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;geometry&#34;</span> <span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;type&#34;</span> <span class="p">:</span> <span class="s2">&#34;Polygon&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;coordinates&#34;</span> <span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="err">...</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;properties&#34;</span> <span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;id&#34;</span> <span class="p">:</span> <span class="s2">&#34;052ff36a-4ea7-4307-9bc3-414f49a62163&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;area_square_meters&#34;</span> <span class="p">:</span> <span class="mi">29434</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;altitude&#34;</span> <span class="p">:</span> <span class="mi">40</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;granule_code&#34;</span> <span class="p">:</span> <span class="s2">&#34;31UGT&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;creation_date&#34;</span> <span class="p">:</span> <span class="s2">&#34;2021-10-21T23:32:25.974059&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;name&#34;</span> <span class="p">:</span> <span class="s2">&#34;Simple test field&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="err">...</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Where the field table having the Columns: <code>id</code>, <code>area_square_meters</code>, &hellip;</p>]]></description></item><item><title>Testcontainers | Postgres: Postgis with Spring and Spock</title><link>https://sijakubo.github.io/info/posts/post-5/</link><pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate><author>sijakubo@gmail.com ( Simon Jakubowski)</author><guid>https://sijakubo.github.io/info/posts/post-5/</guid><description><![CDATA[<p>A great way to include all the required resources for integration tests, <a href="https://www.testcontainers.org/">Testcontainers</a> provides an easy way to start docker containers from within your testcode. This removes the necessity to create test <code>docker-compose.yml</code> files and write <code>README.md</code> code on how to even run a test.</p>
<p>Here is a short example using testcontainers with Spring and Spock on a Postgis / Postgres database.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-groovy" data-lang="groovy"><span class="line"><span class="cl"><span class="nd">@SpringBootTest</span>
</span></span><span class="line"><span class="cl"><span class="nd">@AutoConfigureMockMvc</span>
</span></span><span class="line"><span class="cl"><span class="nd">@AutoConfigureTestDatabase</span><span class="o">(</span><span class="n">replace</span> <span class="o">=</span> <span class="n">AutoConfigureTestDatabase</span><span class="o">.</span><span class="na">Replace</span><span class="o">.</span><span class="na">NONE</span><span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nd">@ContextConfiguration</span><span class="o">(</span><span class="n">initializers</span> <span class="o">=</span> <span class="o">[</span><span class="n">Initializer</span><span class="o">.</span><span class="na">class</span><span class="o">])</span>
</span></span><span class="line"><span class="cl"><span class="kd">class</span> <span class="nc">FieldControllerTest</span> <span class="kd">extends</span> <span class="n">IntegrationTest</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nd">@Shared</span>
</span></span><span class="line"><span class="cl">  <span class="kd">public</span> <span class="kd">static</span> <span class="n">JdbcDatabaseContainer</span> <span class="n">postgreSQLContainer</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PostgisContainerProvider</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">newInstance</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">withDatabaseName</span><span class="o">(</span><span class="s2">&#34;integration-tests-db&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">withUsername</span><span class="o">(</span><span class="s2">&#34;sa&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">withPassword</span><span class="o">(</span><span class="s2">&#34;sa&#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kd">static</span> <span class="kd">class</span> <span class="nc">Initializer</span> <span class="kd">implements</span> <span class="n">ApplicationContextInitializer</span><span class="o">&lt;</span><span class="n">ConfigurableApplicationContext</span><span class="o">&gt;</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">void</span> <span class="nf">initialize</span><span class="o">(</span><span class="n">ConfigurableApplicationContext</span> <span class="n">configurableApplicationContext</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">start</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">      <span class="n">TestPropertyValues</span><span class="o">.</span><span class="na">of</span><span class="o">(</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;spring.datasource.url=&#34;</span> <span class="o">+</span> <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">getJdbcUrl</span><span class="o">(),</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;spring.datasource.username=&#34;</span> <span class="o">+</span> <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">getUsername</span><span class="o">(),</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;spring.datasource.password=&#34;</span> <span class="o">+</span> <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">getPassword</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">      <span class="o">).</span><span class="na">applyTo</span><span class="o">(</span><span class="n">configurableApplicationContext</span><span class="o">.</span><span class="na">getEnvironment</span><span class="o">());</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nd">@Autowired</span>
</span></span><span class="line"><span class="cl">  <span class="n">MockMvc</span> <span class="n">mockMvc</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nd">@Autowired</span>
</span></span><span class="line"><span class="cl">  <span class="n">FieldRepository</span> <span class="n">fieldRepository</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kt">void</span> <span class="nf">setup</span><span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">fieldRepository</span><span class="o">.</span><span class="na">save</span><span class="o">(</span><span class="k">new</span> <span class="n">Field</span><span class="o">(</span>
</span></span><span class="line"><span class="cl">      <span class="n">UUID</span><span class="o">.</span><span class="na">fromString</span><span class="o">(</span><span class="s1">&#39;ad68f894-c16b-4953-b577-7cddb3e85ae5&#39;</span><span class="o">),</span> <span class="s2">&#34;initSampleField&#34;</span><span class="o">,</span>
</span></span><span class="line"><span class="cl">      <span class="k">new</span> <span class="nf">Polygon</span><span class="o">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">PositionSequenceBuilders</span><span class="o">.</span><span class="na">variableSized</span><span class="o">(</span><span class="n">G2D</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.8208837124389</span><span class="o">,</span> <span class="mf">51.0596004663904</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.83490292265498</span><span class="o">,</span> <span class="mf">51.0571257015788</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.87078646658134</span><span class="o">,</span> <span class="mf">51.0451607414904</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.79146302423308</span><span class="o">,</span> <span class="mf">51.0612386272784</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.8208837124389</span><span class="o">,</span> <span class="mf">51.0596004663904</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">toPositionSequence</span><span class="o">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">CoordinateReferenceSystems</span><span class="o">.</span><span class="na">WGS84</span>
</span></span><span class="line"><span class="cl">      <span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">))</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="o">...</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div><p>To integrate testcontainers into your project, you&rsquo;ll need the following dependencies:</p>]]></description></item></channel></rss>