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
| Service | Version | Base URL | Description |
|---|---|---|---|
| WMS | 1.1.1 / 1.3.0 | /wms | Map images, raster + vectorHarita görüntüleri, raster + vektör |
| WFS | 2.0 | /wfs | Feature data (GeoJSON, GML, KML, SHP)Özellik verileri (GeoJSON, GML, KML, SHP) |
| WMTS | 1.0.0 | /wmts | Tiled map service (KVP + RESTful)Döşemeli harita servisi (KVP + RESTful) |
| TMS/XYZ | — | /tms/{layer}/{z}/{x}/{y}.png | XYZ tile pyramidXYZ tile piramidi |
| WCS | 2.0.1 | /wcs | Raw raster download (GeoTIFF)Ham raster indirme (GeoTIFF) |
| MVT | — | /mvt/{layer}/{z}/{x}/{y}.pbf | Mapbox Vector Tiles (PBF)Mapbox Vektör Karoları (PBF) |
Supported Data Sources
- Raster: GeoTIFF, Cloud-Optimized GeoTIFF (COG), DEM, mosaic directories
- Vector: Shapefile (.shp), GeoJSON, PostGIS (via JDBC), remote WFS/WMS
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
- Layer → Add Layer → Add WMS/WMTS LayerKatman → Katman Ekle → WMS/WMTS Katmanı Ekle
- New connection: URL =
http://localhost:8080/wmsYeni bağlantı: URL =http://localhost:8080/wms - 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
| Role | Permissions |
|---|---|
| viewer | Read public APIs (layers, styles, capabilities)Herkese açık API'leri oku (katmanlar, stiller, yetenekler) |
| editor | viewer + upload files, create/update layers and stylesviewer + dosya yükle, katman ve stil oluştur/güncelle |
| admin | editor + 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
| Parameter | Required | Example | Description |
|---|---|---|---|
| SERVICE | required | WMS | Must be WMS |
| REQUEST | required | GetMap | Must be GetMap |
| VERSION | optional | 1.3.0 | WMS version (1.1.1 or 1.3.0) |
| LAYERS | required | dem,imar | Comma-separated layer names; rendered back-to-front |
| STYLES | optional | terrain, | Comma-separated style names (empty = default) |
| CRS / SRS | required | EPSG:4326 | Coordinate reference system |
| BBOX | required | 29,41,30,42 | minX,minY,maxX,maxY in CRS units |
| WIDTH | required | 512 | Image width in pixels (max 4096) |
| HEIGHT | required | 512 | Image height in pixels (max 4096) |
| FORMAT | optional | image/png | Output format: image/png or image/jpeg |
| TRANSPARENT | optional | TRUE | Enable alpha transparency (PNG only) |
| TIME | optional | 2024-01-15 | Temporal filter for vector layers (see below) |
| SLD_BODY | optional | <StyledLayerDescriptor>…</StyledLayerDescriptor> | Inline SLD XML, overrides registered styles |
| CQL_FILTER | optional | IMAR_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
| Format | Example | Meaning |
|---|---|---|
| ISO date | 2024-01-15 | Exact date match |
| ISO datetime | 2024-01-15T12:00:00Z | Exact moment |
| Date range | 2024-01-01/2024-12-31 | Inclusive range |
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
| Parameter | Required | Description |
|---|---|---|
| LAYER | required | Layer name |
| STYLE | optional | Style name (default if omitted) |
| FORMAT | optional | image/png |
| WIDTH / HEIGHT | optional | Swatch size (default 20×20) |
| RULE | optional | Filter legend to a single named rule |
| SCALE | optional | Scale 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
| Parameter | Required | Example | Description |
|---|---|---|---|
| TYPENAME | required | imar_planlari | Layer name |
| OUTPUTFORMAT | optional | application/json | Output format (see below) |
| MAXFEATURES / COUNT | optional | 1000 | Max features returned |
| STARTINDEX | optional | 0 | Pagination offset |
| CQL_FILTER | optional | IMAR_SINIFI='K' | ECQL attribute filter |
| BBOX | optional | 29,41,30,42,EPSG:4326 | Spatial bbox filter |
| SRSNAME | optional | EPSG:3857 | Reproject output to this CRS |
| SORTBY | optional | ALAN D | Sort field + direction (A/D) |
| PROPERTYNAME | optional | IMAR_SINIFI,ALAN | Limit returned attributes |
Output Formats
| OUTPUTFORMAT value | Content-Type | Description |
|---|---|---|
application/json | application/json | GeoJSON FeatureCollection |
application/gml+xml | application/gml+xml | GML 3.2 FeatureCollection |
text/xml | text/xml | GML (legacy) |
application/vnd.google-earth.kml+xml | application/vnd.google-earth.kml+xml | KML |
application/zip | application/zip | Shapefile ZIP |
text/csv | text/csv | CSV (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 type | Example |
|---|---|
| Equality | IMAR_SINIFI = 'K' |
| Comparison | ALAN > 5000 |
| AND / OR | IMAR_SINIFI = 'K' AND ALAN > 1000 |
| IN list | IMAR_SINIFI IN ('K', 'T', 'Y') |
| LIKE | ADI LIKE '%Konut%' |
| IS NULL | ACIKLAMA IS NULL |
| BETWEEN | ALAN BETWEEN 1000 AND 5000 |
| Bbox spatial | BBOX(the_geom, 29, 41, 30, 42) |
| INTERSECTS | INTERSECTS(the_geom, POLYGON((29 41, 30 41, 30 42, 29 42, 29 41))) |
| WITHIN distance | DWITHIN(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).
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.
# 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 } });
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
| Type | Behavior |
|---|---|
| PUBLIC | Anyone can access — no token required. This is the default.Herkes erişebilir — token gerekmez. Bu varsayılandır. |
| ROLE | Only 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. |
| USER | Only 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
# 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
- The middleware extracts layer name(s) from each request (query params or path)Middleware her istekten katman adlarını çıkarır (sorgu parametreleri veya yol)
- If a
Bearertoken is present, the user's role is resolved via AuthServiceBearer token varsa, kullanıcının rolü AuthService aracılığıyla çözülür - Layers without a permission entry are treated as
PUBLICİzin kaydı olmayan katmanlar PUBLIC olarak değerlendirilir - When access is denied, a 403 JSON error is returnedErişim reddedildiğinde, 403 JSON hatası döndürülür
- WMS multi-layer requests (
LAYERS=dem,rivers) require access to all listed layersWMS çoklu katman istekleri listelenen tüm katmanlara erişim gerektirir - The
adminrole always has access regardless of the permission settingAdmin rolü izin ayarından bağımsız olarak her zaman erişime sahiptir
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
| Parameter | Type | Description |
|---|---|---|
| limit | optional | Max entries to return (default 50, max 500) |
| offset | optional | Pagination offset (default 0) |
| username | optional | Filter by username |
| layer | optional | Filter by layer name |
| action | optional | Filter by action type (e.g. WMS_GETMAP) |
| from | optional | Start timestamp (ISO 8601) |
| to | optional | End 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
| Action | Trigger |
|---|---|
| WMS_GETMAP | WMS GetMap requestWMS GetMap isteği |
| WMS_GETCAPABILITIES | WMS GetCapabilitiesWMS GetCapabilities |
| WMS_GETFEATUREINFO | WMS GetFeatureInfoWMS GetFeatureInfo |
| WMS_GETLEGENDGRAPHIC | WMS GetLegendGraphicWMS GetLegendGraphic |
| WFS_GETFEATURE | WFS GetFeatureWFS GetFeature |
| WFS_GETCAPABILITIES | WFS GetCapabilitiesWFS GetCapabilities |
| WFS_TRANSACTION | WFS-T TransactionWFS-T Transaction |
| WMTS_GETTILE | WMTS GetTile (KVP or RESTful)WMTS GetTile (KVP veya RESTful) |
| WMTS_GETCAPABILITIES | WMTS GetCapabilitiesWMTS GetCapabilities |
| TMS_TILE | TMS/XYZ tile requestTMS/XYZ tile isteği |
| MVT_TILE | MVT vector tile requestMVT vektör tile isteği |
| WCS_GETCOVERAGE | WCS GetCoverageWCS GetCoverage |
| ADMIN_LOGIN | Admin login attemptAdmin giriş denemesi |
| ADMIN_SETTINGS | Settings read/writeAyarlar okuma/yazma |
| ADMIN_PERMISSIONS | Permission managementİzin yönetimi |
Storage
- In-memory: Ring buffer (last 10,000 entries) for fast API queriesBellek içi: Hızlı API sorguları için ring buffer (son 10.000 giriş)
- On-disk:
logs/audit.login JSON Lines format (one JSON object per line)Diskte:logs/audit.logJSON Lines formatında (satır başına bir JSON nesnesi) - Flush interval: Every 5 seconds (write buffer to disk)Temizleme aralığı: Her 5 saniyede bir (arabelleği diske yaz)
- Retention: Daily cleanup removes entries older than
auditRetentionDaysSaklama: Günlük temizlikauditRetentionDays'ten eski girişleri kaldırır
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
| Type | Description |
|---|---|
ramp | Smooth linear interpolation between color entriesRenk girişleri arasında düzgün doğrusal enterpolasyon |
intervals | Flat color for each interval (class maps)Her aralık için düz renk (sınıf haritaları) |
values | Exact pixel value match (classification maps)Tam piksel değeri eşleşmesi (sınıflandırma haritaları) |
ContrastEnhancement Methods
| SLD Element | Effect |
|---|---|
<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
_ are preview-only (not saved to disk).# 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
Vector Layers
?format=zip.{"timeColumn":"date_field"} to enable WMS TIME filtering.File Upload
# 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
# 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}
Server Settings
# 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
| Field | Type | Default | Description |
|---|---|---|---|
| wmsEnabled | boolean | true | Enable/disable WMS service |
| wfsEnabled | boolean | true | Enable/disable WFS service |
| wmtsEnabled | boolean | true | Enable/disable WMTS service |
| tmsEnabled | boolean | true | Enable/disable TMS service |
| wcsEnabled | boolean | true | Enable/disable WCS service |
| wmsMaxWidth | integer | 4096 | Max image width (pixels) |
| wmsMaxHeight | integer | 4096 | Max image height (pixels) |
| wfsDefaultMaxFeatures | integer | 1000 | Default feature limit per request |
| wfsMaxAllowedFeatures | integer | 100000 | Hard cap on features per request |
| exportMaxFeatures | integer | 50000 | Max features for file export |
| cacheEnabled | boolean | true | Enable tile caching |
| cacheTtlMinutes | integer | 60 | Cache TTL in minutes |
| rateLimitEnabled | boolean | false | Enable IP-based rate limiting |
| rateLimitPerMinute | integer | 1000 | OGC requests per IP per minute |
| rateLimitAdminPerMinute | integer | 200 | Admin API requests per IP per minute |
| auditEnabled | boolean | false | Enable request audit logging |
| auditRetentionDays | integer | 30 | Days to keep audit log entries |
| serviceTitle | string | "uGIS" | Service title in GetCapabilities |
| serviceAbstract | string | "" | Service description |
| maxUploadSizeMB | integer | 2048 | Max file upload size (MB) |
| supportedCrs | string[] | ["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.
# 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} } ]
# 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"
# 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} } }
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 projeksiyon ç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
{
"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
# 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
| Operator | Example |
|---|---|
= | STATUS = 'active' |
<>, != | STATUS <> 'deleted' |
< > <= >= | POPULATION >= 1000000 |
BETWEEN … AND | ELEVATION BETWEEN 100 AND 500 |
IN (…) | TYPE IN ('park', 'forest', 'lake') |
LIKE | NAME LIKE 'İstanbul%' |
IS NULL | DESCRIPTION IS NULL |
IS NOT NULL | GEOM 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
| Operator | Example |
|---|---|
BBOX | BBOX(geom, 29, 41, 30, 42) |
INTERSECTS | INTERSECTS(geom, POLYGON((29 41, 30 41, 30 42, 29 42, 29 41))) |
CONTAINS | CONTAINS(geom, POINT(29.5 41.5)) |
WITHIN | WITHIN(geom, POLYGON(…)) |
DWITHIN | DWITHIN(geom, POINT(29.5 41.5), 500, meters) |
EQUALS | EQUALS(geom, POINT(29.5 41.5)) |
DISJOINT | DISJOINT(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": ["*"]
}
| Key | Default | Description |
|---|---|---|
| port | 8080 | HTTP server port |
| dataDirectory | "data" | Directory for GeoTIFF and vector files |
| sldDirectory | "sld" | Directory for SLD style files |
| cacheDirectory | "cache" | Directory for disk tile cache |
| maxCacheMemoryMB | 512 | In-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
GetRecords GET
| Parameter | Required | Description |
|---|---|---|
| ElementSetName | optional | brief, summary, or full (default: summary) |
| Constraint | optional | Keyword filter, e.g. AnyText LIKE '%dem%' |
| startPosition | optional | Start record index (default: 1) |
| maxRecords | optional | Max records to return (default: 10) |
GetRecordById GET
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
application/pdf.Request Body (JSON)
| Parameter | Type | Description |
|---|---|---|
| layers | required | Array of layer names. Use "layer:style" format for styled layers. |
| bbox | required | Bounding box [minX, minY, maxX, maxY] |
| crs | optional | CRS code (default: EPSG:4326) |
| width | optional | Map image width in px (default: 1024) |
| height | optional | Map image height in px (default: 768) |
| title | optional | Title text at the top of the PDF |
| pageSize | optional | A4, A3, LETTER, LEGAL (default: A4) |
| orientation | optional | portrait or landscape (default: landscape) |
| dpi | optional | Output DPI (default: 150) |
| showLegend | optional | Include 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
| Parameter | Required | Description |
|---|---|---|
| layer | required | Raster layer name (DEM) |
| bbox | required | minX,minY,maxX,maxY |
| width | optional | Output width (default: 256) |
| height | optional | Output height (default: 256) |
| azimuth | optional | Sun azimuth in degrees (default: 315) |
| altitude | optional | Sun altitude in degrees (default: 45) |
| crs | optional | CRS code (default: EPSG:4326) |
Slope GET
Aspect GET
Elevation Profile POST
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
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
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
| Channel | Description |
|---|---|
| layer-change | Layer added, updated, or removed |
| cache-update | Cache cleared or invalidated |
| seed-progress | Tile seeding progress updates |
| metrics | System metrics (request counts, memory) |
External WMS Cascade
Proxy remote WMS servers through uGIS. Fetched tiles are cached locally for performance.
Admin API AUTH
Configuration Fields
| Parameter | Type | Description |
|---|---|---|
| name | string | Unique identifier for the source |
| remoteUrl | string | Remote WMS base URL |
| remoteLayers | string | Comma-separated remote layer names |
| remoteStyles | string | Remote style names (optional) |
| remoteVersion | string | WMS version (default: 1.1.1) |
| timeoutMs | int | Request 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
| Parameter | Required | Description |
|---|---|---|
| from | required | Start point as lon,lat |
| to | required | End point as lon,lat |
| profile | optional | Routing profile: car, bike, foot (default from settings) |
Isochrone GET
| Parameter | Required | Description |
|---|---|---|
| center | required | Center point as lon,lat |
| minutes | required | Comma-separated travel time thresholds |
| profile | optional | Routing profile (default from settings) |
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
Settings
| Parameter | Description |
|---|---|
| oauth2Enabled | Enable OAuth2 login (boolean) |
| oauth2DiscoveryUrl | OpenID Connect discovery URL (.well-known/openid-configuration) |
| oauth2ClientId | Client ID from your OAuth2 provider |
| oauth2ClientSecret | Client secret |
| oauth2RedirectUri | Callback URL (e.g. http://localhost:8080/api/admin/oauth2/callback) |
| oauth2DefaultRole | Role assigned to new OAuth2 users (default: viewer) |
Workspaces
Multi-tenant workspace support for isolating layers and configurations per team or project.
Admin API AUTH
Workspace Fields
| Parameter | Type | Description |
|---|---|---|
| id | string | Unique workspace identifier |
| title | string | Display title |
| owner | string | Owner username |
| members | array | List of member usernames |
| isDefault | boolean | Whether 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
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
| Parameter | Type | Description |
|---|---|---|
| parent | string | Parent group name (null for root groups) |
| sortOrder | int | Sort 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.
- Upload via the Admin Panel drag-and-drop zone or
POST /api/layers/upload - Multiple feature types per file are supported
- Layer names follow the pattern:
filename_featuretype
DXF (.dxf)
DXF (AutoCAD Drawing Exchange Format) files are automatically converted to GeoJSON on upload.
- Supported entities:
LINE,POLYLINE,LWPOLYLINE,CIRCLE,ARC - Closed polylines become Polygon geometries
- Circles are approximated with 64-vertex polygons
- Arcs are converted to 32-point LineStrings
- Entity properties (layer, color, type) are preserved as feature attributes
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
| Tool | Shortcut | Description |
|---|---|---|
| Ortho | O | Constrains drawing to 0°/90°/180°/270° (cardinal directions only)Çizimi 0°/90°/180°/270° ile sınırlar (sadece ana yönler) |
| Angle Lock | A | Locks the bearing to a user-specified angle (e.g. 45°)Açıyı kullanıcının belirlediği değere kilitler (ör. 45°) |
| Dist Lock | D | Locks each segment to a fixed distance (e.g. 100m)Her segmenti sabit mesafeye kilitler (ör. 100m) |
| Grid Snap | G | Snaps 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
| Format | Example | Description |
|---|---|---|
lon, lat | 26.78, 39.21 | Absolute 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,50 | Relative 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").
- Click A — ray 1 endpointA tıkla — 1. ışın ucu
- Click B — the vertex (angle measured here)B tıkla — köşe noktası (açı burada ölçülür)
- Click C — ray 2 endpointC tıkla — 2. ışın ucu
- Shows angle with arc visualization and supplement angle in the command lineYay görselleştirmesi ile açıyı ve komut satırında bütünler açıyı gösterir
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.
| Tool | Selection | Description |
|---|---|---|
| Extend | 2 lines2 çizgi | Extends 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. |
| Trim | 2 lines2 çizgi | Splits 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. |
| Bisector | 2 lines2 çizgi | Finds 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. |
| Perpendicular | 1 point + 1 line1 nokta + 1 çizgi | Creates 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. |
| Tangent | 1 point + 1 line1 nokta + 1 çizgi | Creates 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. |
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