﻿{"id":3362,"date":"2016-06-21T12:36:10","date_gmt":"2016-06-21T11:36:10","guid":{"rendered":"http:\/\/www.sigterritoires.fr\/?p=3362"},"modified":"2016-06-21T13:36:38","modified_gmt":"2016-06-21T12:36:38","slug":"developper-une-application-avec-pgrouting-sous-windows-7openlayers-3","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-7openlayers-3\/","title":{"rendered":"D\u00e9velopper une application avec pgrouting sous Windows (7):OpenLayers 3"},"content":{"rendered":"<p>Nous arrivons \u00e0 la fin de cette s\u00e9rie. Apr\u00e8s avoir mis en place la base de donn\u00e9es Postgres\/Postgis, nous avons configur\u00e9 <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/debuter-avec-geoserver\/\">Geoserver<\/a> pour servir les r\u00e9sultats de <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/developper-une-application-avec-pgrouting-sous-windows-1\/\">pgrouting<\/a> en un lux WMS. Il ne reste plus qu&rsquo;\u00e0\u00a0 cr\u00e9er une page html avec openlayers pour pouvoir entrer les points de d\u00e9part et d&rsquo;arriv\u00e9e et de visualiser l&rsquo;itin\u00e9raire calcul\u00e9.<!--more--><\/p>\n<p>Bien s\u00fbr, il y a moyen de r\u00e9aliser une application complexe. Mais ici nous resterons sur quelque chose d&rsquo;assez modeste. Nous allons afficher un fond de carte OpenStreetMap, et permettre \u00e0 l&rsquo;utilisateur de cliquer sur cette carte pour d\u00e9terminer le point de d\u00e9part de l&rsquo;itin\u00e9raire. Quand il cliquera sur un deuxi\u00e8me point de la carte, nous consid\u00e9rerons que c&rsquo;est le point d&rsquo;arriv\u00e9e souhait\u00e9. La page enverra alors la requ\u00eate au flux WMS de Geoserver pour r\u00e9cup\u00e9rer une entit\u00e9 vecteur repr\u00e9sentant l&rsquo;itin\u00e9raire calcul\u00e9 par pgrouting\u00a0 et nous l&rsquo;afficherons sur la carte.<\/p>\n<p>Pour compl\u00e9ter la page nous mettrons un bouton pour r\u00e9initialiser la carte, une ligne de message pour tenir au curant l&rsquo;utilisateur de l&rsquo;action en cours, et une image pour indiquer l&rsquo;\u00e9tat du transfert entre le serveur et l&rsquo;application.<\/p>\n<div class='stb-container stb-style-grey stb-caption-box stb-collapsed'><div class='stb-caption'><div class='stb-logo'><img class='stb-logo__image' src='data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN\/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz\/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH\/w\/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA\/g88wAAKCRFRHgg\/P9eM4Ors7ONo62Dl8t6r8G\/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt\/qIl7gRoXgugdfeLZrIPQLUAoOnaV\/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl\/AV\/1s+X48\/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H\/LcL\/\/wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93\/+8\/\/UegJQCAZkmScQAAXkQkLlTKsz\/HCAAARKCBKrBBG\/TBGCzABhzBBdzBC\/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD\/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q\/pH5Z\/YkGWcNMw09DpFGgsV\/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY\/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4\/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L\/1U\/W36p\/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N\/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26\/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE\/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV\/MN8C3yLfLT8Nvnl+F30N\/I\/9k\/3r\/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt\/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi\/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a\/zYnKOZarnivN7cyzytuQN5zvn\/\/tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO\/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3\/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA\/0HIw6217nU1R3SPVRSj9Yr60cOxx++\/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3\/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX\/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8\/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb\/1tWeOT3dvfN6b\/fF9\/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR\/cGhYPP\/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF\/6i\/suuFxYvfvjV69fO0ZjRoZfyl5O\/bXyl\/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o\/2j5sfVT0Kf7kxmTk\/8EA5jz\/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5\/wAAgOkAAHUwAADqYAAAOpgAABdvkl\/FRgAAD41JREFUeNrsmnl0lOW9xz\/v7PtkliyTsGUhCQQCYYeyirSCQLXttcqil0Vse9uqrUvrbattbW0PiqJXa61el1YxgAQwyL6VsoNECCQhCZDNTJaZzL69M\/PeP3y5h+PBXhW8vbfH55znvGeemXne+fyW7+95f2cESZL4ZxgK\/knGlyBfgnxBQ\/UF7VsEdKTT6SJBEHoFQUjI657\/DyDmi5dafgRS385de++fNuUrm8+erZ8\/Zsyov3m9Xkem09ngcDr2BALBgqws52pAB8Su182F6yC\/pprTp3\/f3Ng0aP++A3MGDMyXIuGokF9YQDwWIycvL+X3BZTZ2Zm9CiktWSzmjvyCgVU+X6B\/YeHAe2RjJv6hIKFQeO65s+e+s\/LJlTfPmT2PaDxBVnYOfr+PPl+QRCJGPJ5Ar9OTYbOT5XCQm+tKxuMxlV6vae7fz7XZHwhYSkuLl\/8jQUZ977v3rJ8yeXp+SckQjEYT1du2sXXbNto6LhGPiYhikqQoggAqpRKLyUL5iArKR4ykfPhwFKkkOoO2tbAwf6NGo2nOzXM9+78K0tPTM2rXju3vlpUNy7U7MjFbLPz0kX9n647tpFJpJCkNgoSYEEmnkhj0OhSCmmAkQiwWJRGLkV9QyDe\/8S8MGzoEn7eP6TdMXV9UVPB7hULZrlQq3F84SDqdymptaVv\/7DNPTvnxgz9Do9bw\/Xvv5YPaWswmLXa7NTG4sKDLbLH0JGIJw\/nGhkKrxay227MIRyJEY3Eam5tparqI3+tl+owZLF6wmNxcl7\/X06uaN2\/OIovFvPELV63TZ84sX1+5dsqDD\/+CdEri17\/5LfVNzZgtZkaWFX\/44osvrlAqVUdEUSxubWl9UqczDjYZTUiSRDQWw9PrpbHpPLv37Gb3vv3s3bcfr7eP5ctWWAf2zwt4vd4pkUjYmpOT8wbwqa2sfOyxxz41RDyeKO5o63whO9tptmU4OHzkCG9WVuJwOhEEBV6fT9u\/X257hjXDf+TI0WddOf3GGY1mRTKZxBsI0enuJRSJoNeZGD6sjLy8bDo6P+TMB7U0NNYxduxYbWND48SsbKc3MzNz0xdW2S9cbLn\/pZf\/4BJQYndksmffLvRGAyqVCo1Gg88f1CxYtOCnt337G\/vycvNG6fUGkkkRUUzT0tZJd4+HhJgkGk8SCMYpKx3Bwtu\/TX5RPs2NTfzljdfIsNno6faMOHz46F+ArOseWqlUqvBcXf0tixbcSU52Nm3trTRdbMFkMiKlIZWCpJgi4AvisDsU2c4skmIcjVbP7j3bePrZ58jOyycz00lZ8WAqKsaQFkUmjJvK8ePHiEYi7Nm3h4qKUeTlDRhdVlZqBITr7pG2jo6bPjj9Qc7ad9agUqvx+XzEE3EEQYkkSUhpiMViJOJxcrJyUalVKFQCCgW8+ZfXudDSiccT4N3N1Ty16nf4A30YrCY0OgPjxkzEYjWhN1jYsXMbDruNaDSeffTo8WcB0\/X0iMrfF5jUPzePebNnk5mZRafbjUIAQSFASgLSRGMRADq73CTTKVRKJQqFwMD8fC51RQiFgqSTUTrcLdSe+YDCgiIS8RhFg0tw2DIRRRXnztXR6+lFTCZtFqsxA0heT484W1taJ7jdnaxc+ThebzdanfojCCn9kSxLEkkxDgg0NJynt7sLpaAmEU9y95Kl5Pd30flhK73uFjRaDWNHlWOz6LCa9dhtGahVSsxmI6m0RG3tafr160c8lhze0f7hPdcTJJnhsHk6uzpYtmwFWdnZ6LQaVIKSdDqFSq1AEATUKj2g5NKlVjZVV6NQgiSkGFxcxDNP\/oof\/XAp96y4m41VVUz6ykQQUlgsZjyeXmJiEqvVisFo5Oy5WkDByZPHXIJCSFy30EqlUoOamy4O7td\/EFUbNxKJhJg8ZTpWix53dwAJAa1Wj9Vmo8vdSUJMsHbd24wcWcHkyZMQRZGsrGwe\/PEDKBQK4vE4wUAQjVqHUqXkfOPZVCAQUmbYtOj1JoLBEJIEw4aNTIVD4RGAEkhds0eUSuXZcWPH\/K21tQWEFOPGTUSlUrPgjjv8v3z0kRdvmDrxeP3ZU9hsNrJy8jCYbPT2eHj66VX87cAhdFoDWq2BcFQkFImTTEoYDBY0ai3Hjx+JLF++\/Adr33rjtwohHQsFAygEBVarhTO1NcqOjjbtpymMVy2IS5cuZdOmTbjdblwuFxaLxVJz+uwDrS0tmf0HFrC28k1cLhdTpswQzWbjz5PJ5DMKIT2zob7RlZXtQhCU6HQGxJRIY3MrcVHC6bSj0elQqjQk4klaLl1kzbq32L17Z9+ihYv\/LSsrq9rn7Z3x3pZ3C4oGD+bmOXMxGSwMKsg\/63DYN\/5PMFcNrVdfffW\/r3a7nSVLlvjv\/eG9j4uJG\/\/wu5WPW8qHDqV8+Ggi4ZjZ6\/U99Oqrr952yy3z92zfsXNUliuXDJsZ0GBz2EhKCt7btosT79dgt1mJRHx0d3bQ0tKMu8vDwoUL2gA\/4NAbtAJAefkI1BoN+\/66Xcqw3xopLi6UrjnZvV6v4qmnnko1NjdLoXDYnD9gACNGjeeRnz9Ebe0pXK7cr82adeN9wWC4efLkie0N9TVYrVa0GgXRSIRkWkJr0BEKh9m\/fx9r1qxhc3U1Le1dFBSWMHPGjJcWLFggtrW1ZdTU1BQLCpg2dRqRSJRRoyYIQ4YMOQmkrxVEAagB038891yzIImrFyxcFnr5T88TDoYoKhpCJBwR5tx888MnTpwY1uXu3VReVho4feoYCgH0GjXBPg+tF5poOl9Pb68Hvc5CYWEZZUMrWLHsrrdWrXrqtcrKSpqaGsfs2LE1d\/r06YwePY6mpjpOnDjYrdVq669Vfi9DGICcqqoNqdoztWjVamNpSSmjxkzkwYfu5ZX\/fIlMZ47x0Ucfvdtut48Mh2J1Y0ePjNTVngJBIiMjA6vVit1up7CwkGHDhzMov4D+\/ftJSqXicFXVxuTiRYuNZ07X3BMORxQ\/e+Qx2lsv0d7ayl13LX3fZDLtvxYQQc4fA5AJ5ANjqrdUZ2zduunct761KHb69Cnq6mqZMnkmx44dJRqLaFavfuYr48ePHxgOR\/uGDy9NxWIhVGolao0arVaLRqNBrVYjSWm6unuEAwePrFi+fNmSwYMLHliz5s3pLzz\/MsXFJQgKgeam+qDT6Xj+mh6sBEFQyhBOGWI4MBQYNHr06PynnnyucNfu9wSVSiOEYzGOHNzLE088ydAhQ5FIc\/z4cfHd6o3K+vPNCrXWhFqtQ6VUkpY+slA6nUZMpgj6+zDopHROVqZi8Z1LmDZ1Jlu2VPHWmrd55unVb+bmuX4it5CinxdEA2QAA2SI8cAwoJ\/D4cwoKxuqmzBhkmL02Anq1c8+QUX5GObe\/HWqt2zk\/vvvp7CwCL\/Px\/unTnHw8EHON17C7\/cTi4lIpFGpFBh0BnJzMpkwYSJfnXUTKpWCw0cOY9QbOHTkIIvvXHpBCTqjyXhOpVa8otfr1\/+9c9cngehlb5QAY4FJQKkcZlpAePjhR1RlQ4fRfKFeyB9UpHi78s8gwMqVq9hctYGly+4mx+UCSSIhinR3d9Pr8YCURq\/Xk5Odg0ajRW\/Qs3\/vXwkEg2g0Wpqampnz9VtJJuL0eXqw2Wz4fQFyc7NX5+blPPRJrSPV38kRJaABjPLUXfH55B\/\/+ELM6XRITzyx0pKIx0GAufO+wWuvv8HBA3u4Y+EiHnzgPubPv4Wc3DxUKgWlJcX4fD60Gi0XLjZjMBh55eU\/MXvOPGprz9LS2szkyTORxASP\/vwntHcHGTBgILOmTyEQCN5rNptOmi2mP38WEEnWblHuBsZlS4jyesTn8\/nj8Xhq184dYiQa0d1513fMubku1le+yew589my9T2qNlUxdfoNvPDi84yqGMOAgQPYsX0by5av4DdPPM4PvvdDztU30NPrp7GxnnDEz7y5t9LefomLbV0MGFhES0szle908v17vktHh3txqaWo8mpe+STVSskAfUAn8CHQLVfgMBACuqLRaP0fX3rx2M6dO9q8np5I1Ttr49+6bQE3zZ7L\/r17WLrsu7S3t3O+oR5Xbj\/+\/MbrWK0OqjZsYHDhMN6urGJ4xUTKyysoKhyM05mFRqPBZDQzftw4vN4uxESchrozSKkU4XCkNJ1OOz9LjlyWXgdQAFQA5UAhYJdDzy8DBgCzIJBjMpmzf\/mrX7sOHTyouvHGWerSoWW8V72JcRMmEQr4aGg4z5AhQ+jp8TBowMDGi23tme7uroza0x+QYbFis5mZecNsCgryCQT9vLulmvqGOirKK5g7Zz42u2VvcUnhTVfzyCeBXFkML0vwEDnhB8mAannDgOwlCTCo1epsURT7z50339rW1qooKS4RSkqHcOr9k9K0adOFAwf2x\/r1G9BqNOrfKy4tvWPL1h3ZN06bQXNzI8FgiJk3zGLM2JGo1RqcTqfcvJCoqzuHz+ePzPrqjFt1Ou2OT5sjaVnqokCvHGohoEf2Qj7gAqwylEPOI1EUxSQgVr+7OQmoas+cEVKplABIe\/fukcLhMIDC4XCMvvOuJYq5X5vDiZOH8AdCGIxmotEQsWgIf1CBLTObFCkaG+s4deoUI0aMqNPptBc\/6xElLVs8LANcAE4Ce4Ed8vV94JIMefkU4JD3FQExlUqJslHS4XA4LRtvUCgUGltUmG91u1tpbr7E6Iqx5Lhy6PZ4qGtoI9M1kD5fmAMHDrF7zy5UKjXFJUUHN2x4p\/Gz5MjHYZXyD9AAesAsF8xsefaXPXTZO0a5+6GVp0reQ7isiEajUX377bdb9AaDsrioFHOGkcOHDmPQm5l38zzCsQDZmS6OHz+Gw5GJ290ZjEZD3\/nFo794SxTFz\/Wom5ZvnpItG5e95JHDTC9DWWQhyLgCVCuvq+SckmQ1TITD4axXXnllwn333ZdfPrKMynXr6OkL8M0pM9i4uZJeTy\/\/etcyTtW8z6KFd7KhqvL0unXrW+S9kp+3HSRdMa8Eisoe65Etrr5iauT3tJefRuXvxuVrARDzeDymdWvXOg1anbDg27fR7e6gpqaG225bxNGjx5g0cSrPrF4V3bRpY6fsUeHzhtYnVX6u2Fj42NrfM8TlG2YAo4GvARNXrVo1PJVMalrb2jSTJk0Rurs7EUWJ7du2uHfu2nkI2AjsAtzSVX705wX5JLArX0tXgfl47hlkOS\/Nzc0d0eV2Z40dNz6voCA\/c\/v27b12uz3a2Nh4GtgHnAO8H7XQJL4okGsZSvkclyELhEnOsdgV8t9zZRH8vwpytZIgXCUU+cwgX\/7z4UuQL0H++UD+awDc\/MMFLMO8WgAAAABJRU5ErkJggg==' alt='img'\/><\/div><div class='stb-caption-content'>Texte de la page html<\/div><div class='stb-tool'><\/div><\/div><div class='stb-content'><\/p>\n<p>&lt;!DOCTYPE html&gt;<br \/>\n&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;title&gt;Recherche d&rsquo;itin\u00e9raire avec pgRouting &lt;\/title&gt;<br \/>\n&lt;meta charset=\u00a0\u00bbutf-8&Prime;&gt;<br \/>\n&lt;style&gt;<br \/>\n#map {<br \/>\nwidth: 100%;<br \/>\nheight: 800px;}<br \/>\n&lt;\/style&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;div id=\u00a0\u00bbmap\u00a0\u00bb&gt;&lt;\/div&gt;<br \/>\n&lt;div id=\u00a0\u00bbdesc\u00a0\u00bb&gt;Cliquez sur la carte pour d\u00e9finir le point de d\u00e9part &#8211; cliquez \u00e0 nouveau pour d\u00e9finir le point d&rsquo;arriv\u00e9e &#8211; la route sera trac\u00e9e&lt;\/div&gt;&lt;div align=\u00a0\u00bbcenter\u00a0\u00bb&gt;&lt;img src=\u00a0\u00bb0.png\u00a0\u00bb id=\u00a0\u00bbimage\u00a0\u00bb width=\u00a0\u00bb60&Prime; height=\u00a0\u00bb60&Prime;&gt;&lt;\/div&gt;<br \/>\n&lt;button id=\u00a0\u00bbclear\u00a0\u00bb&gt;Effacer&lt;\/button&gt;<br \/>\n&lt;script src=\u00a0\u00bbhttp:\/\/openlayers.org\/en\/v3.16.0\/build\/ol.js\u00a0\u00bb&gt;&lt;\/script&gt;<br \/>\n&lt;script type=\u00a0\u00bbtext\/javascript\u00a0\u00bb&gt;<br \/>\nvar map = new ol.Map({<br \/>\ntarget: &lsquo;map&rsquo;,<br \/>\nlayers: [<br \/>\nnew ol.layer.Tile({<br \/>\nsource: new ol.source.OSM()<br \/>\n})<br \/>\n],<br \/>\nview: new ol.View({<br \/>\ncenter: [-500000, 6172000],<br \/>\nzoom: 12<br \/>\n}),<br \/>\ncontrols: ol.control.defaults({<br \/>\nattributionOptions: {<br \/>\ncollapsible: false<br \/>\n}<br \/>\n})<br \/>\n});<\/p>\n<p>\/\/ Les points de d\u00e9part et d&rsquo;arriv\u00e9e.<br \/>\nvar startPoint = new ol.Feature();<br \/>\nvar destPoint = new ol.Feature();<\/p>\n<p>\/\/ La couche vecteur utilis\u00e9e pour afficher les points de d\u00e9part et d&rsquo;arriv\u00e9e.<br \/>\nvar vectorLayer = new ol.layer.Vector({<br \/>\nsource: new ol.source.Vector({<br \/>\nfeatures: [startPoint, destPoint]})<br \/>\n});<\/p>\n<p>map.addLayer(vectorLayer);<br \/>\nvar params = {<br \/>\nLAYERS: &lsquo;pgrouting:itineraire&rsquo;,<br \/>\nFORMAT: &lsquo;image\/png&rsquo;<br \/>\n};<br \/>\n\/\/ La fonction de transformation des coordonn\u00e9es \u00e0 partir de l&rsquo;EPSG:3857<br \/>\n\/\/ vers\u00a0 <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/epsg-4326-vs-3857\/\">EPSG:4326<\/a>.<br \/>\nvar transform = ol.proj.getTransform(&lsquo;EPSG:3857&rsquo;, &lsquo;EPSG:4326&rsquo;);<\/p>\n<p>\/\/ Mise en place d&rsquo;une \u00e9coute sur les \u00e9venements de la carte.<br \/>\nmap.on(&lsquo;click&rsquo;, function(event) {<br \/>\nif (startPoint.getGeometry() == null) {<br \/>\n\/\/ Premier click.<br \/>\nstartPoint.setGeometry(new ol.geom.Point(event.coordinate));<br \/>\n} else if (destPoint.getGeometry() == null) {<br \/>\n\/\/ Deuxi\u00e8me click.<br \/>\ndestPoint.setGeometry(new ol.geom.Point(event.coordinate));<br \/>\n\/\/ Transformations des coordonn\u00e9es \u00e0 partir de celle de la carte (EPSG:3857)<br \/>\n\/\/ vers celle du serveur (EPSG:4326).<br \/>\nvar startCoord = transform(startPoint.getGeometry().getCoordinates());<br \/>\nvar destCoord = transform(destPoint.getGeometry().getCoordinates());<br \/>\nvar viewparams = [<br \/>\n&lsquo;x1:&rsquo; + startCoord[0], &lsquo;y1:&rsquo; + startCoord[1],<br \/>\n&lsquo;x2:&rsquo; + destCoord[0], &lsquo;y2:&rsquo; + destCoord[1]<br \/>\n];<br \/>\nparams.viewparams = viewparams.join(&lsquo;;&rsquo;);<br \/>\nvar source =new ol.source.ImageWMS({<br \/>\nurl: &lsquo;http:\/\/localhost:8080\/geoserver\/pgrouting\/wms&rsquo;,<br \/>\nparams: params<br \/>\n})<br \/>\nresult = new ol.layer.Image({<br \/>\nsource: source<br \/>\n});<br \/>\nsource.on(&lsquo;imageloadstart&rsquo;, function() {<br \/>\ndocument.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bbchargement&#8230;\u00a0\u00bb;<br \/>\ndocument.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bbtree_loading.gif\u00a0\u00bb;<br \/>\n});<br \/>\nsource.on(&lsquo;imageloadend&rsquo;, function() {<br \/>\ndocument.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bbtermin\u00e9 OK!\u00a0\u00bb;<br \/>\ndocument.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bbOK.jpg\u00a0\u00bb;<br \/>\n});<br \/>\nsource.on(&lsquo;imageloaderror&rsquo;, function() {<br \/>\ndocument.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bberreur!\u00a0\u00bb;<br \/>\ndocument.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bbno.png\u00a0\u00bb;<br \/>\n});<br \/>\nmap.addLayer(result);<br \/>\n}<br \/>\n});<\/p>\n<p>var clearButton = document.getElementById(&lsquo;clear&rsquo;);<br \/>\nclearButton.addEventListener(&lsquo;click&rsquo;, function(event) {<br \/>\n\/\/ R\u00e9initialise les entit\u00e9s\u00a0 \u00ab\u00a0start\u00a0\u00bb et \u00ab\u00a0destination\u00a0\u00bb .<br \/>\nstartPoint.setGeometry(null);<br \/>\ndestPoint.setGeometry(null);<br \/>\ndocument.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bbCliquez sur la carte pour d\u00e9finir le point de d\u00e9part &#8211; cliquez \u00e0 nouveau pour d\u00e9finir le point d&rsquo;arriv\u00e9e &#8211; la route sera trac\u00e9e\u00a0\u00bb;<br \/>\ndocument.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bb0.png\u00a0\u00bb;<br \/>\n\/\/ Remove the result layer.<br \/>\nmap.removeLayer(result);<br \/>\n});<br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<\/div><\/div>\n<p>&nbsp;<\/p>\n<p>Voyons maintenant en d\u00e9tail les diff\u00e9rentes parties du code.<\/p>\n<p>Pour ce qui est du d\u00e9but, que du classique:<\/p>\n<p><em>&lt;style&gt;<\/em><br \/>\n<em> #map {<\/em><br \/>\n<em> width: 100%;<\/em><br \/>\n<em> height: 800px;}<\/em><\/p>\n<p>Nous d\u00e9finissons la taille de la carte sur notre page: elle occupera toute la largeur de la page et aura 800 pixels en hauteur.<\/p>\n<p><em>&lt;div id=\u00a0\u00bbmap\u00a0\u00bb&gt;&lt;\/div&gt;<\/em><br \/>\n<em> &lt;div id=\u00a0\u00bbdesc\u00a0\u00bb&gt;Cliquez sur la carte pour d\u00e9finir le point de d\u00e9part &#8211; cliquez \u00e0 nouveau pour d\u00e9finir le point d&rsquo;arriv\u00e9e &#8211; la route sera trac\u00e9e&lt;\/div&gt;<\/em><br \/>\n<em> &lt;div align=\u00a0\u00bbcenter\u00a0\u00bb&gt;&lt;img src=\u00a0\u00bb0.png\u00a0\u00bb id=\u00a0\u00bbimage\u00a0\u00bb width=\u00a0\u00bb60&Prime; height=\u00a0\u00bb60&Prime;&gt;&lt;\/div&gt;<\/em><br \/>\n<em> &lt;button id=\u00a0\u00bbclear\u00a0\u00bb&gt;Effacer&lt;\/button&gt;<\/em><\/p>\n<p>Nous pla\u00e7ons donc le div de la carte, en dessous une ligne de texte qui nous servira comme zone de messages, puis une image pour indiquer l&rsquo;\u00e9tat de transfert et tout en dessous un bouton <strong>Effacer<\/strong> qui permettra de r\u00e9initialiser la page. L&rsquo;image 0.png est une image vide.<\/p>\n<p>Nous retrouvons la r\u00e9f\u00e9rence \u00e0 la biblioth\u00e8que openlayers utilis\u00e9e:<\/p>\n<p><em>&lt;script src=\u00a0\u00bbhttp:\/\/openlayers.org\/en\/v3.16.0\/build\/ol.js\u00a0\u00bb&gt;&lt;\/script&gt;<\/em><\/p>\n<p>et ensuite la cr\u00e9ation de notre carte :<\/p>\n<p><em>\u00a0var map = new ol.Map({<\/em><br \/>\n<em>\u00a0\u00a0\u00a0 target: &lsquo;map&rsquo;,<\/em><br \/>\n<em>\u00a0\u00a0\u00a0 layers: [\u00a0\u00a0 new ol.layer.Tile({<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 source: new ol.source.OSM() }) ],<\/em><br \/>\n<em>\u00a0\u00a0\u00a0 view: new ol.View({<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0 center: [-500000, 6172000],<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0 zoom: 12 }),<\/em><br \/>\n<em>\u00a0\u00a0\u00a0 controls: ol.control.defaults({<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0 attributionOptions: {<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 collapsible: false\u00a0 }\u00a0 }) });<\/em><\/p>\n<p>Nous chargeons dans notre carte la couche OpenStreetMaps, nous centrons l&rsquo;affichage sur les coordonn\u00e9es EPSG:3857 du centre de notre zone d&rsquo;int\u00e9r\u00eat, nous d\u00e9finissons l&rsquo;\u00e9tendue affich\u00e9e au d\u00e9part avec le facteur de zoom (12) et finalement les contr\u00f4les souhait\u00e9s.<\/p>\n<p>La suite du code traite les points de d\u00e9part et d&rsquo;arriv\u00e9e.<\/p>\n<p>Nous cr\u00e9ons deux entit\u00e9s (features) pour accueillir ces points<\/p>\n<p><em>\/\/ Les points de d\u00e9part et d&rsquo;arriv\u00e9e.<\/em><br \/>\n<em> var startPoint = new ol.Feature();<\/em><br \/>\n<em> var destPoint = new ol.Feature();<\/em><\/p>\n<p>Puis nous d\u00e9finissons une couche vecteur pour les afficher<\/p>\n<p><em>\/\/ La couche vecteur utilis\u00e9e pour afficher les points de d\u00e9part et d&rsquo;arriv\u00e9e.<\/em><br \/>\n<em> var vectorLayer = new ol.layer.Vector({<\/em><br \/>\n<em> source: new ol.source.Vector({<\/em><br \/>\n<em> features: [startPoint, destPoint]})<\/em><br \/>\n<em> });<\/em><\/p>\n<p><em>map.addLayer(vectorLayer);<\/em><\/p>\n<p>Nous cr\u00e9ons une variable params avec certains param\u00e8tres fixes de notre requ\u00eate \u00e0 envoyer \u00e0 Geoserver, le nom de a couche Geoserver \u00e0 interroger et le format sous lequel nous voulons recevoir le r\u00e9sultat.<\/p>\n<p><em>var params = {<\/em><br \/>\n<em> LAYERS: &lsquo;pgrouting:itineraire&rsquo;,<\/em><br \/>\n<em> FORMAT: &lsquo;image\/png&rsquo;<\/em><br \/>\n<em> };<\/em><\/p>\n<p>Puis nous d\u00e9fissons une fonction de transformatons de coordonn\u00e9es. OpenStreetMap travaille en coordonn\u00e9es sph\u00e9riques Pseudo-Mercator (EPSG:3857). Mais nos donn\u00e9es <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/debuter-avec-postgrespostgis\/\">PostGis<\/a> sont en coordonn\u00e9es g\u00e9ographiques (EPSG:4326).<\/p>\n<p>Quand nous allons r\u00e9cup\u00e9rer le clic sur la carte, les coordonn\u00e9es seront en 3857. Nous devrons es transformer en 4326 avant d&rsquo;envoyer la requ\u00eate vers Geoserver.<br \/>\n\/<em>\/ La fonction de transformation des coordonn\u00e9es \u00e0 partir de l&rsquo;EPSG:3857<\/em><br \/>\n<em> \/\/ vers\u00a0 EPSG:4326.<\/em><br \/>\n<em> var transform = ol.proj.getTransform(&lsquo;EPSG:3857&rsquo;, &lsquo;EPSG:4326&rsquo;);<\/em><\/p>\n<p>Maintenant nous mettons en place l&rsquo;\u00e9coute de l&rsquo;\u00e9v\u00e9nement click sur notre carte. Cette partie du code sera activ\u00e9e quand l&rsquo;utilisateur cliquera sur la carte.<\/p>\n<p><em>\/\/ Mise en place d&rsquo;une \u00e9coute sur les \u00e9venements de la carte.<\/em><br \/>\n<em> map.on(&lsquo;click&rsquo;, function(event) {<\/em><\/p>\n<p>Si le startpoint est vide, cela indique que c&rsquo;est le premier click sur la carte et que c&rsquo;est le point de d\u00e9part qui doit \u00eatre renseign\u00e9.<br \/>\n<em> if (startPoint.getGeometry() == null) {<\/em><br \/>\n<em> \/\/ Premier click.<\/em><br \/>\n<em> startPoint.setGeometry(new ol.geom.Point(event.coordinate));<\/em><\/p>\n<p>Si, par contre, le startpoint est d\u00e9j\u00e0 rensign\u00e9, nous sommes en pr\u00e9sence du deuxi\u00e8me click. Nous allons donc renseigner le destPoint :<br \/>\n<em> } else if (destPoint.getGeometry() == null) {<\/em><br \/>\n<em> \/\/ Deuxi\u00e8me click.<\/em><br \/>\n<em>destPoint.setGeometry(new ol.geom.Point(event.coordinate));<\/em><\/p>\n<p>Et nous encha\u00eenons directement sur le processus de soumission de la requ^\u00f9ete \u00e0 Geoserver.<\/p>\n<p>Nous transformons les coordonn\u00e9es des deux points cliqu\u00e9s:<br \/>\n<em> \/\/ Transformations des coordonn\u00e9es \u00e0 partir de celle de la carte (EPSG:3857)<\/em><br \/>\n<em> \/\/ vers celle du serveur (EPSG:4326).<\/em><br \/>\n<em> var startCoord = transform(startPoint.getGeometry().getCoordinates());<\/em><br \/>\n<em> var destCoord = transform(destPoint.getGeometry().getCoordinates());<\/em><\/p>\n<p>et nous construisons la cha\u00eene de caract\u00e8res avec les param\u00e8tres x1, y1,x2 et y2 n\u00e9cessaires \u00e0\u00a0 notre couche Geoserver (voir l&rsquo;article pr\u00e9c\u00e9dent)<br \/>\n<em> var viewparams = [<\/em><br \/>\n<em> &lsquo;x1:&rsquo; + startCoord[0], &lsquo;y1:&rsquo; + startCoord[1],<\/em><br \/>\n<em> &lsquo;x2:&rsquo; + destCoord[0], &lsquo;y2:&rsquo; + destCoord[1]<\/em><br \/>\n<em> ];<\/em><\/p>\n<p>Voil\u00e0, nous avons tous les \u00e9l\u00e9ments n\u00e9cessaires pour construire le message \u00e0 envoyer \u00e0 Geoserver. Ce mesage nous le mettons dans une variable <em><strong>source<\/strong><\/em>.<\/p>\n<p><em>params.viewparams = viewparams.join(&lsquo;;&rsquo;);<\/em><br \/>\n<em> var source =new ol.source.ImageWMS({<\/em><br \/>\n<em> url: &lsquo;http:\/\/localhost:8080\/geoserver\/pgrouting\/wms&rsquo;,<\/em><br \/>\n<em> params: params<\/em><\/p>\n<p>Et nous envoyons la requ\u00eate vers Geoserver en demandant de mettre le r\u00e9sultat dans une nouvelle couche Image (nous avons demand\u00e9 le retour sous forme d&rsquo;image png un peu plus haut) \u00e0 afficher dans notre map<\/p>\n<p><em>result = new ol.layer.Image({<\/em><br \/>\n<em> source: source<\/em><\/p>\n<p>Comme l&rsquo;interrogation n&rsquo;est pas instantan\u00e9e, il vaut mieux tenir au courant l&rsquo;utilisateur de ce qui se passe sans l&rsquo;obliger \u00e0 rester devant un \u00e9cran semblant fig\u00e9.<\/p>\n<p>Les lignes suivantes affichent un texte de message et une image montrant que la requ\u00eate est en cours, puis quand le transfert est termin\u00e9, indiquant s&rsquo;il &lsquo;est bien pass\u00e9 ou non.<\/p>\n<p><em>source.on(&lsquo;imageloadstart&rsquo;, function() {<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bbchargement&#8230;\u00a0\u00bb;<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bbtree_loading.gif\u00a0\u00bb;<\/em><br \/>\n<em> });<\/em><br \/>\n<em> source.on(&lsquo;imageloadend&rsquo;, function() {<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bbtermin\u00e9 OK!\u00a0\u00bb;<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bbOK.jpg\u00a0\u00bb;<\/em><br \/>\n<em> });<\/em><br \/>\n<em> source.on(&lsquo;imageloaderror&rsquo;, function() {<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bberreur!\u00a0\u00bb;<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bbno.png\u00a0\u00bb;<\/em><br \/>\n<em> });<\/em><\/p>\n<p>Nous chargeons la couche dans notre carte:<\/p>\n<p><em>map.addLayer(result);<\/em><\/p>\n<p>Finalement, nous traitons le click sur le bouton Effacer:<\/p>\n<p><em>var clearButton = document.getElementById(&lsquo;clear&rsquo;);<\/em><br \/>\n<em> clearButton.addEventListener(&lsquo;click&rsquo;, function(event) {<\/em><br \/>\n<em> \/\/ R\u00e9initialise les entit\u00e9s\u00a0 \u00ab\u00a0start\u00a0\u00bb et \u00ab\u00a0destination\u00a0\u00bb .<\/em><br \/>\n<em> startPoint.setGeometry(null);<\/em><br \/>\n<em> destPoint.setGeometry(null);<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0desc\u00a0\u00bb).innerHTML =\u00a0\u00bbCliquez sur la carte pour d\u00e9finir le point de d\u00e9part &#8211; cliquez \u00e0 nouveau pour d\u00e9finir le point d&rsquo;arriv\u00e9e &#8211; la route sera trac\u00e9e\u00a0\u00bb;<\/em><br \/>\n<em> document.getElementById(\u00ab\u00a0image\u00a0\u00bb).src =\u00a0\u00bb0.png\u00a0\u00bb;<\/em><br \/>\n<em> \/\/ Remove the result layer.<\/em><br \/>\n<em> map.removeLayer(result);<\/em><br \/>\n});<\/p>\n<p>En vidant les entit\u00e9s startPoint et destPoint, en remettant le message d&rsquo;accueil et l&rsquo;image vide et en effa\u00e7ant la couche vecteur contenat l&rsquo;itin\u00e9raire pr\u00e9c\u00e9dent.<\/p>\n<p>Nous pouvons ouvrir cette page dans notre navigateur et voir l&rsquo;application tourner:<\/p>\n<div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3362-1\" width=\"640\" height=\"360\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"http:\/\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/06\/pgfrouting2.mp4?_=1\" \/><a href=\"http:\/\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/06\/pgfrouting2.mp4\">http:\/\/www.sigterritoires.fr\/wp-content\/uploads\/2016\/06\/pgfrouting2.mp4<\/a><\/video><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nous arrivons \u00e0 la fin de cette s\u00e9rie. Apr\u00e8s avoir mis en place la base de donn\u00e9es Postgres\/Postgis, nous avons configur\u00e9 Geoserver pour servir les r\u00e9sultats de pgrouting en un lux WMS. Il ne reste plus&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[311,62],"tags":[315,337,326,227,312,58,132],"class_list":["post-3362","post","type-post","status-publish","format-standard","hentry","category-postgresql","category-qgis-2","tag-geoserver","tag-open-layers","tag-pgrouting","tag-postgis","tag-postgresql","tag-qgis","tag-wms"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-Se","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/3362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=3362"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/3362\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=3362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=3362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=3362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}