{"generatedAt":"2026-10-03T18:48:57.525Z","product":{"slug":"gis-analytics","name":"GIS & Analytics","summary":"Spatial data, analysis, maps, dashboards, and embeddable location intelligence.","stateModel":"hybrid","platforms":["REST","Web","Widgets","MCP"],"auth":{"type":"Workspace and resource-scoped access","guidance":"Keep immutable source data separate from derived layers; authorize reads and writes at workspace, dataset, and share boundaries."}},"ownership":{"classification":"hybrid-provider-application","boundary":"GIS & Analytics combines request/response capabilities with durable sessions, workspaces, releases, reviews, or agent runs. Persist the business journey independently from any one provider response.","applicationRule":"The application owns business identity, expected version, command idempotency, evidence receipts, audit, reconciliation, and downstream side effects even when Mappls owns provider resource state."},"coverage":{"slug":"gis-analytics","name":"GIS & Analytics","stateModel":"hybrid","ownership":"hybrid-provider-application","accent":"#17a8e3","journeyCount":1,"boundary":"GIS & Analytics combines request/response capabilities with durable sessions, workspaces, releases, reviews, or agent runs. Persist the business journey independently from any one provider response.","aggregates":["analysis run"],"journeySlugs":["governed-spatial-analysis"],"sampleSlugs":["retail-site-lab"],"tutorialSlugs":["gis-site-selection","webhook-reliability","geojson-operations-layer"],"useCaseSlugs":["field-service","energy-grid-resilience","retail-expansion","banking-address-risk","insurance-claims","hospital-care-logistics","emergency-response","smart-city-operations","aviation-ground-operations","agriculture-field-ops","mining-haulage-safety","telecom-network-care"],"contractSlugs":[],"sourceGuideSlugs":["mapmyindia-mgis-apis","mapmyindia-mgis-libraries","mappls-insight-sdk"],"totals":{"states":7,"transitions":6,"failurePlans":4,"durableRecords":4,"operationalSignals":6}},"controlLayers":[{"id":"identity","title":"Identity and aggregate boundary","question":"What durable thing is being operated?","implementation":"Use stable business and provider identifiers for analysis run; never infer identity from display text or the latest coordinates.","proof":"Duplicate creation, resource rebinding, tenant isolation, and retirement tests."},{"id":"authority","title":"Actor authority","question":"Who may advance each transition?","implementation":"Authorize every command against the named journey actors: Data engineer, Spatial analyst, Workspace administrator, Decision consumer. Persist the attributable actor, tenant, purpose, and policy decision.","proof":"Role, resource, tenant, purpose, and human-approval denial tests."},{"id":"commands","title":"Commands and concurrency","question":"How are retries and races made safe?","implementation":"Require a command idempotency key and expected aggregate version. Cache the canonical result, reject key reuse with different intent, and reconcile ambiguous timeouts before retry.","proof":"Exact replay, stale-version rejection, concurrent-writer, timeout, and restart tests."},{"id":"evidence","title":"Evidence and durable records","question":"What proves each state?","implementation":"Persist immutable receipts and revisions around these catalog records: Dataset version, Analysis attempt, Lineage manifest, Share policy. Keep event time, receipt time, source identity, hashes, and retention policy separate.","proof":"Missing, malformed, late, duplicate, conflicting, and redacted-evidence tests."},{"id":"events","title":"Events and side effects","question":"How do downstream systems learn what committed?","implementation":"Commit aggregate state, audit, and a transactional outbox together. Sign deliveries, bound retries, dead-letter exhaustions, and preserve delivery attempts without changing business history.","proof":"Atomic commit, signature, retry, lease fencing, dead-letter, replay, and ordering tests."},{"id":"recovery","title":"Recovery and reconciliation","question":"What happens when systems disagree?","implementation":"Treat timeouts as unknown outcomes, poll or consume authoritative evidence, compare versions, append a reconciliation decision, and use compensation instead of destructive history edits.","proof":"Provider timeout, callback-before-response, delayed event, outage, restart, and manual-recovery drills."},{"id":"privacy","title":"Privacy and human control","question":"Which data and decisions are sensitive?","implementation":"Minimize precise location and media, scope retention, redact derived data deliberately, and require attributable approval for dispatch, publication, access, closure, and destructive change where consequential.","proof":"Least-privilege, consent expiry, separation-of-duties, retention, export, revocation, and redaction tests."},{"id":"operations","title":"Operations and release","question":"Can operators see and recover the journey?","implementation":"Expose state age, source freshness, stuck commands, retries, reconciliation lag, outbox depth, terminal outcomes, and per-aggregate audit. Roll out behind explicit acceptance gates.","proof":"SLO alerts, support lookup, bulk reconciliation, rollback, backup restore, regional failover, and incident drills."}],"journeys":[{"slug":"governed-spatial-analysis","title":"Governed spatial analysis","eyebrow":"mGIS & Insight · asynchronous resource graph","productSlug":"gis-analytics","stateModel":"hybrid","summary":"Ingest versioned data, validate and publish it, execute reproducible analysis, review lineage, and share a governed decision layer.","aggregate":"analysis run","actors":["Data engineer","Spatial analyst","Workspace administrator","Decision consumer"],"sourceGuideSlugs":["mapmyindia-mgis-apis","mapmyindia-mgis-libraries","mappls-insight-sdk"],"contractSlugs":[],"sampleSlug":"retail-site-lab","states":[{"id":"draft","label":"Draft","meaning":"Inputs, schema, coordinate system, ownership, and processing intent are declared but not accepted.","recovery":"Keep uploads resumable and preserve the client dataset identity."},{"id":"validating","label":"Validating","meaning":"Format, schema, geometry, coordinate reference, limits, and policy are being checked.","recovery":"Return row- or feature-level diagnostics without discarding the original version."},{"id":"published","label":"Published","meaning":"An immutable dataset version is queryable with explicit workspace access and lineage.","recovery":"Create a corrected version rather than overwriting the published input."},{"id":"processing","label":"Processing","meaning":"An analysis job references fixed input versions, parameters, runtime, and output ownership.","recovery":"Retry from a durable job identity and checkpoint; never launch duplicate untracked computation."},{"id":"ready","label":"Ready","meaning":"Outputs, quality metrics, logs, lineage, and visualization metadata are complete.","recovery":"A failed visualization does not invalidate the output dataset; rebuild presentation independently."},{"id":"shared","label":"Shared","meaning":"A governed audience can view or embed a selected output version under explicit policy.","recovery":"Revoke the share without deleting the analysis or its audit history."},{"id":"failed","label":"Failed","meaning":"Validation or processing stopped with typed, attributable diagnostics and retained inputs.","recovery":"Fix intent or input and create a linked retry attempt.","terminal":true}],"transitions":[{"command":"create_dataset_version","actor":"Data engineer","from":[],"to":"draft","event":"dataset.version_created","idempotency":"Key by workspace, logical dataset, source hash, and intended version."},{"command":"validate","actor":"Spatial analyst","from":["draft"],"to":"validating","event":"dataset.validation_started","idempotency":"Reuse the same validation attempt for identical content and policy."},{"command":"publish","actor":"Workspace administrator","from":["validating"],"to":"published","event":"dataset.published","idempotency":"Commit immutable version and permissions atomically."},{"command":"run_analysis","actor":"Spatial analyst","from":["published","ready"],"to":"processing","event":"analysis.started","idempotency":"Hash input versions, parameters, runtime, and output owner."},{"command":"complete_analysis","actor":"Spatial processing service","from":["processing"],"to":"ready","event":"analysis.completed","idempotency":"One attempt identity can publish one immutable output manifest."},{"command":"create_share","actor":"Workspace administrator","from":["ready"],"to":"shared","event":"share.created","idempotency":"Key by output version, audience, policy, and expiry."}],"invariants":["Published input and output versions are immutable.","Every output records exact input versions, parameters, runtime, and actor.","Workspace authorization applies separately to source, job, output, visualization, and share.","A retry is linked to its previous attempt and never overwrites it.","Revoking a share does not destroy dataset or analysis lineage."],"records":[{"name":"Dataset version","purpose":"Immutable source or derived spatial asset.","keyFields":["datasetId","version","contentHash","crs","schema","owner"]},{"name":"Analysis attempt","purpose":"Reproducible execution and typed status.","keyFields":["analysisId","attempt","inputs","parameters","runtime","status"]},{"name":"Lineage manifest","purpose":"Auditable graph from source versions to outputs and shares.","keyFields":["outputVersion","inputVersions","operation","generatedAt","quality"]},{"name":"Share policy","purpose":"Audience, expiry, export, embedding, and revocation controls.","keyFields":["shareId","resourceVersion","audience","permissions","expiresAt"]}],"failures":[{"trigger":"Upload is interrupted","detection":"The client upload ID has incomplete acknowledged parts.","recovery":"Resume only missing parts and verify the final content hash before validation."},{"trigger":"Coordinate reference is missing or wrong","detection":"Extent, geometry validity, or known control points conflict with the declaration.","recovery":"Fail validation with actionable diagnostics; require an explicit corrected version."},{"trigger":"Analysis worker dies","detection":"Lease expires without a terminal attempt record.","recovery":"Resume from supported checkpoint or create a linked retry under the same analysis identity."},{"trigger":"Share is used after policy changes","detection":"Resource policy version or expiry no longer authorizes the audience.","recovery":"Deny access immediately, record the decision, and require a newly authorized share."}],"observability":["Upload completeness, validation failures, and feature-level error rate","Queue, execution, and total analysis time","Input/output size and spatial operation cost","Retry, cancellation, and orphaned-job rate","Lineage completeness and reproducibility checks","Share access, export, denial, expiry, and revocation"],"website":"/journeys/governed-spatial-analysis"}],"evidence":{"contracts":[],"guides":[{"slug":"mapmyindia-mgis-apis","title":"Mappls mGIS APIs","summary":"Using these APIs developers can fully leverage and embed the power of GeoSpatial Analytics, GIS and location intelligence and AI. These APIs allow a developer to integrate into their own application the power and full set of functionalities of the mGIS product and platform.","kind":"REST API","maturity":"legacy","platforms":["REST"],"website":"/reference/mapmyindia-mgis-apis"},{"slug":"mapmyindia-mgis-libraries","title":"Mapmyindia MGIS Libraries","summary":"A Mappls guide for maps, gis analytics, widgets deep links, capture feedback.","kind":"Guide","maturity":"legacy","platforms":["Unspecified"],"website":"/reference/mapmyindia-mgis-libraries"},{"slug":"mappls-insight-sdk","title":"Mappls Insight Embeddable Visualizations","summary":"Mappls advanced analytics engine: Insight transforms raw data into impactful visualizations and interactive dashboards, easily shared and embedded.","kind":"SDK","maturity":"current","platforms":["Web"],"website":"/reference/mappls-insight-sdk"}],"samples":[{"slug":"retail-site-lab","name":"Retail Site Lab","description":"Compare candidate sites through immutable dataset versions, reproducible scoring, lineage, and governed sharing.","stack":["Node.js","Browser UI","mGIS adapter","Insight lineage"],"implementation":"full-stack-reference","verifiedTestCount":8,"downloadPath":"/downloads/retail-site-lab.zip","website":"/samples/retail-site-lab"}],"tutorials":[{"slug":"gis-site-selection","title":"Build a reproducible site-selection model","outcome":"A governed retail expansion analysis.","level":"Advanced","duration":"2 hr","website":"/tutorials/gis-site-selection"},{"slug":"webhook-reliability","title":"Consume Mappls events exactly once in effect","outcome":"A production webhook ingestion pipeline.","level":"Advanced","duration":"55 min","website":"/tutorials/webhook-reliability"},{"slug":"geojson-operations-layer","title":"Render a governed GeoJSON operations layer","outcome":"An accessible map layer whose visual state is reproducible from source data.","level":"Intermediate","duration":"55 min","website":"/tutorials/geojson-operations-layer"}],"useCases":[{"slug":"field-service","title":"Dispatch the right technician, with the right proof","industry":"Utilities","outcome":"Higher first-time-fix rates and auditable work from dispatch through customer sign-off.","website":"/use-cases/field-service"},{"slug":"energy-grid-resilience","title":"Restore the grid from alarm to verified service","industry":"Energy","outcome":"Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk.","website":"/use-cases/energy-grid-resilience"},{"slug":"retail-expansion","title":"Choose the next store with evidence","industry":"Retail","outcome":"Faster site screening and investment decisions grounded in a reusable spatial model.","website":"/use-cases/retail-expansion"},{"slug":"banking-address-risk","title":"Make address risk explainable","industry":"Financial services","outcome":"More straight-through approvals with a clear audit trail for ambiguous or high-risk addresses.","website":"/use-cases/banking-address-risk"},{"slug":"insurance-claims","title":"Evidence-led claims from incident to settlement","industry":"Insurance","outcome":"Faster, more consistent claims decisions with tamper-aware spatial evidence.","website":"/use-cases/insurance-claims"},{"slug":"hospital-care-logistics","title":"Coordinate time-critical care without losing custody","industry":"Healthcare","outcome":"Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody.","website":"/use-cases/hospital-care-logistics"},{"slug":"emergency-response","title":"Route coordinated response under pressure","industry":"Public safety","outcome":"Reduced time to scene and safer decisions across dispatch, responders, and command.","website":"/use-cases/emergency-response"},{"slug":"smart-city-operations","title":"A living operations map for the city","industry":"Government","outcome":"One governed view from daily operations to infrastructure investment planning.","website":"/use-cases/smart-city-operations"},{"slug":"aviation-ground-operations","title":"Run a safe, punctual airport turnaround","industry":"Aviation","outcome":"More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams.","website":"/use-cases/aviation-ground-operations"},{"slug":"agriculture-field-ops","title":"Coordinate field operations across every plot","industry":"Agriculture","outcome":"Less travel and better traceability for inspection, inputs, harvest, and compliance.","website":"/use-cases/agriculture-field-ops"},{"slug":"mining-haulage-safety","title":"Move material safely across a changing mine","industry":"Mining","outcome":"Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses.","website":"/use-cases/mining-haulage-safety"},{"slug":"telecom-network-care","title":"Operate the network from tower to doorstep","industry":"Telecommunications","outcome":"Faster restoration with better prioritization and fewer repeat dispatches.","website":"/use-cases/telecom-network-care"}]},"releaseGates":["Every command has tenant, actor, purpose, idempotency, expected-version, and authorization evidence.","Every state transition has an objective evidence rule and an explicit recovery path.","Provider and business identities remain distinct, versioned, and reconcilable.","Timeout, retry, duplicate, late, out-of-order, conflict, restart, and outage paths are tested.","Sensitive location, media, identity, and operational evidence has consent, access, retention, and redaction policy.","Audit and outbox commit atomically; signing, delivery, dead-letter, replay, and lease fencing are verified.","Operators can find one aggregate, explain its state, repair safely, and prove who acted.","Live Mappls entitlement, quota, regional behavior, callbacks, and exact provider contracts are validated before production."],"handoffs":{"website":"https://developer.mappls.com/tools/stateful?product=gis-analytics","api":"https://developer.mappls.com/api/stateful-plan?product=gis-analytics","console":"https://developer.mappls.com/console/apps","resource":"mappls://catalog/stateful","tool":"mappls_plan_stateful_integration"},"credentialRule":"The planner accepts no credential, token, secret, precise location, media, or provider resource identifier."}