{"id":13859212,"url":"https://github.com/geostyler/geostyler","last_synced_at":"2025-04-10T06:15:47.229Z","repository":{"id":37430809,"uuid":"119513899","full_name":"geostyler/geostyler","owner":"geostyler","description":"Generic Styler for geodata","archived":false,"fork":false,"pushed_at":"2024-10-30T01:43:51.000Z","size":349177,"stargazers_count":264,"open_issues_count":30,"forks_count":59,"subscribers_count":28,"default_branch":"main","last_synced_at":"2024-10-30T03:59:31.054Z","etag":null,"topics":["geostyler","react","style-parser"],"latest_commit_sha":null,"homepage":"http://geostyler.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geostyler.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"open_collective":"geostyler"}},"created_at":"2018-01-30T09:31:39.000Z","updated_at":"2024-10-29T17:59:07.000Z","dependencies_parsed_at":"2023-09-23T11:14:35.745Z","dependency_job_id":"2120449f-d81f-437e-9997-0d26cc95b610","html_url":"https://github.com/geostyler/geostyler","commit_stats":{"total_commits":2492,"total_committers":34,"mean_commits":73.29411764705883,"dds":0.7556179775280899,"last_synced_commit":"62e5d65ecebd8734eb5d4f252722cee0bdd53ecc"},"previous_names":[],"tags_count":111,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geostyler%2Fgeostyler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geostyler%2Fgeostyler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geostyler%2Fgeostyler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geostyler%2Fgeostyler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geostyler","download_url":"https://codeload.github.com/geostyler/geostyler/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247995987,"owners_count":21030397,"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":["geostyler","react","style-parser"],"created_at":"2024-08-05T03:02:37.266Z","updated_at":"2025-04-10T06:15:47.218Z","avatar_url":"https://github.com/geostyler.png","language":"TypeScript","funding_links":["https://opencollective.com/geostyler"],"categories":["TypeScript"],"sub_categories":[],"readme":"![GeoStyler Logo](/docs/Geo_Styler_Logo_300_RGB.jpg)\n\n[![Test, Coverage \u0026 Docs (main)](https://github.com/geostyler/geostyler/actions/workflows/on-push-main.yml/badge.svg)](https://github.com/geostyler/geostyler/actions/workflows/on-push-main.yml)\n[![Create \u0026 publish versioned documentation](https://github.com/geostyler/geostyler/actions/workflows/on-publish.yml/badge.svg)](https://github.com/geostyler/geostyler/actions/workflows/on-publish.yml)\n[![Coverage Status](https://coveralls.io/repos/github/geostyler/geostyler/badge.svg?branch=main)](https://coveralls.io/github/geostyler/geostyler?branch=main)\n[![License](https://img.shields.io/github/license/geostyler/geostyler)](https://github.com/geostyler/geostyler/blob/main/LICENSE)\n\nCode: [github](https://github.com/geostyler/geostyler)\nPackage: [npm](https://www.npmjs.com/package/geostyler)\n\u003c!-- DO NOT TOUCH next line. It will be replaced auotmaticaly via RELEASE.yml --\u003e\nDocumentation: [main](https://geostyler.github.io/geostyler/main/index.html) / [latest](https://geostyler.github.io/geostyler/latest/index.html) / [16.0.1](https://geostyler.github.io/geostyler/v16.0.1/index.html)\n\nExamples:\n[Demo application](https://geostyler.github.io/geostyler-demo/)\n\nDeveloper Guide:\n[Developer Guide](#developer-guide)\n\n[![Discord Banner 2](https://discordapp.com/api/guilds/1016992288028762132/widget.png?style=banner2)](https://discord.gg/yrXHDpcFcB)\n\n## :rocket: GeoStyler Code Sprint 2025\n\nWe are happy to announce the next GeoStyler Code Sprint from **02.-06.06.2025** in Switzerland. Be part of it! More infos on https://geostyler.org/.\n\n## 📆 Monthly meetings\n\nOn the first tuesday of every month, there is a video meeting on the [GeoStyler Discord](https://discord.gg/yrXHDpcFcB) at 2pm CET. The meeting is for all contributors, users or other people interested in GeoStyler.\n\n## \u003ca name=\"what-is-this-all-about\"\u003e\u003c/a\u003eWhat is this all about?\n\nThe GeoStyler is a generic styler for geodata*.\n\nGeoStyler provides a set of UI Components for map styling. Just like a modular building block system all components can be stacked together to create a nice UI for your web applications. To simplify the setup, we also provide some high-level components (based on our building blocks) that already do the work for you. These include among many others `Symbolizer Editors`, `RuleTables` and a fully-fledged `StyleEditor including filters and scaleDenominators`.\n\nFurthermore, GeoStyler allows for the translation between multiple styling formats, i.e. SLD, OpenLayers, QGIS, Mapbox. Since we are following the concept of micro packages, these translators (we call them parsers) can be used as standalone libraries, without the need to include the UI components as a dependency. Just take a look at [StyleParser Implementations](#styleparser-implementations).\n\n\\* *geodata as a single dataset (layer) not a complete map appearance.*\n\n**If you are missing any UI components, formats or even have a custom style format, feel free to open a PR. We are happy for any kind of contributions.**\n\nTo see the GeoStyler in action have a look at the [demo application](https://geostyler.github.io/geostyler-demo/).\nIt demonstrates the GeoStyler UI components as a standalone application.\n\nEvery parser works as a standalone library, too. So you can easily translate between style formats.\n\nFor example a small SLD to OpenLayers-Style parser (untested code :smile:):\n\n```js static\nimport SLDParser from \"geostyler-sld-parser\";\nimport OpenLayersParser from \"geostyle-openlayers-parser\";\nconst sldParser = new SLDParser();\nconst olParser = new OpenLayersParser();\n\nconst sldToOL = async (sld) =\u003e {\n  const { output: geostylerStyle } = await sldParser.readStyle(someSld);\n  const { output: olStyle } = await olParser.writeStyle(geostylerStyle);\n  return olStyle;\n};\n\nexport default sldToOl;\n```\n## \u003ca name=\"installation\"\u003e\u003c/a\u003eInstallation\n\nRun\n\n```bash\nnpm i geostyler\n```\nfrom within your project directory to add GeoStyler as a dependency. Please be aware of the peerDependencies that come along with GeoStyler.\n\nComponents can be used as follows:\n```js static\nimport {wanted-geostyler-compoment} from 'geostyler';\n\n//... your component code\nrender() {\n  return (\n    \u003cwanted-geostyler-component\n      foo=\"\"\n      bar={}\n    /\u003e\n  );\n}\n```\n\n## \u003ca name=\"geostyler-ecosystem\"\u003e\u003c/a\u003eGeoStyler - Ecosystem\n\nThe GeoStyler ecosystem is spread across multiple packages.\n\n```mermaid\nflowchart RL\n  classDef parserCls fill:#fffdbc,stroke:#333,stroke-width:2px,color:#333;\n  classDef toolCls fill:#c2f2ff,stroke:#333,stroke-width:2px,color:#333;\n  classDef styleCls fill:white,stroke:#333,stroke-width:2px,color:#333;\n  style convert fill:#EEE,color:#333;\n  style editAndDisplay fill:#EEE,color:#333;\n  style parser fill:#EEE,color:#333;\n\n  subgraph convert[Conversion]\n    cli[GeoStyler CLI]:::toolCls\n    rest[GeoStyler Rest]:::toolCls\n  end\n  subgraph editAndDisplay[Edit and Display]\n    ui[GeoStyler UI]:::toolCls\n    legend[GeoStyler Legend]:::toolCls\n  end\n  geostylerStyle[/GeoStyler Style Format/]\n  subgraph parser[\"Parsers\"]\n    direction LR\n    sld([SLD]):::parserCls\n    ol([OpenLayers]):::parserCls\n    lyrx([Arc GIS]):::parserCls\n    mapbox([MapLibre/MapbBox]):::parserCls\n    qgis([QGIS]):::parserCls\n    mapfile([Mapfile]):::parserCls\n  end\n  convert \u003c--\u003e geostylerStyle\n  editAndDisplay \u003c--\u003e geostylerStyle:::styleCls\n  geostylerStyle \u003c--\u003e parser\n\n  click geostylerStyle \"https://github.com/geostyler/geostyler-style\"\n  click sld \"https://github.com/geostyler/geostyler-sld-parser\"\n  click qgis \"https://github.com/geostyler/geostyler-qgis-parser\"\n  click lyrx \"https://github.com/geostyler/geostyler-lyrx-parser\"\n  click ol \"https://github.com/geostyler/geostyler-openlayers-parser\"\n  click mapbox \"https://github.com/geostyler/geostyler-mapbox-parser\"\n  click mapfile \"https://github.com/geostyler/geostyler-mapfile-parser\"\n  click cli \"https://github.com/geostyler/geostyler-cli\"\n  click rest \"https://github.com/geostyler/geostyler-rest\"\n  click legend \"https://github.com/geostyler/geostyler-legend\"\n  click ui \"https://github.com/geostyler/geostyler\"\n```\n\n#### GeoStyler UI\n\nThe main package of the GeoStyler ecosystem is the UI library. It contains a collection of React components that can be used to build a styling UI for geodata. The main components are the `\u003cStyle /\u003e` or `\u003cCardStyle /\u003e` component which serve as an entry point. The `\u003cStyle /\u003e` component is a full-featured style editor that allows users to create and edit styles for geodata. The `\u003cCardStyle / \u003e` component offers a streamlined and compact alternative to the `\u003cStyle / \u003e` component, optimized for utilization within drawer or card layouts. The library also contains lots of subcomponents that can be used for particular parts of the style editing process, such as the Symbolizer `\u003cEditor /\u003e` or the `\u003cRuleTable \u003e`.\n\n#### GeoStyler Style\n\nThe UI library is built on top of the `geostyler-style`. This is the centerpiece of the GeoStyler ecosystem. The `geostyler-style` package is a TypeScript declaration that defines the GeoStyler style format. The style format is used to represent styles in a generic way that can be converted to and from other style formats. We are not trying to establish just another standard, but we need an exchange format that is flexible and highly compatible with current styling standards.\n\n#### Parsers\n\nThe parsers make use of the `geostyler-style` package to convert between different style formats. The parsers are separate packages that can be used independently of the UI library. The parsers are used to convert between different style formats, such as SLD, OpenLayers, and Mapbox. Each parser is build on top of an interface defined in the `geostyler-style` package to make sure that read and write operations are consistent across all parsers.\n\n#### Conversion tools\n\nTo convert between styles without a UI you can make use of conversion tools like the `geostyler-cli` or the `geostyler-rest` package. The `geostyler-cli` package is a command-line interface that uses the parsers so you can convert between different style formats directly from the command line. The `geostyler-rest` package is a REST API that is built on top of the command-line interface.\n\n#### Legend\n\nThe `geostyler-legend` is a react component that renders a legend based on a GeoStyler style. Combined with the powers of the\nparsers this allows to render a legend for a variety of style formats.\n\n\u003c!-- Code: https://github.com/geostyler/geostyler-demo --\u003e\n\n## \u003ca name=\"related-projects\"\u003e\u003c/a\u003eRelated projects\n\n### \u003ca name=\"typescript-declaration-files\"\u003e\u003c/a\u003eTypeScript Declaration Files\n\n  - GeoStyler Data ([github](https://github.com/geostyler/geostyler-data) /\n      [npm](https://www.npmjs.com/package/geostyler-data))\n  - GeoStyler Style ([github](https://github.com/geostyler/geostyler-style) /\n      [npm](https://www.npmjs.com/package/geostyler-style))\n\n### \u003ca name=\"dataparser-implementations\"\u003e\u003c/a\u003eDataParser Implementations\n\n  - GeoJSON ([github](https://github.com/geostyler/geostyler-geojson-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-geojson-parser))\n  - Shapefile ([github](https://github.com/geostyler/geostyler-shapefile-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-shapefile-parser))\n  - Web Feature Service (WFS) ([github](https://github.com/geostyler/geostyler-wfs-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-wfs-parser))\n\n### \u003ca name=\"styleparser-implementations\"\u003e\u003c/a\u003eStyleParser Implementations\n\n  - SLD ([github](https://github.com/geostyler/geostyler-sld-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-sld-parser))\n  - OpenLayers Style ([github](https://github.com/geostyler/geostyler-openlayers-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-openlayers-parser))\n  - ARC GIS Style [*.lyrx] ([github](https://github.com/geostyler/geostyler-lyrx-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-lyrx-parser))\n  - Mapbox Style ([github](https://github.com/geostyler/geostyler-mapbox-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-mapbox-parser))\n  - MapServer Mapfiles ([github](https://github.com/geostyler/geostyler-mapfile-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-mapfile-parser))\n  - QGIS Style [*.qml] ([github](https://github.com/geostyler/geostyler-qgis-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-qgis-parser))\n\n### \u003ca name=\"more\"\u003e\u003c/a\u003eMore\n  - CQL Filter ([github](https://github.com/geostyler/geostyler-cql-parser) /\n      [npm](https://www.npmjs.com/package/geostyler-cql-parser))\n  - Legend ([github](https://github.com/geostyler/geostyler-legend) /\n      [npm](https://www.npmjs.com/package/geostyler-legend))\n  - CLI (Command Line Interface) ([github](https://github.com/geostyler/geostyler-cli) /\n      [npm](https://www.npmjs.com/package/geostyler-cli))\n  - REST Interface ([github](https://github.com/geostyler/geostyler-rest) /\n      [npm](https://www.npmjs.com/package/geostyler-rest))\n\n## \u003ca name=\"developer-guide\"\u003e\u003c/a\u003eDeveloper Guide\n\nFor our guidelines for contributions, please take a look at [`CONTRIBUTING.md`](./CONTRIBUTING.md). Head there if you need general advice for first contributing steps (code or documentation).\n\nMore detailed information to ensure a great development experience when working on geostyler is summarized in [`DEVELOPING.md`](./DEVELOPING.md). You'll find hints with regard to developing UI components or guidance when you want to enhance (or create) parsers for style formats or data formats there.\n\nAdditionally, please read through our [code of conduct](./CODE_OF_CONDUCT.md).\n\nWe look forward to seeing you contribute soon!\n\n## \u003ca name=\"license\"\u003e\u003c/a\u003eLicense\n\nGeoStyler is released under the BSD 2-Clause license. Please see the file\n[`LICENSE`](https://github.com/geostyler/geostyler/blob/main/LICENSE) in the\nroot of this repository.\n\n## Thanks to all contributors ❤\n\n[![Avatars of contributors of GeoStyler](https://contrib.rocks/image?repo=geostyler/geostyler \"Avatars of contributors of GeoStyler\")](https://github.com/geostyler/geostyler/graphs/contributors)\n\n## \u003ca name=\"funding\"\u003e\u003c/a\u003eFunding \u0026 financial sponsorship\n\nMaintenance and further development of this code can be funded through the\n[GeoStyler Open Collective](https://opencollective.com/geostyler). All contributions and\nexpenses can transparently be reviewed by anyone; you see what we use the donated money for.\nThank you for any financial support you give the GeoStyler project 💞\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeostyler%2Fgeostyler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeostyler%2Fgeostyler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeostyler%2Fgeostyler/lists"}