{"id":28632564,"url":"https://github.com/opensmock/pharoows","last_synced_at":"2025-06-12T14:09:38.679Z","repository":{"id":298374764,"uuid":"562986573","full_name":"OpenSmock/PharoOWS","owner":"OpenSmock","description":"OGC Web Services (OWS) support for Pharo","archived":false,"fork":false,"pushed_at":"2025-06-10T19:03:48.000Z","size":1033,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-10T20:29:22.097Z","etag":null,"topics":["cartography","map","open-smock","pharo","pharo-smalltalk","qgis","qgis-server","smalltalk","smock","tile-server","tilemap","tiles","tileserver","wms","wms-service"],"latest_commit_sha":null,"homepage":"","language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenSmock.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-11-07T17:09:32.000Z","updated_at":"2025-06-10T19:03:54.000Z","dependencies_parsed_at":"2025-06-10T20:39:39.615Z","dependency_job_id":null,"html_url":"https://github.com/OpenSmock/PharoOWS","commit_stats":null,"previous_names":["opensmock/pharoows"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OpenSmock/PharoOWS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenSmock%2FPharoOWS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenSmock%2FPharoOWS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenSmock%2FPharoOWS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenSmock%2FPharoOWS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenSmock","download_url":"https://codeload.github.com/OpenSmock/PharoOWS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenSmock%2FPharoOWS/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259479618,"owners_count":22864364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cartography","map","open-smock","pharo","pharo-smalltalk","qgis","qgis-server","smalltalk","smock","tile-server","tilemap","tiles","tileserver","wms","wms-service"],"created_at":"2025-06-12T14:09:36.832Z","updated_at":"2025-06-12T14:09:38.656Z","avatar_url":"https://github.com/OpenSmock.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PharoOWS\n\n[![Pharo 11](https://img.shields.io/badge/Pharo-11-%23aac9ff.svg)](https://pharo.org/download)\n[![Pharo 12](https://img.shields.io/badge/Pharo-12-%23aac9ff.svg)](https://pharo.org/download)\n[![Pharo 13](https://img.shields.io/badge/Pharo-13-%23aac9ff.svg)](https://pharo.org/download)\n\n[![Unit tests](https://github.com/OpenSmock/PharoOWS/actions/workflows/test.yml/badge.svg)](https://github.com/OpenSmock/PharoOWS/actions/workflows/test.yml)\n\nA variety of protocols and standards exist to enable communication with map\nservers and access geographic data in both raster and vector formats. Defined\nby the [Open Geospatial Consortium (OGC)](https://www.ogc.org/), these\nprotocols are fondamental to ensure interoperability between clients and\nservers.\n\nPharoOWS supports the official OGC protocols along with some widely adopted de\nfacto standards, offering tools for querying map servers and parsing the\nreturned data.\n\n\n## :wrench: Install\n\nPharoOWS can be installed using [Metacello](https://github.com/Metacello/metacello):\n\n```smalltalk\nMetacello new\n  baseline: 'PharoOWS';\n  repository: 'github://OpenSmock/PharoOWS:main';\n  load.\n```\n\nDependencies are:\n\n  - [XMLParser](https://github.com/pharo-contributions/XML-XMLParser)\n\n\n## :globe_with_meridians: Geospatial services: OGC Standards and de facto Protocols\n\nStandard communication protocols with map servers can be divided into two main\ncategories:\n\n1. Official protocols defined by the Open Geospatial Consortium (OGC)\n2. De facto protocols that have emerged due to widespread use (such as XYZ)\n\n### 1. Formal OGC protocols\n\n**Traditional OGC Services**\n\nThese services are based on SOAP or HTTP protocols with specific requests often\nconstructed as URLs with parameters. They primarily exchange XML or other\nspecialized formats (XML for requests/responses, images for maps). These\nstandards have been widely used for many years to ensure geospatial\ninteroperability.\n\n```console\nhttp://mapserver?SERVICE=WMS\u0026REQUEST=GetMap\u0026Layers=layer0,layer1\n```\n\n**Modern RESTful Services**\n\nThese adopt a RESTful architecture based on modern web principles. They use\nsimple HTTP methods (`GET`, `POST`, etc.) and return responses in JSON. This\napproach makes integration with applications easier due to its simplicity and\ncompatibility with current web technologies. OGC API - Features is a key\nexample of this new generation, providing standardized REST APIs for accessing\nvector data.\n\n```console\nhttp://mapserver/collections/layer0/items.json\n```\n\n### 2. De facto standards\n\nAlthough not officially standardized by organizations like the OGC, protocols\nsuch as TMS (Tile Map Service) and the XYZ URL scheme are widely adopted in web\nmapping. Their simplicity and compatibility with modern web technologies have\nmade them essential de facto standards for serving map tiles.\n\n\n## :package: PharoOWS : overview of supported protocols and standards\n\nPharoOWS is split into several packages according to the supported protocols\nand standards:\n\n| Package           | Type                  | Supported Protocols               | Status           |\n|-------------------|-----------------------|-----------------------------------|------------------|\n| PharoOWS-TMS      | De facto standard     | TMS                               | In development   |\n| PharoOWS-Service  | Official OGC          | WMS, WMTS                         | In development   |\n| PharoOWS-API      | Official OGC (modern) | OGC API - Processes               | Upcoming         |\n\n\n:loudspeaker: PharoOWS is still in development, so new protocols and standards\nwill be added over time.\n\n## :computer: Examples\n\n### WMS\n\n```smalltalk\n| wms operations getmap layers size map |\n\n\"Create a WMS client targeting the IGN WMS server\"\nwms := PharoOWSServiceWMS new.\nwms url: 'https://data.geopf.fr/wms-r'.\n\n\"Introspect the server capabilities\"\noperations := wms operations.\n\n# 'operations' is a XMLOrderedList(\n#   a PharoOWSServiceWMSOperation \u003cGetCapabilities\u003e\n#   a PharoOWSServiceWMSOperation \u003cGetMap\u003e\n#   a PharoOWSServiceWMSOperation \u003cGetFeatureInfo\u003e\n# )\n\n\"Listing available image formats for maps\"\ngetmap := operations detect: [ :request | request name = 'GetMap' ].\ngetmap formats.\n\n# 'formats' is an OrderedCollection(\n#   image/jpeg\n#   image/png\n#   image/tiff\n#   image/geotiff\n#   image/x-bil;bits=32\n# )\n\n\"Listing available layers\"\nlayers := wms layers.\n\n# 'layers' is a XMLOrderedList(\n#   a PharoOWSServiceWMSLayer(ADMINEXPRESS-COG-CARTO.LATEST)\n#   a PharoOWSServiceWMSLayer(ADMINEXPRESS-COG.2017)\n#   [...]\n# )\n\n\"Download a raster map with two layers for a bounding box defined by EPSG:3857 coordinates\"\nmap := wms\n  map: { 'EL.GridCoverage'. 'FORETS.PUBLIQUES' }\n  bbox: (-546079 @ 6126282 corner: -398839 @ 6212047)\n  size: 800 @ 600\n  epsg: '3857'\n  format: 'image/png'.\n\n# 'map' is a Bitmap\n```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"doc/wms.png\" alt=\"WMS map\" width=\"400\"/\u003e\n\u003c/p\u003e\n\n\n## :page_facing_up: License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE)\nfile for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensmock%2Fpharoows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopensmock%2Fpharoows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensmock%2Fpharoows/lists"}