{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Map","description":"Accelerate E&P application development and protect your innovation by consuming our Data and Domain APIs / Platform APIs.","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":true,"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"map","__idx":0},"children":["Map"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"introduction","__idx":1},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#intro"},"children":["#"]}," Introduction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This overview describes the software architecture for MapJS. The basic classes and settings designed to facilitate the implementation of Maps are described below."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"map-widget","__idx":2},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#widget"},"children":["#"]}," Map Widget"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Map widget is the core component to display a single map. It stores one or more data layers, synchronizes the views (including conversion to one coordinate system) and renders it on top of each other. So, to display a map at least one layer should be created and added to the widget."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.map.map.html"},"children":["Map Widget"]}," - widget to draw a map and control global settings (common to all map layers), such as zoom speed, initial view or tooltip usage details."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"layers","__idx":3},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#Layers"},"children":["#"]}," Layers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Any layer represents geographic information from different servers, of different types or differently processed. The data of one layer has a common z-index, so if one elements must be on top of the others, it is worth separating it into two layers."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There are four main types of layers with different kind of displayed objects: Image, Tile, Vector and Shape."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.abstractlayer.abstractlayer.html"},"children":["Abstract layer"]}," - abstract class, parent for all the layers. Implement it to create your custom layer."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.image.image.html"},"children":["Image"]}," - the simplest type of layer that draws a single image received from a server. Varieties (inheritors) of this case are ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.wms.wms.html"},"children":["WMS"]}," and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.arcgisimage.arcgisimage.html"},"children":["ArcGISImage"]}," layers, that are able to handle the appropriate type of server"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.tile.tile.html"},"children":["Tile"]}," - class for layers that consists of a several pictures (tiles) painted next to each other and thus forming the resulting image. Use 'formatterfunction' property to set url to the tiles of required server or the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.bing.bing.html"},"children":["Bing"]}," inheritor that connects to Bing Map servers automatically"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.abstractfeaturelayer.abstractfeaturelayer.html"},"children":["Abstract feature layer"]}," - abstract class for all the layers that display information presented as a bunch of features - polygons, linestrings and points. It provides settings for processing and filtering vector data, ability to add special annotations, tooltip and so on"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.template.template.html"},"children":["Template"]}," - inheritor of the AbstractFeatureLayer that allows you to flexibly customize the display styles of vector data using feature ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.templates.basetemplate.basetemplate.html"},"children":["templates"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.vector.vector.html"},"children":["Vector"]}," - base class for the most of the feature layers, which provides various modes of data requests. Its inheritors allows to parse vector data from different formats or receive it from a certain server"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.geojson.geojson.html"},"children":["GeoJSON"]}," - layer that receives features from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://en.wikipedia.org/wiki/GeoJSON"},"children":["GeoJSON"]}," format"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.kml.kml.html"},"children":["KML"]}," - layer that receives features from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://en.wikipedia.org/wiki/Keyhole_Markup_Language"},"children":["KML"]}," format"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.csv.csv.html"},"children":["CSV"]}," - layer that receives features from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.mapbox.com/help/define-csv/"},"children":["CSV"]}," format"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.georss.georss.html"},"children":["GeoRSS"]}," - layer that receives features from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://en.wikipedia.org/wiki/GeoRSS"},"children":["GeoRSS"]}," format"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.arcgisfeature.arcgisfeature.html"},"children":["ArcGIS feature layer"]}," - layer that receives data from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"http://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-feature-service-.htm"},"children":["ArcGIS feature service"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.stream.stream.html"},"children":["Stream"]}," - layer that receives data from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"http://enterprise.arcgis.com/en/geoevent/latest/process-event-data/stream-services.htm"},"children":["ArcGIS Stream service"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.vectortile.vectortile.html"},"children":["VectorTile"]}," - vector layer that receives data from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"http://enterprise.arcgis.com/en/server/latest/publish-services/linux/vector-tile-services.htm"},"children":["ArcGIS Vector tile service"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.wfs.wfs.html"},"children":["WFS"]}," - layer that receives data from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://en.wikipedia.org/wiki/Web_Feature_Service"},"children":["Web Feature Service"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.shape.shape.html"},"children":["Shape layer"]}," - the fourth type of layer that copies the functionality of the Vector, but instead of features it displays shapes — features combined with its drawing style. This approach increases consumed memory, but makes it simpler and easier to use. Besides, not all objects can be represented by a point, polyline or polygon (for example, a bezier curve), which makes this layer more universal for some special cases"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"features","__idx":4},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#Features"},"children":["#"]}," Features"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Feature is a vector object with point, polyline or polygon geometry and some other (non-spatial) attributes. Feature layers can be used both as additional information on top of another layers or by itself if it covers the entire space. Features can be created and added to the layer by user or be automatically parsed with the drawing styles from different formats."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.abstractfeature.abstractfeature.html"},"children":["Abstract feature"]}," - represents abstract feature class. Feature must have an ID, Geometry and additional (non-spatial) properties."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.point.point.html"},"children":["Point"]}," - feature with point geometry"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.linestring.linestring.html"},"children":["LineString"]}," - feature with polyline geometry"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.polygon.polygon.html"},"children":["Polygon"]}," - feature with polygon geometry"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.multipoint.multipoint.html"},"children":["MultiPoint"]}," - feature with multiple points geometry"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.multilinestring.multilinestring.html"},"children":["MultiLineString"]}," - feature with multiple polylines geometry"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.multipolygon.multipolygon.html"},"children":["MultiPolygon"]}," - feature with multiple polygons geometry"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.aggregation.aggregation.html"},"children":["Aggregation"]}," - feature that represents aggregation of multiple points, is created by ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.converters.aggregator.aggregator.html"},"children":["Aggregator"]}," data converter (if used)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.templates.basetemplate.basetemplate.html"},"children":["Base template"]}," - class defining feature rendering styles for the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.layers.template.template.html"},"children":["Template"]}," layer and its inheritors. Use ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.templates.point.point.html"},"children":["Point"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.templates.linestring.linestring.html"},"children":["LineString"]}," or ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.features.templates.polygon.polygon.html"},"children":["Polygon"]}," template for appropriate feature style."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"coordinate-systems","__idx":5},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#CoordinateSystems"},"children":["#"]}," Coordinate Systems"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Any layer data has some coordinates and there are many coordinate systems. Therefore, in order to draw different layers on one map, the data must be converted to one system. For this purpose, transformers and coordinate systems from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/modules/geotoolkit.map.coordinatesystems.html"},"children":["geotoolkit/map/coordinatesystems"]}," are used. It contains information about how the coordinates are set in each case and thus can convert from one system to another."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.abstractsystem.abstractsystem.html"},"children":["Abstract system"]}," - abstract class for any coordinate system. Implement it to create your custom system"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.latlon.latlon.html"},"children":["LatLon"]}," - specifies the Geographic (latitude/longitude) coordinate system"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.utm.utm.html"},"children":["UTM"]}," - the UTM (Universal Transverse Mercator) coordinate system. Specify the time zone and hemisphere to use it"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.webmercator.webmercator.html"},"children":["WebMercator"]}," - the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://en.wikipedia.org/wiki/World_Geodetic_System"},"children":["WGS 84 (World Geodetic System)"]}," coordinate system"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.wkt.wkt.html"},"children":["WKT"]}," - universal coordinate system formed on provided parameters that are based on ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"http://docs.opengeospatial.org/is/12-063r5/12-063r5.html"},"children":["WKT (Well-Known Text)"]}," format"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.registry.registry.html"},"children":["Registry"]}," - registry for all coordinate systems. Use it to get the required system by ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"http://epsg.io/"},"children":["epsg code"]}," or register your own coordinate systems if it's not supported yet"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.map.coordinatesystems.transformer.transformer.html"},"children":["Transformer"]}," - after initial and target coordinate systems are set, provides the ability to convert data from one to another"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"sources","__idx":6},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#Sources"},"children":["#"]}," Sources"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every layer has one or more data source. One source loads data from a single origin: server or file. This allows data obtained from different places to be displayed and processed on a single layer."]},{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/source_architecture.ecdab9545a9b692cdba2cb43089e423667c051e151f9aeec124cff03d2d7b77a.9a207424.png"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"server-requests","__idx":7},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/map/overview/maps#Server"},"children":["#"]}," Server requests"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A map source loads server settings (such as total limits, data coordinate system, rendering styles, etc.), then queries data from it and sends parsed response back to the layer to be rendered:"]},{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/server-settings.ca63679e1311f83a3e667a352c398926e9e8fd16f6d92215b393600243a419f8.9a207424.png"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After the settings are loaded, source turns directly to the data request mode. Requested areas depends on the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/enums/geotoolkit.map.features.querymode.querymode.html#.QueryMode"},"children":["QueryMode"]}," that is used. The diagram below explains how the Server Data is rendered to the map:"]},{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/server-data-load.8caa8d0ec13b480d4658491fc31e18c3a54af2121749de84075dec41df0ccb33.9a207424.png"},"children":[]}]},"headings":[{"value":"Map","id":"map","depth":1},{"value":"Introduction","id":"introduction","depth":3},{"value":"Map Widget","id":"map-widget","depth":3},{"value":"Layers","id":"layers","depth":3},{"value":"Features","id":"features","depth":3},{"value":"Coordinate Systems","id":"coordinate-systems","depth":3},{"value":"Sources","id":"sources","depth":3},{"value":"Server requests","id":"server-requests","depth":3}],"frontmatter":{"title":"Map","seo":{"title":"Map"}},"lastModified":"2026-02-11T19:54:32.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/geotoolkit/programmers-guide/architecture-overview/maps","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}