uGIS Documentation
Home API Playground Admin Panel

Introduction

uGIS is a high-performance GIS tile server that implements the major OGC web services (WMS, WFS, WMTS, WCS, MVT) and serves both raster (GeoTIFF) and vector (Shapefile, GeoJSON, PostGIS) data. It is built on Vert.x 4 (non-blocking I/O) and GeoTools 31.uGIS, başlıca OGC web servislerini (WMS, WFS, WMTS, WCS, MVT) uygulayan ve hem raster (GeoTIFF) hem de vektör (Shapefile, GeoJSON, PostGIS) verileri sunan yüksek performanslı bir CBS tile sunucusudur. Vert.x 4 (bloklamayan I/O) ve GeoTools 31 üzerine inşa edilmiştir.

A custom SLD compiler converts style rules into pre-computed color LUTs (lookup tables), bypassing the GeoTools StreamingRenderer for raster data — resulting in sub-millisecond pixel-to-ARGB mapping.Özel bir SLD derleyicisi, stil kurallarını önceden hesaplanmış renk LUT'larına (arama tabloları) dönüştürerek raster verileri için GeoTools StreamingRenderer'ı atlar — milisaniyenin altında piksel-ARGB eşlemesi sağlar.

Supported Services

ServiceVersionBase URLDescription
WMS1.1.1 / 1.3.0/wmsMap images, raster + vectorHarita görüntüleri, raster + vektör
WFS2.0/wfsFeature data (GeoJSON, GML, KML, SHP)Özellik verileri (GeoJSON, GML, KML, SHP)
WMTS1.0.0/wmtsTiled map service (KVP + RESTful)Döşemeli harita servisi (KVP + RESTful)
TMS/XYZ/tms/{layer}/{z}/{x}/{y}.pngXYZ tile pyramidXYZ tile piramidi
WCS2.0.1/wcsRaw raster download (GeoTIFF)Ham raster indirme (GeoTIFF)
MVT/mvt/{layer}/{z}/{x}/{y}.pbfMapbox Vector Tiles (PBF)Mapbox Vektör Karoları (PBF)

Supported Data Sources

Quick Start

Server URLs

Replace http://localhost:8080 with your server address.Sunucu adresinizi http://localhost:8080 ile değiştirin.

# Health check
http://localhost:8080/health

# WMS GetCapabilities (discover all layers)
http://localhost:8080/wms?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

# WFS GetCapabilities
http://localhost:8080/wfs?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=2.0.0

# Admin panel (browser)
http://localhost:8080/admin.html

QGIS Setup

  1. Layer → Add Layer → Add WMS/WMTS LayerKatman → Katman Ekle → WMS/WMTS Katmanı Ekle
  2. New connection: URL = http://localhost:8080/wmsYeni bağlantı: URL = http://localhost:8080/wms
  3. Click Connect → select a layer → AddBağlan'a tıklayın → bir katman seçin → Ekle

OpenLayers Setup

import TileWMS from 'ol/source/TileWMS';

const wms = new TileWMS({
  url: 'http://localhost:8080/wms',
  params: { LAYERS: 'dem', STYLES: 'terrain', FORMAT: 'image/png' },
  serverType: 'geoserver'
});

MapLibre GL (MVT)

map.addSource('buildings', {
  type: 'vector',
  tiles: ['http://localhost:8080/mvt/buildings/{z}/{x}/{y}.pbf'],
  minzoom: 8, maxzoom: 18
});

Authentication

Read operations on OGC services (WMS, WFS, WMTS, TMS, WCS, MVT) are public — no authentication required. Write and admin operations require a JWT Bearer token.OGC servislerindeki (WMS, WFS, WMTS, TMS, WCS, MVT) okuma işlemleri herkese açıktır — kimlik doğrulama gerekmez. Yazma ve yönetim işlemleri JWT Bearer token gerektirir.

Login

POST /api/admin/login
Content-Type: application/json

{
  "username": "admin",
  "password": "yourpassword"
}

# Response
{
  "token": "eyJhbGciOiJIUzI1NiJ9...",
  "username": "admin",
  "role": "admin"
}

Using the Token

# Include in all protected requests
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

# curl example
curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/api/admin/settings

Roles

RolePermissions
viewerRead public APIs (layers, styles, capabilities)Herkese açık API'leri oku (katmanlar, stiller, yetenekler)
editorviewer + upload files, create/update layers and stylesviewer + dosya yükle, katman ve stil oluştur/güncelle
admineditor + delete layers/styles, manage users, change settingseditor + katman/stil sil, kullanıcı yönet, ayarları değiştir

WMS — Web Map Service

Serves map images in PNG or JPEG format. Supports OGC WMS 1.1.1 and 1.3.0. Works with both raster (GeoTIFF) and vector layers.PNG veya JPEG formatında harita görüntüleri sunar. OGC WMS 1.1.1 ve 1.3.0 destekler. Hem raster (GeoTIFF) hem de vektör katmanlarla çalışır.

GetMap GET

GET /wms?SERVICE=WMS&REQUEST=GetMap&…
Returns a map image for the specified layer, bbox, and style.Belirtilen katman, bbox ve stil için bir harita görüntüsü döndürür.
ParameterRequiredExampleDescription
SERVICErequiredWMSMust be WMS
REQUESTrequiredGetMapMust be GetMap
VERSIONoptional1.3.0WMS version (1.1.1 or 1.3.0)
LAYERSrequireddem,imarComma-separated layer names; rendered back-to-front
STYLESoptionalterrain,Comma-separated style names (empty = default)
CRS / SRSrequiredEPSG:4326Coordinate reference system
BBOXrequired29,41,30,42minX,minY,maxX,maxY in CRS units
WIDTHrequired512Image width in pixels (max 4096)
HEIGHTrequired512Image height in pixels (max 4096)
FORMAToptionalimage/pngOutput format: image/png or image/jpeg
TRANSPARENToptionalTRUEEnable alpha transparency (PNG only)
TIMEoptional2024-01-15Temporal filter for vector layers (see below)
SLD_BODYoptional<StyledLayerDescriptor>…</StyledLayerDescriptor>Inline SLD XML, overrides registered styles
CQL_FILTERoptionalIMAR_SINIFI='K'ECQL filter for vector layers

Example requests

# Simple raster map
GET /wms?SERVICE=WMS&REQUEST=GetMap&LAYERS=dem&STYLES=terrain&CRS=EPSG:4326&BBOX=26,36,45,42&WIDTH=800&HEIGHT=400&FORMAT=image/png

# Multi-layer composite (raster base + vector overlay)
GET /wms?SERVICE=WMS&REQUEST=GetMap&LAYERS=dem,imar_planlari&STYLES=terrain,imar_test&CRS=EPSG:4326&BBOX=29,41,30,42&WIDTH=512&HEIGHT=512&FORMAT=image/png&TRANSPARENT=TRUE

# WMS with TIME filter (requires timeColumn metadata on layer)
GET /wms?SERVICE=WMS&REQUEST=GetMap&LAYERS=events&STYLES=points&CRS=EPSG:4326&BBOX=29,41,30,42&WIDTH=512&HEIGHT=512&TIME=2024-01-01/2024-12-31

TIME parameter format

FormatExampleMeaning
ISO date2024-01-15Exact date match
ISO datetime2024-01-15T12:00:00ZExact moment
Date range2024-01-01/2024-12-31Inclusive range
ℹ️ To use TIME filtering, configure the layer's time column via Admin panel → Layers → Edit Metadata → set timeColumn.TIME filtrelemeyi kullanmak için Admin paneli → Katmanlar → Meta Veri Düzenle → timeColumn ayarlayın.

GetCapabilities GET

GET /wms?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

Returns XML listing all available layers, CRS support, and service metadata.Tüm mevcut katmanları, CRS desteğini ve servis meta verilerini listeleyen XML döndürür.

GetFeatureInfo GET

GET /wms?SERVICE=WMS&REQUEST=GetFeatureInfo&LAYERS=dem&QUERY_LAYERS=dem&CRS=EPSG:4326&BBOX=29,41,30,42&WIDTH=512&HEIGHT=512&I=256&J=256&INFO_FORMAT=application/json

Returns the raster pixel value (or vector feature attributes) at pixel coordinates I,J.I,J piksel koordinatlarındaki raster piksel değerini (veya vektör özellik niteliklerini) döndürür.

GetLegendGraphic GET

# Full legend
GET /wms?SERVICE=WMS&REQUEST=GetLegendGraphic&LAYER=imar_planlari&STYLE=imar_test&FORMAT=image/png

# Single rule by name
GET /wms?SERVICE=WMS&REQUEST=GetLegendGraphic&LAYER=imar_planlari&STYLE=imar_test&FORMAT=image/png&RULE=Konut

# Scale-dependent rules only (shows rules visible at 1:25000)
GET /wms?SERVICE=WMS&REQUEST=GetLegendGraphic&LAYER=imar_planlari&STYLE=imar_test&FORMAT=image/png&SCALE=25000
ParameterRequiredDescription
LAYERrequiredLayer name
STYLEoptionalStyle name (default if omitted)
FORMAToptionalimage/png
WIDTH / HEIGHToptionalSwatch size (default 20×20)
RULEoptionalFilter legend to a single named rule
SCALEoptionalScale denominator; hides scale-out-of-range rules

WFS — Web Feature Service

Returns vector feature data in multiple formats. Supports attribute filtering, bbox, sorting, pagination, and reprojection.Birden fazla formatta vektör özellik verileri döndürür. Nitelik filtreleme, bbox, sıralama, sayfalama ve yeniden projeksiyon destekler.

GetFeature GET

GET /wfs?SERVICE=WFS&REQUEST=GetFeature&…
ParameterRequiredExampleDescription
TYPENAMErequiredimar_planlariLayer name
OUTPUTFORMAToptionalapplication/jsonOutput format (see below)
MAXFEATURES / COUNToptional1000Max features returned
STARTINDEXoptional0Pagination offset
CQL_FILTERoptionalIMAR_SINIFI='K'ECQL attribute filter
BBOXoptional29,41,30,42,EPSG:4326Spatial bbox filter
SRSNAMEoptionalEPSG:3857Reproject output to this CRS
SORTBYoptionalALAN DSort field + direction (A/D)
PROPERTYNAMEoptionalIMAR_SINIFI,ALANLimit returned attributes

Output Formats

OUTPUTFORMAT valueContent-TypeDescription
application/jsonapplication/jsonGeoJSON FeatureCollection
application/gml+xmlapplication/gml+xmlGML 3.2 FeatureCollection
text/xmltext/xmlGML (legacy)
application/vnd.google-earth.kml+xmlapplication/vnd.google-earth.kml+xmlKML
application/zipapplication/zipShapefile ZIP
text/csvtext/csvCSV (no geometry)

Example requests

# Get all features as GeoJSON (max 1000)
GET /wfs?SERVICE=WFS&REQUEST=GetFeature&TYPENAME=imar_planlari&MAXFEATURES=1000&OUTPUTFORMAT=application/json

# Filter by attribute
GET /wfs?SERVICE=WFS&REQUEST=GetFeature&TYPENAME=imar_planlari&CQL_FILTER=IMAR_SINIFI='K'&OUTPUTFORMAT=application/json

# Bbox spatial filter + reproject to EPSG:3857
GET /wfs?SERVICE=WFS&REQUEST=GetFeature&TYPENAME=imar_planlari&BBOX=29,41,30,42,EPSG:4326&SRSNAME=EPSG:3857

# Download as Shapefile ZIP
GET /wfs?SERVICE=WFS&REQUEST=GetFeature&TYPENAME=imar_planlari&OUTPUTFORMAT=application/zip

# GML 3.2 output
GET /wfs?SERVICE=WFS&REQUEST=GetFeature&TYPENAME=imar_planlari&OUTPUTFORMAT=application/gml+xml&MAXFEATURES=10

CQL / ECQL Filters

The CQL_FILTER parameter accepts Extended CQL (ECQL) syntax for powerful attribute and spatial queries.CQL_FILTER parametresi, güçlü nitelik ve mekansal sorgular için Genişletilmiş CQL (ECQL) sözdizimini kabul eder.

Filter typeExample
EqualityIMAR_SINIFI = 'K'
ComparisonALAN > 5000
AND / ORIMAR_SINIFI = 'K' AND ALAN > 1000
IN listIMAR_SINIFI IN ('K', 'T', 'Y')
LIKEADI LIKE '%Konut%'
IS NULLACIKLAMA IS NULL
BETWEENALAN BETWEEN 1000 AND 5000
Bbox spatialBBOX(the_geom, 29, 41, 30, 42)
INTERSECTSINTERSECTS(the_geom, POLYGON((29 41, 30 41, 30 42, 29 42, 29 41)))
WITHIN distanceDWITHIN(the_geom, POINT(29.5 41.5), 1000, meters)

WMTS & TMS — Tile Services

TMS / XYZ Tiles

Standard XYZ tile pyramid, compatible with Leaflet, OpenLayers, MapLibre.Leaflet, OpenLayers, MapLibre ile uyumlu standart XYZ tile piramidi.

# Raster layer
GET /tms/{layer}/{z}/{x}/{y}.png

# With named style
GET /tms/{layer}/{style}/{z}/{x}/{y}.png

# Example
GET /tms/dem/terrain/8/142/94.png

WMTS 1.0.0

# KVP GetTile
GET /wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=dem&STYLE=terrain&FORMAT=image/png&TILEMATRIXSET=EPSG:4326&TILEMATRIX=8&TILEROW=94&TILECOL=142

# RESTful GetTile
GET /wmts/{layer}/{TileMatrixSet}/{z}/{y}/{x}

# GetCapabilities
GET /wmts?SERVICE=WMTS&REQUEST=GetCapabilities

Supported TileMatrixSets: EPSG:4326 (geographic) and EPSG:3857 (Web Mercator).Desteklenen TileMatrixSet'ler: EPSG:4326 (coğrafi) ve EPSG:3857 (Web Mercator).

WMTS supports both raster and vector layers. Vector layers are rendered server-side as PNG tiles using GeoTools StreamingRenderer with their assigned SLD style. GetCapabilities lists all available layers from both sources.WMTS hem raster hem de vektör katmanları destekler. Vektör katmanlar, atanmış SLD stiliyle GeoTools StreamingRenderer kullanılarak sunucu tarafında PNG tile olarak işlenir. GetCapabilities her iki kaynaktaki tüm katmanları listeler.

Leaflet Integration

L.tileLayer('http://localhost:8080/tms/dem/{z}/{x}/{y}.png', {
  maxZoom: 18, attribution: 'uGIS'
}).addTo(map);

WCS — Web Coverage Service

Downloads raw raster data as GeoTIFF.Ham raster verileri GeoTIFF olarak indirir.

# Discover available coverages
GET /wcs?SERVICE=WCS&REQUEST=GetCapabilities&VERSION=2.0.1

# Download a coverage (full extent)
GET /wcs?SERVICE=WCS&REQUEST=GetCoverage&VERSION=2.0.1&COVERAGEID=dem

# Download with bbox subset
GET /wcs?SERVICE=WCS&REQUEST=GetCoverage&VERSION=2.0.1&COVERAGEID=dem&SUBSET=Long(26,45)&SUBSET=Lat(36,42)

Output format is always image/tiff (GeoTIFF). The response includes proper georeferencing metadata.Çıktı formatı her zaman image/tiff (GeoTIFF) şeklindedir. Yanıt uygun coğrafi referans meta verileri içerir.

MVT — Mapbox Vector Tiles

Serves vector data as binary Protocol Buffer (PBF) tiles in Mapbox Vector Tile format. Compatible with MapLibre GL, Mapbox GL, OpenLayers 6+, and deck.gl. Requires a vector layer.Vektör verileri Mapbox Vector Tile formatında ikili Protocol Buffer (PBF) karoları olarak sunar. MapLibre GL, Mapbox GL, OpenLayers 6+ ve deck.gl ile uyumludur. Vektör katman gerektirir.

GET /mvt/{layer}/{z}/{x}/{y}.pbf
Returns a binary PBF tile. The tile coordinate system matches standard XYZ (TMS) conventions.İkili PBF karosu döndürür. Karo koordinat sistemi standart XYZ (TMS) kurallarına uygundur.
# MapLibre GL source
map.addSource('imar', {
  type: 'vector',
  tiles: ['http://localhost:8080/mvt/imar_planlari/{z}/{x}/{y}.pbf'],
  minzoom: 8,
  maxzoom: 18
});
map.addLayer({
  id: 'imar-fill',
  type: 'fill',
  source: 'imar',
  'source-layer': 'imar_planlari',
  paint: { 'fill-color': '#3b82f6', 'fill-opacity': 0.6 }
});
MVT tiles are automatically cached in the two-level tile cache (memory + disk), giving sub-millisecond cache hits on repeat requests.MVT karoları otomatik olarak iki seviyeli tile önbelleğinde (bellek + disk) saklanır, tekrarlanan isteklerde milisaniyenin altında önbellek isabetleri sağlar.

Layer Permissions

Layer-level access control restricts who can access specific layers via OGC services (WMS, WFS, TMS, MVT, WMTS, WCS). By default all layers are PUBLIC (backward-compatible).Katman düzeyinde erişim kontrolü, belirli katmanlara OGC servisleri (WMS, WFS, TMS, MVT, WMTS, WCS) aracılığıyla kimlerin erişebileceğini kısıtlar. Varsayılan olarak tüm katmanlar PUBLIC'tir (geriye uyumlu).

Access Types

TypeBehavior
PUBLICAnyone can access — no token required. This is the default.Herkes erişebilir — token gerekmez. Bu varsayılandır.
ROLEOnly authenticated users with one of the allowed roles can access. Admin role always has access.Yalnızca izin verilen rollerden birine sahip kimliği doğrulanmış kullanıcılar erişebilir. Admin rolü her zaman erişime sahiptir.
USEROnly specific named users can access. Admin role always has access.Yalnızca belirli adlandırılmış kullanıcılar erişebilir. Admin rolü her zaman erişime sahiptir.

API Endpoints

GET/api/admin/layer-permissionsadmin
List all layer permissions.Tüm katman izinlerini listele.
PUT/api/admin/layer-permissions/{layerName}admin
Set or update permission for a layer.Bir katman için izin ayarla veya güncelle.
DELETE/api/admin/layer-permissions/{layerName}admin
Remove permission (resets to PUBLIC).İzni kaldır (PUBLIC'e sıfırla).
# Restrict a layer to editor and admin roles only
curl -X PUT http://localhost:8080/api/admin/layer-permissions/dem \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "accessType": "ROLE",
    "allowedRoles": ["editor", "admin"]
  }'

# Restrict to specific users
curl -X PUT http://localhost:8080/api/admin/layer-permissions/sensitive_data \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "accessType": "USER",
    "allowedUsers": ["analyst1", "admin"]
  }'

# Reset to public access
curl -X DELETE http://localhost:8080/api/admin/layer-permissions/dem \
  -H "Authorization: Bearer $TOKEN"

How It Works

Permissions are persisted to config/layer-permissions.json and can also be managed via the Admin Panel → Permissions page.İzinler config/layer-permissions.json dosyasına kaydedilir ve Admin Paneli → İzinler sayfası aracılığıyla da yönetilebilir.

Audit Log

The audit log records all OGC and admin API requests for compliance tracking and debugging. Disabled by default — enable via auditEnabled in server settings.Denetim günlüğü, uyumluluk takibi ve hata ayıklama için tüm OGC ve admin API isteklerini kaydeder. Varsayılan olarak devre dışıdır — sunucu ayarlarındaki auditEnabled ile yapılandırın.

Enabling Audit Logging

# Enable audit logging with 90-day retention
curl -X PUT http://localhost:8080/api/admin/settings \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "auditEnabled": true,
    "auditRetentionDays": 90
  }'

Querying the Audit Log

GET/api/admin/auditadmin
Query audit log entries with pagination and optional filters.Sayfalama ve isteğe bağlı filtrelerle denetim günlüğü girişlerini sorgulayın.
ParameterTypeDescription
limitoptionalMax entries to return (default 50, max 500)
offsetoptionalPagination offset (default 0)
usernameoptionalFilter by username
layeroptionalFilter by layer name
actionoptionalFilter by action type (e.g. WMS_GETMAP)
fromoptionalStart timestamp (ISO 8601)
tooptionalEnd timestamp (ISO 8601)
# Get recent audit entries
curl -H "Authorization: Bearer $TOKEN" \
  "http://localhost:8080/api/admin/audit?limit=20"

# Filter by user and action
curl -H "Authorization: Bearer $TOKEN" \
  "http://localhost:8080/api/admin/audit?username=admin&action=WMS_GETMAP"

# Response
{
  "entries": [
    {
      "timestamp": "2026-02-21T14:30:00Z",
      "username": "admin",
      "action": "WMS_GETMAP",
      "layerName": "dem",
      "remoteIP": "192.168.1.10",
      "details": "GET /wms?SERVICE=WMS&REQUEST=GetMap&LAYERS=dem...",
      "statusCode": 200
    }
  ],
  "count": 1,
  "total": 1542
}

Action Types

ActionTrigger
WMS_GETMAPWMS GetMap requestWMS GetMap isteği
WMS_GETCAPABILITIESWMS GetCapabilitiesWMS GetCapabilities
WMS_GETFEATUREINFOWMS GetFeatureInfoWMS GetFeatureInfo
WMS_GETLEGENDGRAPHICWMS GetLegendGraphicWMS GetLegendGraphic
WFS_GETFEATUREWFS GetFeatureWFS GetFeature
WFS_GETCAPABILITIESWFS GetCapabilitiesWFS GetCapabilities
WFS_TRANSACTIONWFS-T TransactionWFS-T Transaction
WMTS_GETTILEWMTS GetTile (KVP or RESTful)WMTS GetTile (KVP veya RESTful)
WMTS_GETCAPABILITIESWMTS GetCapabilitiesWMTS GetCapabilities
TMS_TILETMS/XYZ tile requestTMS/XYZ tile isteği
MVT_TILEMVT vector tile requestMVT vektör tile isteği
WCS_GETCOVERAGEWCS GetCoverageWCS GetCoverage
ADMIN_LOGINAdmin login attemptAdmin giriş denemesi
ADMIN_SETTINGSSettings read/writeAyarlar okuma/yazma
ADMIN_PERMISSIONSPermission managementİzin yönetimi

Storage

Audit entries can also be viewed in the Admin Panel → Audit Log page with interactive filtering and pagination.Denetim girişleri, etkileşimli filtreleme ve sayfalama ile Admin Paneli → Denetim Günlüğü sayfasında da görüntülenebilir.

SLD Styles

uGIS uses OGC SLD 1.0 for styling. Styles are stored in the sld/ directory and compiled at startup into in-memory color LUT tables for maximum performance.uGIS, stillendirme için OGC SLD 1.0 kullanır. Stiller sld/ dizininde saklanır ve başlangıçta maksimum performans için bellek içi renk LUT tablolarına derlenir.

SLD File Structure

sld/
├── terrain.sld          # → style name: "terrain"
├── hillshade.sld
└── categories/
    └── imar.sld         # → style name: "categories__imar" (subdirs use "__")

Raster Color Map (LUT-based rendering)

<StyledLayerDescriptor version="1.0.0" ...>
  <NamedLayer><Name>dem</Name>
    <UserStyle>
      <FeatureTypeStyle><Rule>
        <RasterSymbolizer>
          <Opacity>1.0</Opacity>
          <ColorMap type="ramp">
            <ColorMapEntry color="#0000ff" quantity="0"   label="Sea"/>
            <ColorMapEntry color="#00aa00" quantity="500" label="Low"/>
            <ColorMapEntry color="#ffffff" quantity="3000" label="Peak"/>
          </ColorMap>
          <ContrastEnhancement>
            <Normalize/>     <!-- or Histogram, GammaValue -->
          </ContrastEnhancement>
        </RasterSymbolizer>
      </Rule></FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

ColorMap Types

TypeDescription
rampSmooth linear interpolation between color entriesRenk girişleri arasında düzgün doğrusal enterpolasyon
intervalsFlat color for each interval (class maps)Her aralık için düz renk (sınıf haritaları)
valuesExact pixel value match (classification maps)Tam piksel değeri eşleşmesi (sınıflandırma haritaları)

ContrastEnhancement Methods

SLD ElementEffect
<Normalize/>Min-max linear stretch → [0, 255]Min-max doğrusal gerilme → [0, 255]
<Histogram/>CDF-based histogram equalizationCDF tabanlı histogram eşitleme
<Logarithmic/>Logarithmic stretchLogaritmik gerilme
<Exponential/>Exponential stretchÜstel gerilme
<GammaValue>1.5</GammaValue>Gamma correctionGama düzeltmesi

Vector Style (GeoTools StreamingRenderer)

<Rule>
  <Name>Residential</Name>
  <ogc:Filter><ogc:PropertyIsEqualTo>
    <ogc:PropertyName>IMAR_SINIFI</ogc:PropertyName>
    <ogc:Literal>K</ogc:Literal>
  </ogc:PropertyIsEqualTo></ogc:Filter>
  <MinScaleDenominator>1000</MinScaleDenominator>
  <MaxScaleDenominator>50000</MaxScaleDenominator>
  <PolygonSymbolizer>
    <Fill><CssParameter name="fill">#fbbf24</CssParameter></Fill>
    <Stroke><CssParameter name="stroke">#92400e</CssParameter></Stroke>
  </PolygonSymbolizer>
</Rule>

Style Management API

GET/api/sld
List all registered styles with metadata.
GET/api/sld/{name}
Download raw SLD XML for a named style.
GET/api/sld/{name}/info
Get compiled style info: color map entries, rules, symbolizer types, contrast enhancement settings.
POST/api/sld/{name}editor+
Upload a new SLD (body = raw SLD XML). Names starting with _ are preview-only (not saved to disk).
DELETE/api/sld/{name}admin
Delete a style.
# Upload a new style
curl -X POST http://localhost:8080/api/sld/terrain \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/xml" \
  --data-binary @terrain.sld

# List styles
curl http://localhost:8080/api/sld | jq '.styles[].name'

Inline SLD_BODY (per-request style)

Pass an SLD document directly in the WMS GetMap request to override registered styles:Kayıtlı stilleri geçersiz kılmak için WMS GetMap isteğinde doğrudan bir SLD belgesi gönderin:

GET /wms?SERVICE=WMS&REQUEST=GetMap&LAYERS=dem&CRS=EPSG:4326&BBOX=26,36,45,42&WIDTH=512&HEIGHT=256&FORMAT=image/png
&SLD_BODY=<StyledLayerDescriptor version="1.0.0" ...>...</StyledLayerDescriptor>

Supports both NamedLayer (matches by layer name) and UserLayer. URL-encode the XML in the query string.

Admin REST API

All admin endpoints require authentication. The base path is /api/admin/.Tüm admin uç noktaları kimlik doğrulama gerektirir. Temel yol /api/admin/ şeklindedir.

Layer Management

Raster Layers

GET/api/layers
List all raster layers with bounds, CRS, and band count.
GET/api/layers/{name}
Get a single raster layer's details.
PUT/api/layers/{name}/metadataeditor+
Update layer metadata (title, description, custom fields including timeColumn).
DELETE/api/layers/{name}admin
Unregister a raster layer.

Vector Layers

GET/api/vector-layers
List all vector layers.
GET/api/vector-layers/{name}/export
Export a vector layer as GeoJSON, SHP ZIP, KML, or CSV. Add ?format=zip.
PUT/api/vector-layers/{name}/metadataeditor+
Update metadata. Use {"timeColumn":"date_field"} to enable WMS TIME filtering.

File Upload

POST/api/admin/uploadeditor+
Upload GeoTIFF, Shapefile ZIP, or SLD XML. Max 2 GB. Use multipart/form-data.
# Upload a GeoTIFF
curl -X POST http://localhost:8080/api/admin/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@dem.tif"

# Upload a Shapefile (must be a ZIP containing .shp/.dbf/.prj)
curl -X POST http://localhost:8080/api/admin/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@imar_planlari.zip"

Cache & Tile Seeding

GET/api/cache/stats
Returns cache hits, misses, memory size, and hit rate.
DELETE/api/cacherequired
Clear the entire tile cache (memory + disk).
POST/api/cache/seededitor+
Start a tile pre-generation job. Returns a job ID immediately; runs in background.
GET/api/cache/seed/{jobId}required
Check the status of a seeding job.
# Start seeding (raster DEM, zoom 5–10, Turkey bbox)
curl -X POST http://localhost:8080/api/cache/seed \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "layer": "dem",
    "style": "terrain",
    "minZoom": 5,
    "maxZoom": 10,
    "bbox": [26.0, 35.8, 44.8, 42.1]
  }'

# Response: {"status":"started","jobId":"abc123","totalTiles":1364}

# Poll for completion
curl -H "Authorization: Bearer $TOKEN" \
  http://localhost:8080/api/cache/seed/abc123

# Response: {"status":"completed","completedTiles":1364,"totalTiles":1364}
⚠️ Maximum 50,000 tiles per seeding job. For large areas, split into multiple zoom-level ranges. Tiles already in cache are skipped automatically.Önceden oluşturma işi başına en fazla 50.000 tile. Büyük alanlar için birden fazla zoom seviyesi aralığına bölün. Zaten önbellekte olan tile'lar otomatik olarak atlanır.

Server Settings

GET/api/admin/settingsrequired
Get current server configuration.
PUT/api/admin/settingsadmin
Update server configuration. Partial updates supported (only include fields to change).
# Example: disable WFS, enable rate limiting
curl -X PUT http://localhost:8080/api/admin/settings \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "wfsEnabled": false,
    "rateLimitEnabled": true,
    "rateLimitPerMinute": 500,
    "rateLimitAdminPerMinute": 100
  }'

Settings Reference

FieldTypeDefaultDescription
wmsEnabledbooleantrueEnable/disable WMS service
wfsEnabledbooleantrueEnable/disable WFS service
wmtsEnabledbooleantrueEnable/disable WMTS service
tmsEnabledbooleantrueEnable/disable TMS service
wcsEnabledbooleantrueEnable/disable WCS service
wmsMaxWidthinteger4096Max image width (pixels)
wmsMaxHeightinteger4096Max image height (pixels)
wfsDefaultMaxFeaturesinteger1000Default feature limit per request
wfsMaxAllowedFeaturesinteger100000Hard cap on features per request
exportMaxFeaturesinteger50000Max features for file export
cacheEnabledbooleantrueEnable tile caching
cacheTtlMinutesinteger60Cache TTL in minutes
rateLimitEnabledbooleanfalseEnable IP-based rate limiting
rateLimitPerMinuteinteger1000OGC requests per IP per minute
rateLimitAdminPerMinuteinteger200Admin API requests per IP per minute
auditEnabledbooleanfalseEnable request audit logging
auditRetentionDaysinteger30Days to keep audit log entries
serviceTitlestring"uGIS"Service title in GetCapabilities
serviceAbstractstring""Service description
maxUploadSizeMBinteger2048Max file upload size (MB)
supportedCrsstring[]["EPSG:4326", "EPSG:3857", "CRS:84"]CRS codes advertised in WMS/WFS GetCapabilities

CRS / Projections API

Public endpoints for querying supported coordinate reference systems. No authentication required. CRS metadata is resolved from the GeoTools EPSG database.Desteklenen koordinat referans sistemlerini sorgulamak için herkese açık uç noktalar. Kimlik doğrulama gerektirmez. CRS meta verileri GeoTools EPSG veritabanından çözümlenir.

GET/api/crs
List all supported CRS with metadata (name, unit, isGeographic, bounds). Default set includes EPSG:4326, 3857, CRS:84, common global CRS, and 120 UTM zones. Customizable via server settings.
# List all supported CRS
curl http://localhost:8080/api/crs

# Response (array of CRS metadata objects):
[
  {
    "code": "EPSG:4326",
    "name": "WGS 84",
    "unit": "°",
    "isGeographic": true,
    "bounds": {"minX":-180,"minY":-90,"maxX":180,"maxY":90}
  },
  {
    "code": "EPSG:32635",
    "name": "WGS 84 / UTM zone 35N",
    "unit": "m",
    "isGeographic": false,
    "bounds": {"minX":26.0,"minY":0.0,"maxX":30.0,"maxY":84.0}
  }
]
GET/api/crs/search?q={query}
Search CRS by code or name (case-insensitive). Returns matching CRS metadata from the supported list.
# Search for UTM zones
curl "http://localhost:8080/api/crs/search?q=UTM"

# Search by EPSG code
curl "http://localhost:8080/api/crs/search?q=3857"
GET/api/crs/validate?code={code}
Validate any EPSG code. Returns validity and metadata. Works with codes outside the supported list.
# Validate a CRS code
curl "http://localhost:8080/api/crs/validate?code=EPSG:32635"

# Response:
{
  "code": "EPSG:32635",
  "valid": true,
  "metadata": {
    "code": "EPSG:32635",
    "name": "WGS 84 / UTM zone 35N",
    "unit": "m",
    "isGeographic": false,
    "bounds": {"minX":26.0,"minY":0.0,"maxX":30.0,"maxY":84.0}
  }
}
ℹ️ The supported CRS list affects WMS/WFS GetCapabilities output. When using WMS GetMap with CRS=EPSG:32635, reprojection works regardless of whether the CRS is in the supported list — any valid EPSG code is accepted. The supported list controls what is advertised to clients like QGIS.Desteklenen CRS listesi WMS/WFS GetCapabilities çıktısını etkiler. WMS GetMap'te CRS=EPSG:32635 kullanırken, CRS desteklenen listede olsun veya olmasın yeniden projek­siyon çalışır — geçerli herhangi bir EPSG kodu kabul edilir. Desteklenen liste, QGIS gibi istemcilere nelerin ilan edildiğini kontrol eder.

Data Sources

Data sources allow connecting to external databases (PostGIS) or remote services and publishing their layers.Veri kaynakları, harici veritabanlarına (PostGIS) veya uzak servislere bağlanmayı ve katmanlarını yayımlamayı sağlar.

PostGIS

# Create a PostGIS data source
curl -X POST http://localhost:8080/api/admin/datasources \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "postgis_prod",
    "type": "postgis",
    "host": "db.example.com",
    "port": 5432,
    "database": "geodata",
    "username": "geouser",
    "password": "secret",
    "schema": "public"
  }'

# Test the connection
curl -X POST -H "Authorization: Bearer $TOKEN" \
  http://localhost:8080/api/admin/datasources/postgis_prod/test

# List tables in the database
curl -H "Authorization: Bearer $TOKEN" \
  http://localhost:8080/api/admin/datasources/postgis_prod/tables

# Publish a table as a vector layer
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  http://localhost:8080/api/admin/datasources/postgis_prod/publish \
  -d '{"table": "buildings", "geometryColumn": "geom"}'

Monitoring & Metrics

Health Check

GET/health
Returns server status, layer counts, cache statistics, and JVM system info.Sunucu durumu, katman sayıları, önbellek istatistikleri ve JVM sistem bilgilerini döndürür.
{
  "status": "UP",
  "rasterLayers": 3,
  "vectorLayers": 5,
  "styles": 8,
  "cache": { "hits": 4821, "misses": 91, "memorySize": 512, "hitRate": 0.981 },
  "system": { "javaVersion": "21.0.1", "maxMemory": 2048, "uptime": 3600 }
}

Prometheus Metrics

GET/metrics
Returns metrics in Prometheus text format (version 0.0.4). Compatible with Grafana, Alertmanager.Prometheus metin formatında (sürüm 0.0.4) metrikleri döndürür. Grafana, Alertmanager ile uyumludur.
# HELP raster_server_raster_layers_total Number of loaded raster layers
# TYPE raster_server_raster_layers_total gauge
raster_server_raster_layers_total 3
# HELP raster_server_cache_hits_total Cache hits since startup
# TYPE raster_server_cache_hits_total counter
raster_server_cache_hits_total 4821
raster_server_cache_misses_total 91
raster_server_cache_size_tiles 512
raster_server_jvm_memory_used_mb 384
raster_server_uptime_seconds 3600

Prometheus scrape config

scrape_configs:
  - job_name: raster_server
    static_configs:
      - targets: ['localhost:8080']
    metrics_path: /metrics
    scrape_interval: 15s

Rate Limiting

When rate limiting is enabled, each IP is limited to rateLimitPerMinute requests on OGC endpoints and rateLimitAdminPerMinute on admin endpoints. Exceeded requests receive 429 Too Many Requests with a Retry-After: 60 header.Hız sınırlama etkinleştirildiğinde, her IP OGC uç noktalarında rateLimitPerMinute ve admin uç noktalarında rateLimitAdminPerMinute istekle sınırlıdır. Aşılan istekler 429 Too Many Requests ve Retry-After: 60 başlığı alır.

ECQL Filter Reference

ECQL (Extended Common Query Language) is used in CQL_FILTER (WMS/WFS) parameters for attribute and spatial filtering.ECQL (Genişletilmiş Ortak Sorgu Dili), nitelik ve mekansal filtreleme için CQL_FILTER (WMS/WFS) parametrelerinde kullanılır.

Comparison Operators

OperatorExample
=STATUS = 'active'
<>, !=STATUS <> 'deleted'
< > <= >=POPULATION >= 1000000
BETWEEN … ANDELEVATION BETWEEN 100 AND 500
IN (…)TYPE IN ('park', 'forest', 'lake')
LIKENAME LIKE 'İstanbul%'
IS NULLDESCRIPTION IS NULL
IS NOT NULLGEOM IS NOT NULL

Logical Operators

# AND
TYPE = 'building' AND FLOORS > 5

# OR
STATUS = 'active' OR STATUS = 'pending'

# NOT
NOT (STATUS = 'deleted')

# Grouped
(TYPE = 'residential' OR TYPE = 'commercial') AND AREA > 500

Spatial Operators

OperatorExample
BBOXBBOX(geom, 29, 41, 30, 42)
INTERSECTSINTERSECTS(geom, POLYGON((29 41, 30 41, 30 42, 29 42, 29 41)))
CONTAINSCONTAINS(geom, POINT(29.5 41.5))
WITHINWITHIN(geom, POLYGON(…))
DWITHINDWITHIN(geom, POINT(29.5 41.5), 500, meters)
EQUALSEQUALS(geom, POINT(29.5 41.5))
DISJOINTDISJOINT(geom, POLYGON(…))

Functions

# String functions
strToLowerCase(NAME) = 'ankara'
strConcat(FIRST_NAME, ' ', LAST_NAME) = 'Ahmet Yilmaz'

# Math functions
sqrt(AREA) > 100
abs(ELEVATION - 500) < 50

# Date functions
year(DATE_FIELD) = 2024
DATE_FIELD AFTER 2024-01-01T00:00:00Z

Configuration File

The main configuration is passed via config.json when launching the server:Ana yapılandırma, sunucu başlatılırken config.json aracılığıyla iletilir:

java -jar ugis.jar -conf config.json

config.json

{
  "port":             8080,
  "dataDirectory":    "data",
  "sldDirectory":     "sld",
  "cacheDirectory":   "cache",
  "maxCacheMemoryMB": 512,
  "serviceUrl":       "http://myserver.example.com",
  "corsOrigins": ["*"]
}
KeyDefaultDescription
port8080HTTP server port
dataDirectory"data"Directory for GeoTIFF and vector files
sldDirectory"sld"Directory for SLD style files
cacheDirectory"cache"Directory for disk tile cache
maxCacheMemoryMB512In-memory Caffeine LRU cache size (MB)
serviceUrl"http://localhost:8080"Public base URL (used in GetCapabilities)
corsOrigins["*"]Allowed CORS origins

Data Directory Layout

data/
├── dem.tif                   # → raster layer "dem"
├── dem_mosaic/               # → raster layer "dem_mosaic" (directory mosaic)
│   ├── tile_1.tif
│   └── tile_2.tif
├── buildings.shp             # → vector layer "buildings"
├── buildings.dbf
├── buildings.prj
└── roads.geojson             # → vector layer "roads"

sld/
├── terrain.sld               # → style "terrain"
└── categories/
    └── imar.sld              # → style "categories__imar"

Docker Compose

version: "3.8"
services:
  ugis:
    image: ugis:latest
    ports: ["8080:8080"]
    volumes:
      - ./data:/app/data
      - ./sld:/app/sld
      - ./cache:/app/cache
      - ./config:/app/config
    environment:
      - JAVA_OPTS=-Xmx2g

  postgis:
    image: postgis/postgis:15-3.3
    environment:
      POSTGRES_DB: geodata
      POSTGRES_USER: geouser
      POSTGRES_PASSWORD: secret

CSW — Catalog Service for the Web

OGC CSW 2.0.2 metadata catalog that exposes layer metadata as Dublin Core records. Enable in Settings.

GetCapabilities GET

GET /csw?service=CSW&request=GetCapabilities

GetRecords GET

GET /csw?service=CSW&request=GetRecords&ElementSetName=full
ParameterRequiredDescription
ElementSetNameoptionalbrief, summary, or full (default: summary)
ConstraintoptionalKeyword filter, e.g. AnyText LIKE '%dem%'
startPositionoptionalStart record index (default: 1)
maxRecordsoptionalMax records to return (default: 10)

GetRecordById GET

GET /csw?service=CSW&request=GetRecordById&Id=my-layer
💡 CSW must be enabled in Server Settings (cswEnabled: true). Layer metadata (title, abstract, bounds) is auto-generated from registered layers.

Print / PDF Export

Generate high-quality PDF map exports with title, north arrow, scale bar, and optional legend.

POST /api/print POST AUTH

POST /api/print
Generate a PDF map document. Returns application/pdf.

Request Body (JSON)

ParameterTypeDescription
layersrequiredArray of layer names. Use "layer:style" format for styled layers.
bboxrequiredBounding box [minX, minY, maxX, maxY]
crsoptionalCRS code (default: EPSG:4326)
widthoptionalMap image width in px (default: 1024)
heightoptionalMap image height in px (default: 768)
titleoptionalTitle text at the top of the PDF
pageSizeoptionalA4, A3, LETTER, LEGAL (default: A4)
orientationoptionalportrait or landscape (default: landscape)
dpioptionalOutput DPI (default: 150)
showLegendoptionalInclude legend image (default: false)

Example

POST /api/print
Authorization: Bearer <token>
Content-Type: application/json

{
  "layers": ["dem:terrain", "buildings"],
  "bbox": [28.5, 40.8, 29.5, 41.2],
  "title": "Istanbul DEM",
  "pageSize": "A4",
  "orientation": "landscape",
  "dpi": 150
}

Raster Analysis

Perform terrain analysis operations on DEM raster layers. Returns PNG images or JSON data.

Hillshade GET

GET /api/analysis/hillshade?layer=dem&bbox=28,40,30,42&width=512&height=512
Generate a shaded relief image using Horn's method.
ParameterRequiredDescription
layerrequiredRaster layer name (DEM)
bboxrequiredminX,minY,maxX,maxY
widthoptionalOutput width (default: 256)
heightoptionalOutput height (default: 256)
azimuthoptionalSun azimuth in degrees (default: 315)
altitudeoptionalSun altitude in degrees (default: 45)
crsoptionalCRS code (default: EPSG:4326)

Slope GET

GET /api/analysis/slope?layer=dem&bbox=28,40,30,42
Generate a slope map (green = flat, red = steep).

Aspect GET

GET /api/analysis/aspect?layer=dem&bbox=28,40,30,42
Generate an aspect map using HSB color wheel (direction each slope faces).

Elevation Profile POST

POST /api/analysis/profile
Extract elevation values along a polyline path. Returns JSON.

Request Body (JSON)

{
  "layer": "dem",
  "coordinates": [[28.5, 40.8], [29.0, 41.0], [29.5, 41.2]],
  "samples": 100
}

Response

{
  "profile": [
    { "distance": 0, "elevation": 125.5, "lon": 28.5, "lat": 40.8 },
    { "distance": 500, "elevation": 230.1, "lon": 28.55, "lat": 40.82 },
    ...
  ],
  "minElevation": 12.3,
  "maxElevation": 890.7,
  "totalDistance": 52340.5
}

Real-time Data (WebSocket / SSE)

Subscribe to live server events for layer changes, cache updates, seed progress, and system metrics.

WebSocket GET

WS ws://localhost:8080/ws
Full-duplex WebSocket connection for real-time events.

JavaScript Example

const ws = new WebSocket('ws://localhost:8080/ws');
ws.onmessage = (event) => {
    const msg = JSON.parse(event.data);
    console.log(msg.channel, msg.data);  // "layer-change", {...}
};

Server-Sent Events (SSE) GET

GET /api/events
SSE fallback for environments that don't support WebSocket.

JavaScript Example

const source = new EventSource('/api/events');
source.addEventListener('layer-change', (e) => {
    console.log(JSON.parse(e.data));
});
source.addEventListener('seed-progress', (e) => {
    console.log(JSON.parse(e.data));
});

Event Channels

ChannelDescription
layer-changeLayer added, updated, or removed
cache-updateCache cleared or invalidated
seed-progressTile seeding progress updates
metricsSystem metrics (request counts, memory)

External WMS Cascade

Proxy remote WMS servers through uGIS. Fetched tiles are cached locally for performance.

Admin API AUTH

GET /api/admin/external-wms
List all configured external WMS sources.
POST /api/admin/external-wms
Add a new external WMS source.
PUT /api/admin/external-wms/:name
Update an external WMS source.
DELETE /api/admin/external-wms/:name
Remove an external WMS source.

Configuration Fields

ParameterTypeDescription
namestringUnique identifier for the source
remoteUrlstringRemote WMS base URL
remoteLayersstringComma-separated remote layer names
remoteStylesstringRemote style names (optional)
remoteVersionstringWMS version (default: 1.1.1)
timeoutMsintRequest timeout in ms (default: 30000)

Example

POST /api/admin/external-wms
Authorization: Bearer <token>

{
  "name": "osm-wms",
  "remoteUrl": "https://ows.terrestris.de/osm/service",
  "remoteLayers": "OSM-WMS",
  "timeoutMs": 15000
}

Routing / Navigation

Proxy to an external OSRM routing backend for route calculation and isochrone generation. Enable in Settings.

Route GET

GET /api/route?from=28.97,41.01&to=29.05,41.08&profile=car
Calculate a route between two points. Returns GeoJSON.
ParameterRequiredDescription
fromrequiredStart point as lon,lat
torequiredEnd point as lon,lat
profileoptionalRouting profile: car, bike, foot (default from settings)

Isochrone GET

GET /api/isochrone?center=28.97,41.01&minutes=5,10,15
Generate isochrone polygons (reachability areas). Returns GeoJSON.
ParameterRequiredDescription
centerrequiredCenter point as lon,lat
minutesrequiredComma-separated travel time thresholds
profileoptionalRouting profile (default from settings)
💡 Routing requires an external OSRM backend. Configure routingBackendUrl in Server Settings (e.g. http://router.project-osrm.org).

OAuth2 / SSO

Single Sign-On via OpenID Connect / OAuth2 providers (Google, Azure AD, Keycloak, etc.). Enable and configure in Settings.

Login Flow

GET /api/admin/oauth2/login
Redirects to the OAuth2 provider's authorization page.
GET /api/admin/oauth2/callback?code=AUTH_CODE
Callback endpoint. Exchanges authorization code for tokens, creates session.

Settings

ParameterDescription
oauth2EnabledEnable OAuth2 login (boolean)
oauth2DiscoveryUrlOpenID Connect discovery URL (.well-known/openid-configuration)
oauth2ClientIdClient ID from your OAuth2 provider
oauth2ClientSecretClient secret
oauth2RedirectUriCallback URL (e.g. http://localhost:8080/api/admin/oauth2/callback)
oauth2DefaultRoleRole assigned to new OAuth2 users (default: viewer)
Users authenticated via OAuth2 are automatically created with the default role. Admins can later upgrade roles in the Admin Panel.

Workspaces

Multi-tenant workspace support for isolating layers and configurations per team or project.

Admin API AUTH

GET /api/admin/workspaces
List all workspaces.
POST /api/admin/workspaces
Create a new workspace.
PUT /api/admin/workspaces/:id
Update a workspace.
DELETE /api/admin/workspaces/:id
Delete a workspace.

Workspace Fields

ParameterTypeDescription
idstringUnique workspace identifier
titlestringDisplay title
ownerstringOwner username
membersarrayList of member usernames
isDefaultbooleanWhether this is the default workspace

Layer Groups — Hierarchical Tree

Layer groups support hierarchical nesting via the parent field. Use the tree endpoint to get the full nested structure.

Get Layer Group Tree GET

GET /api/layer-groups/tree
Returns all layer groups as a nested tree structure.

Response

[
  {
    "name": "base-maps",
    "title": "Base Maps",
    "layers": ["osm", "satellite"],
    "sortOrder": 0,
    "children": [
      {
        "name": "terrain",
        "title": "Terrain Maps",
        "layers": ["dem", "hillshade"],
        "sortOrder": 0
      }
    ]
  }
]

Layer Group Fields

ParameterTypeDescription
parentstringParent group name (null for root groups)
sortOrderintSort position within parent (default: 0)

GeoPackage & DXF Import

Upload GeoPackage and DXF/CAD files alongside existing GeoTIFF, GeoJSON, and Shapefile formats.

GeoPackage (.gpkg)

GeoPackage files are opened as vector data sources. Each feature type in the package is registered as a separate vector layer.

DXF (.dxf)

DXF (AutoCAD Drawing Exchange Format) files are automatically converted to GeoJSON on upload.

💡 DWG format is not supported (requires commercial libraries). Convert DWG to DXF using AutoCAD or a free converter before uploading.

CAD-Style Drawing Tools

The Map Viewer includes AutoCAD-inspired precision drawing tools alongside the standard annotation and GIS analysis features. These tools are accessible from the Draw panel's CAD Constraints section and the GIS Analysis > Line tools grid.Harita Görüntüleyici, standart çizim ve GIS analiz özelliklerinin yanı sıra AutoCAD'den ilham alan hassas çizim araçları içerir. Bu araçlara Çiz panelinin CAD Kısıtları bölümünden ve GIS Analiz > Çizgi araçları ızgarasından erişilebilir.

CAD Constraints

ToolShortcutDescription
OrthoOConstrains drawing to 0°/90°/180°/270° (cardinal directions only)Çizimi 0°/90°/180°/270° ile sınırlar (sadece ana yönler)
Angle LockALocks the bearing to a user-specified angle (e.g. 45°)Açıyı kullanıcının belirlediği değere kilitler (ör. 45°)
Dist LockDLocks each segment to a fixed distance (e.g. 100m)Her segmenti sabit mesafeye kilitler (ör. 100m)
Grid SnapGSnaps vertices to a meter-based grid. Shows grid overlay on the map. Configurable spacing (default 50m).Köşe noktalarını metre tabanlı ızgaraya yapıştırır. Haritada ızgara kaplaması gösterir. Aralık ayarlanabilir (varsayılan 50m).

Coordinate Input

Type coordinates directly into the input field below the CAD constraints. Keyboard shortcut: CCAD kısıtlarının altındaki giriş alanına koordinatları doğrudan yazın. Klavye kısayolu: C

FormatExampleDescription
lon, lat26.78, 39.21Absolute coordinate in WGS84. Adds vertex to active draw, or places a point if no draw active.WGS84'te mutlak koordinat. Aktif çizime köşe ekler veya çizim yoksa nokta koyar.
@dx,dy@100,50Relative offset in meters (east, north) from the last vertex. @100,0 = 100m east.Son köşeden metre cinsinden göreceli kayma (doğu, kuzey). @100,0 = 100m doğu.

Protractor (Angle Measurement)

Measures the angle formed by three points. Accessible via the Command Palette (Ctrl+K → "Protractor").Üç noktanın oluşturduğu açıyı ölçer. Komut Paletinden erişilebilir (Ctrl+K → "İletki").

Line Tools (GIS Analysis)

These tools operate on selected annotation drawings. Select features first, then click the tool button.Bu araçlar seçili çizim notları üzerinde çalışır. Önce nesneleri seçin, ardından araç düğmesine tıklayın.

ToolSelectionDescription
Extend2 lines2 çizgiExtends the 1st line along its last segment bearing until it meets the 2nd line.1. çizgiyi son segmentinin açısı boyunca 2. çizgiyle buluşana kadar uzatır.
Trim2 lines2 çizgiSplits the 1st line at its intersection with the 2nd line. Outputs colored segments so you can delete unwanted parts.1. çizgiyi 2. çizgiyle kesişim noktasında böler. İstenmeyen parçaları silebilmeniz için renkli segmentler çıkarır.
Bisector2 lines2 çizgiFinds the intersection of 2 lines and creates a bisector line at the average bearing angle.2 çizginin kesişimini bulur ve ortalama açıda açıortay çizgisi oluşturur.
Perpendicular1 point + 1 line1 nokta + 1 çizgiCreates a perpendicular line from the point to its nearest foot on the line. Shows distance.Noktadan çizgideki en yakın dik ayağına dik bir çizgi oluşturur. Mesafeyi gösterir.
Tangent1 point + 1 line1 nokta + 1 çizgiCreates a tangent line at the nearest point on the line, following the segment's bearing direction.Çizgideki en yakın noktada, segmentin açı yönünü izleyen bir teğet çizgi oluşturur.
Keyboard shortcuts summary: O Ortho · A Angle Lock · D Distance Lock · G Grid Snap · C Coordinate InputKlavye kısayolları özeti: O Ortho · A Açı Kilidi · D Mesafe Kilidi · G Izgara · C Koordinat Girişi