geospatial-analytics-ai999x — offline, verified geospatial analytics solver with step-by-step answers

Install · Capability guide · Evaluation · AI999X on Hugging Face · Website · Support: Buy Me a Coffee

License: Apache-2.0 · Author: Ibnul Jaif Farabi (creator and engineer) · Organization: AI999X · Version 1.0.0

Field: Geospatial · Tasks: Question Answering, Token Classification, Text Classification, Sentence Similarity, Feature Extraction

geospatial-analytics-ai999x is an offline, deterministic Python solver that answers geospatial analytics questions with verified results from 99 certified capabilities, gives 615 documented answers identically on Windows and Linux, and refuses rather than guesses when an answer cannot be verified.

geospatial-analytics-ai999x is a compact, deterministic geospatial analytics engine for Python. It reads a question in plain English (or a typed call), picks a certified geospatial analytics capability, computes the answer exactly, checks it, and returns the result with its steps, units, LaTeX and assumptions — or an honest refusal that says what is missing. It runs fully offline on any CPU, needs no GPU, no API key and no internet, and is built to give zero wrong answers: when it is not sure, it refuses instead of guessing.

Buy me a coffee License Python Offline

Highlights

  • Verified, not generated. Every answer is computed by a certified geospatial analytics capability and checked (substituted back, dimension-checked or compared with an independent computation) before it is returned.
  • Zero wrong answers by design. Seven explicit outcomes — SOLVED, NEEDS_INPUT, AMBIGUOUS, INVALID_INPUT, OUT_OF_SCOPE, UNRECOGNIZED_FORMAT, INTERNAL_ERROR — never a silent guess. Every one of its 615 documented answers is reproduced exactly on every tested platform.
  • Plain-English questions and a guaranteed typed interface. ask() reads documented question forms; solve(capability_id, **inputs) always solves a supported task with valid inputs.
  • Explains itself. Steps, formulas in LaTeX, units, assumptions and the model used, ready for notebooks, tutoring apps and homework checkers.
  • Small and portable. Pure Python (sympy, mpmath); identical answers on Windows and Linux (Python 3.10, 3.11, 3.12, 3.13, 3.14).
  • Coverage: ellipsoidal geodesy, coordinates and map projections, spatial statistics and geostatistics, remote sensing, terrain analysis, and urban and network analysis.

Model overview

Property Value
Package geospatial-analytics-ai999x 1.0.0 (import geospatial_analytics_ai999x)
Type Deterministic neuro-symbolic geospatial analytics engine (rule-based reading + certified symbolic capabilities)
Capabilities 99 certified procedures
Knowledge pack version 1.0.0
Golden answers 615 documented answers, identical on every tested platform
Platforms tested Windows (Python 3.13), Linux x86-64 (Python 3.10, 3.11, 3.12, 3.13, 3.14)
Runtime CPU only, offline; no GPU, no network, no API key
License Apache-2.0
Creator / engineer Ibnul Jaif Farabi
Organization AI999X

Quickstart

pip install geospatial-analytics-ai999x
# or straight from this repository:
pip install https://huggingface.co/AI999X/geospatial-analytics-ai999x/resolve/main/dist/geospatial_analytics_ai999x-1.0.0-py3-none-any.whl
import geospatial_analytics_ai999x as geospatial_analytics

geospatial_analytics.ask("Geodesic destination: lat1 = 52.2, lon1 = 0.12, azimuth = 45, distance = 100 km, ellipsoid = WGS84").show()
# -> SOLVED — lat2 = 52.8308, lon2 = 1.16915, azimuth2 = 45.8325  (geo_geodesic_destination)
geospatial_analytics.ask("UTM forward: lat = 51.5, lon = -0.13, ellipsoid = WGS84").show()
# -> SOLVED — easting = 699196, northing = 5.70934e+06, k = 1.00009, gamma = 2.24682  (geo_utm_forward)
geospatial_analytics.ask("Geodesic polygon area: lats = [48.0, 49.5, 47.2], lons = [2.0, 4.5, 6.1], ellipsoid = GRS80").show()
# -> SOLVED — area = 3.36697e+10, perimeter = 850958  (geo_geodesic_polygon_area)
geospatial_analytics.ask("Vegetation indices: red = 0.08, nir = 0.45, blue = 0.04, L = 0.5").show()
# -> SOLVED — NDVI = 0.698113, EVI = 0.567485, SAVI = 0.538835, OSAVI = 0.536232  (geo_vegetation_indices)
geospatial_analytics.solve("geo_morans_i", y=[8, 6, 6, 3, 2, 1], W=[[0, 1, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 1, 0]], transform="row").show()
# -> SOLVED — I = 0.65625, EI = -0.2, VI_norm = 0.140952, z_norm = 2.28068  (geo_morans_i)
geospatial_analytics.ask("Who created you?").message
# -> geospatial-analytics-ai999x was created and engineered by Ibnul Jaif Farabi at AI999X.

Command line: geospatial-analytics-ai999x "<question>", geospatial-analytics-ai999x --capabilities. The outputs above were produced by running this exact code on geospatial-analytics-ai999x 1.0.0.

How every answer is verified

  1. Reading — the question is turned into typed quantities (value, unit, kind, role) and one asked quantity; every stated number must be used or the question is refused.
  2. Planning — only certified capabilities may answer; a capability applies only under the conditions the wording states (for example a pendulum, a liquid at rest, boiling).
  3. Computing — exact symbolic or high-precision numeric evaluation.
  4. Checking — dimensions, substitution back into the defining equation, and agreement between independent readings; any disagreement becomes a refusal, never a number.

Capabilities are certified before they ship: each must reproduce hand-worked reference cases, reject a deliberately wrong variant (a control), and leave every benchmark answer unchanged.

Capabilities

99 certified procedures. A few of them:

  • Procedures: Albers equal-area conic projection: coordinates and scale factors; Arc length along a parallel of latitude; Area and perimeter of a geodesic polygon on the ellipsoid; Area of a latitude-longitude cell on the ellipsoid; At-sensor brightness temperature from thermal radiance; Auxiliary latitudes: geocentric, reduced, conformal, authalic and rectifying; Azimuthal equidistant projection (ellipsoidal, geodesic); Bivariate Moran's I (spatial cross-correlation); Closest facility for every node of a network; D8 flow accumulation of a small DEM; D8 flow direction of every cell of a small DEM; Decimal degrees to degrees, minutes and seconds; Decode a geohash: cell centre and size; Degrees, minutes and seconds to decimal degrees; Destination along a rhumb line (loxodrome) on the ellipsoid; Discrete Frechet distance between two polylines; Distance-band spatial weights; Douglas-Peucker line simplification; Empirical (Matheron) semivariogram in distance bins; Equirectangular (equidistant cylindrical / plate carree) projection; Fit an exponential or Gaussian variogram model (nugget, partial sill, range); Geary's C spatial autocorrelation with normal and randomization inference; Geocentric (ECEF) to geodetic coordinates; Geodesic destination point on the ellipsoid (direct problem) …

geospatial_analytics_ai999x.templates() lists every question form ask() reads; the capability guide (PDF, every example executed) is included in this repository.

All 99 formulas

Show every formula, by topic

Cartography

Ground distance from a map distance and a representative fraction

D=d×S D = d \times S

Map scale (representative fraction) from a map and a ground distance

S=Dd,RF=1S S = \frac{D}{d},\quad RF = \frac{1}{S}

Coordinate notation

Decimal degrees to degrees, minutes and seconds

d=⌊∣x∣⌋,m=⌊60(∣x∣−d)⌋,s=3600(∣x∣−d−m60) d = \lfloor\vert x\vert \rfloor,\quad m = \lfloor60(\vert x\vert - d)\rfloor,\quad s = 3600\left(\vert x\vert - d - \tfrac{m}{60}\right)

Decode a geohash: cell centre and size

[φmin,φmax]×[λmin,λmax] by alternate bisection [\varphi_{min}, \varphi_{max}] \times [\lambda_{min}, \lambda_{max}] \ \text{by alternate bisection}

Degrees, minutes and seconds to decimal degrees

φ=±(d+m60+s3600) \varphi = \pm\left(d + \frac{m}{60} + \frac{s}{3600}\right)

Geohash of a point and its cell

bits=λ1φ1λ2φ2…,character=base32(5 bits) \text{bits} = \lambda_1\varphi_1\lambda_2\varphi_2\ldots,\quad \text{character} = \text{base32}(5\ \text{bits})

MGRS grid reference of a point (1 m)

MGRS=z B C100kR100k ⌊E⌋  105 ⌊N⌋  105 \text{MGRS} = z\,B\,C_{100k}R_{100k}\,\lfloor E\rfloor \bmod 10^5\,\lfloor N\rfloor \bmod 10^5

Coordinate systems and conversions

Auxiliary latitudes: geocentric, reduced, conformal, authalic and rectifying

tan⁡ψ=(1−e2)tan⁡φ, tan⁡β=(1−f)tan⁡φ, χ=gd⁡ψiso, ξ=arcsin⁡qqp, μ=π2m(φ)m(π/2) \tan\psi = (1-e^2)\tan\varphi,\ \tan\beta = (1-f)\tan\varphi,\ \chi = \operatorname{gd}\psi_{iso},\ \xi = \arcsin\frac{q}{q_p},\ \mu = \frac{\pi}{2}\frac{m(\varphi)}{m(\pi/2)}

Geocentric (ECEF) to geodetic coordinates

φ=atan2⁡ ⁣(Z+e2Nsin⁡φ, X2+Y2),h=pcos⁡φ+Zsin⁡φ−a2N \varphi = \operatorname{atan2}\!\left(Z + e^2N\sin\varphi,\ \sqrt{X^2+Y^2}\right),\quad h = p\cos\varphi + Z\sin\varphi - \frac{a^2}{N}

Geodetic to geocentric (ECEF) coordinates

X=(N+h)cos⁡φcos⁡λ, Y=(N+h)cos⁡φsin⁡λ, Z=(N(1−e2)+h)sin⁡φ X = (N+h)\cos\varphi\cos\lambda,\ Y = (N+h)\cos\varphi\sin\lambda,\ Z = \left(N(1-e^2)+h\right)\sin\varphi

Geodetic to local east-north-up (ENU) coordinates

[enu]=[−sin⁡λ0cos⁡λ00−sin⁡φ0cos⁡λ0−sin⁡φ0sin⁡λ0cos⁡φ0cos⁡φ0cos⁡λ0cos⁡φ0sin⁡λ0sin⁡φ0][ΔXΔYΔZ] \begin{bmatrix}e\\n\\u\end{bmatrix} = \begin{bmatrix}-\sin\lambda_0 & \cos\lambda_0 & 0\\ -\sin\varphi_0\cos\lambda_0 & -\sin\varphi_0\sin\lambda_0 & \cos\varphi_0\\ \cos\varphi_0\cos\lambda_0 & \cos\varphi_0\sin\lambda_0 & \sin\varphi_0\end{bmatrix}\begin{bmatrix}\Delta X\\ \Delta Y\\ \Delta Z\end{bmatrix}

Local east-north-up (ENU) to geodetic coordinates

X=X0+RT(φ0,λ0) [e n u]T \mathbf{X} = \mathbf{X}_0 + R^{T}(\varphi_0,\lambda_0)\,[e\ n\ u]^{T}

Look angles: azimuth, elevation and range from an observer to a target

A=atan2⁡(e,n),ε=atan2⁡ ⁣(u,e2+n2) A = \operatorname{atan2}(e, n),\quad \varepsilon = \operatorname{atan2}\!\left(u, \sqrt{e^2+n^2}\right)

UTM zone, latitude band and central meridian

z=⌊λ+180∘6∘⌋+1,λ0=6z−183∘ z = \left\lfloor\frac{\lambda + 180^\circ}{6^\circ}\right\rfloor + 1,\quad \lambda_0 = 6z - 183^\circ

Ellipsoidal geodesy

Arc length along a parallel of latitude

s=N(φ)cos⁡φ ∣Δλ∣,N=a1−e2sin⁡2φ s = N(\varphi)\cos\varphi\,\vert \Delta\lambda\vert ,\quad N = \frac{a}{\sqrt{1-e^2\sin^2\varphi}}

Area and perimeter of a geodesic polygon on the ellipsoid

S=−∮a22[q(φ)−q(φc)]dλ,q(φ)=(1−e2)[sin⁡φ1−e2sin⁡2φ+artanh⁡(esin⁡φ)e] S = -\oint \frac{a^2}{2}\left[q(\varphi) - q(\varphi_c)\right]d\lambda,\quad q(\varphi) = (1-e^2)\left[\frac{\sin\varphi}{1-e^2\sin^2\varphi} + \frac{\operatorname{artanh}(e\sin\varphi)}{e}\right]

Area of a latitude-longitude cell on the ellipsoid

A=a22[q(φ2)−q(φ1)](λ2−λ1) A = \frac{a^2}{2}\left[q(\varphi_2) - q(\varphi_1)\right](\lambda_2 - \lambda_1)

Destination along a rhumb line (loxodrome) on the ellipsoid

m2=m1+scos⁡α,Δλ=tan⁡α (ψ2−ψ1) m_2 = m_1 + s\cos\alpha,\quad \Delta\lambda = \tan\alpha\,(\psi_2 - \psi_1)

Geodesic destination point on the ellipsoid (direct problem)

sb=∫σ1σ21+k2sin⁡2σ dσ,λ12=ω12−fsin⁡α0∫σ1σ22−f1+(1−f)1+k2sin⁡2σ dσ \frac{s}{b} = \int_{\sigma_1}^{\sigma_2}\sqrt{1 + k^2\sin^2\sigma}\,d\sigma,\quad \lambda_{12} = \omega_{12} - f\sin\alpha_0\int_{\sigma_1}^{\sigma_2}\frac{2-f}{1 + (1-f)\sqrt{1+k^2\sin^2\sigma}}\,d\sigma

Meridian arc length between two latitudes

m(φ)=a1+n[(1+n24+n464)φ−32(n−n38)sin⁡2φ+1516(n2−n44)sin⁡4φ−3548n3sin⁡6φ+315512n4sin⁡8φ] m(\varphi) = \frac{a}{1+n}\left[\left(1+\tfrac{n^2}{4}+\tfrac{n^4}{64}\right)\varphi - \tfrac32\left(n-\tfrac{n^3}{8}\right)\sin2\varphi + \tfrac{15}{16}\left(n^2-\tfrac{n^4}{4}\right)\sin4\varphi - \tfrac{35}{48}n^3\sin6\varphi + \tfrac{315}{512}n^4\sin8\varphi\right]

Midpoint of a geodesic on the ellipsoid

Pmid=direct(P1, α1, s12/2) P_{mid} = \mathrm{direct}\left(P_1,\ \alpha_1,\ s_{12}/2\right)

Radii of curvature of the ellipsoid at a latitude

M=a(1−e2)(1−e2sin⁡2φ)3/2,N=a1−e2sin⁡2φ,RG=MN M = \frac{a(1-e^2)}{(1-e^2\sin^2\varphi)^{3/2}},\quad N = \frac{a}{\sqrt{1-e^2\sin^2\varphi}},\quad R_G = \sqrt{MN}

Rhumb-line (loxodrome) distance and bearing on the ellipsoid

tan⁡α=ΔλΔψ,s=Δmcos⁡α,ψ=arsinh⁡(tan⁡φ)−eartanh⁡(esin⁡φ) \tan\alpha = \frac{\Delta\lambda}{\Delta\psi},\quad s = \frac{\Delta m}{\cos\alpha},\quad \psi = \operatorname{arsinh}(\tan\varphi) - e\operatorname{artanh}(e\sin\varphi)

Facility location

Closest facility for every node of a network

f∗(i)=arg⁡min⁡f∈Fd(i,f) f^*(i) = \arg\min_{f\in F} d(i, f)

Maximal covering location problem (MCLP) on a network

max⁡S⊆C,∣S∣=p ∑iwi 1[min⁡j∈Sdij≤s] \max_{S\subseteq C,\vert S\vert = p}\ \sum_i w_i\,\mathbf 1\left[\min_{j\in S}d_{ij}\le s\right]

p-median facility location on a network

min⁡S⊆C,∣S∣=p ∑iwimin⁡j∈Sdij \min_{S\subseteq C, \vert S\vert = p}\ \sum_i w_i\min_{j\in S} d_{ij}

Geostatistics

Empirical (Matheron) semivariogram in distance bins

γ^(hk)=12Nk∑(i,j)∈k(zi−zj)2 \hat\gamma(h_k) = \frac{1}{2N_k}\sum_{(i,j)\in k}(z_i - z_j)^2

Fit an exponential or Gaussian variogram model (nugget, partial sill, range)

γ(h)=c0+c(1−e−3h/a) or c0+c(1−e−(7h/4a)2),min⁡c0,c,a∑k(γ^k−γ(hk))2 \gamma(h) = c_0 + c\left(1 - e^{-3h/a}\right)\ \text{or}\ c_0 + c\left(1 - e^{-(7h/4a)^2}\right),\quad \min_{c_0, c, a}\sum_k\left(\hat\gamma_k - \gamma(h_k)\right)^2

Inverse distance weighted (IDW) interpolation at a point

z^(p)=∑idi−pzi∑idi−p \hat z(\mathbf p) = \frac{\sum_i d_i^{-p}z_i}{\sum_i d_i^{-p}}

Ordinary kriging estimate and kriging variance at a point

[Γ11T0][λμ]=[γ01],z^=λTz,σOK2=λTγ0+μ \begin{bmatrix}\Gamma & \mathbf 1\\ \mathbf 1^T & 0\end{bmatrix}\begin{bmatrix}\boldsymbol\lambda\\ \mu\end{bmatrix} = \begin{bmatrix}\boldsymbol\gamma_0\\ 1\end{bmatrix},\quad \hat z = \boldsymbol\lambda^T\mathbf z,\quad \sigma^2_{OK} = \boldsymbol\lambda^T\boldsymbol\gamma_0 + \mu

Polynomial trend surface (first or second order) by least squares

z=b0+b1x+b2y [+ b3x2+b4xy+b5y2] z = b_0 + b_1x + b_2y\ \left[+\, b_3x^2 + b_4xy + b_5y^2\right]

Map projections

Albers equal-area conic projection: coordinates and scale factors

n=m12−m22q2−q1,ρ=aC−nqn,x=FE+ρsin⁡θ, y=FN+ρ0−ρcos⁡θ, k=ρnam=1h n = \frac{m_1^2 - m_2^2}{q_2 - q_1},\quad \rho = \frac{a\sqrt{C - nq}}{n},\quad x = FE + \rho\sin\theta,\ y = FN + \rho_0 - \rho\cos\theta,\ k = \frac{\rho n}{am} = \frac1h

Azimuthal equidistant projection (ellipsoidal, geodesic)

x=FE+s12sin⁡α1,y=FN+s12cos⁡α1 x = FE + s_{12}\sin\alpha_1,\quad y = FN + s_{12}\cos\alpha_1

Equirectangular (equidistant cylindrical / plate carree) projection

x=R(λ−λ0)cos⁡φts,y=R(φ−φ0) x = R(\lambda-\lambda_0)\cos\varphi_{ts},\quad y = R(\varphi-\varphi_0)

Gnomonic projection (sphere)

x=Rcos⁡φsin⁡Δλcos⁡c,y=R(cos⁡φ0sin⁡φ−sin⁡φ0cos⁡φcos⁡Δλ)cos⁡c x = \frac{R\cos\varphi\sin\Delta\lambda}{\cos c},\quad y = \frac{R\left(\cos\varphi_0\sin\varphi - \sin\varphi_0\cos\varphi\cos\Delta\lambda\right)}{\cos c}

Inverse Albers equal-area conic projection

q=C−ρ2n2/a2n,φ: q(φ)=q,λ=λ0+θn q = \frac{C - \rho^2n^2/a^2}{n},\quad \varphi:\ q(\varphi) = q,\quad \lambda = \lambda_0 + \frac{\theta}{n}

Inverse Lambert conformal conic projection (two standard parallels)

ρ=sgn⁡(n)x′2+(ρ0−y′)2,t=(ρaF)1/n,λ=λ0+θn \rho = \operatorname{sgn}(n)\sqrt{x'^2 + (\rho_0 - y')^2},\quad t = \left(\frac{\rho}{aF}\right)^{1/n},\quad \lambda = \lambda_0 + \frac{\theta}{n}

Inverse Mercator projection (ellipsoidal)

ψ=yk0a,τ′=sinh⁡ψ,τ=tan⁡φ: τ1+σ2−σ1+τ2=τ′ \psi = \frac{y}{k_0a},\quad \tau' = \sinh\psi,\quad \tau = \tan\varphi:\ \tau\sqrt{1+\sigma^2} - \sigma\sqrt{1+\tau^2} = \tau'

Lambert azimuthal equal-area projection (ellipsoidal)

B=Rq21+sin⁡β1sin⁡β+cos⁡β1cos⁡βcos⁡Δλ, x=BDcos⁡βsin⁡Δλ, y=BD(cos⁡β1sin⁡β−sin⁡β1cos⁡βcos⁡Δλ) B = R_q\sqrt{\frac{2}{1 + \sin\beta_1\sin\beta + \cos\beta_1\cos\beta\cos\Delta\lambda}},\ x = BD\cos\beta\sin\Delta\lambda,\ y = \frac{B}{D}\left(\cos\beta_1\sin\beta - \sin\beta_1\cos\beta\cos\Delta\lambda\right)

Lambert conformal conic projection (two standard parallels): coordinates, scale factor and convergence

n=ln⁡m1−ln⁡m2ln⁡t1−ln⁡t2, ρ=aFtn, x=FE+ρsin⁡θ, y=FN+ρ0−ρcos⁡θ, k=ρnam n = \frac{\ln m_1 - \ln m_2}{\ln t_1 - \ln t_2},\ \rho = aFt^n,\ x = FE + \rho\sin\theta,\ y = FN + \rho_0 - \rho\cos\theta,\ k = \frac{\rho n}{am}

Lambert cylindrical equal-area projection (sphere)

x=R(λ−λ0)cos⁡φs,y=Rsin⁡φcos⁡φs x = R(\lambda-\lambda_0)\cos\varphi_s,\quad y = \frac{R\sin\varphi}{\cos\varphi_s}

Latitude and longitude to UTM coordinates (with scale factor and convergence)

E=500 000+0.9996 Aη,N=N0+0.9996 Aξ E = 500\,000 + 0.9996\,A\eta,\quad N = N_0 + 0.9996\,A\xi

Latitude and longitude to Web Mercator (EPSG:3857)

x=Rλ,y=Rln⁡tan⁡(π4+φ2),R=6378137 m x = R\lambda,\quad y = R\ln\tan\left(\frac{\pi}{4} + \frac{\varphi}{2}\right),\quad R = 6378137\ \mathrm{m}

Mercator projection (ellipsoidal): coordinates and scale factor

x=k0a(λ−λ0),y=k0a[arsinh⁡(tan⁡φ)−eartanh⁡(esin⁡φ)],k=k01−e2sin⁡2φcos⁡φ x = k_0a(\lambda-\lambda_0),\quad y = k_0a\left[\operatorname{arsinh}(\tan\varphi) - e\operatorname{artanh}(e\sin\varphi)\right],\quad k = \frac{k_0\sqrt{1-e^2\sin^2\varphi}}{\cos\varphi}

Mollweide equal-area projection (sphere)

2θ+sin⁡2θ=πsin⁡φ,x=22πR Δλcos⁡θ,y=2Rsin⁡θ 2\theta + \sin2\theta = \pi\sin\varphi,\quad x = \frac{2\sqrt2}{\pi}R\,\Delta\lambda\cos\theta,\quad y = \sqrt2R\sin\theta

Orthographic projection (sphere)

x=Rcos⁡φsin⁡Δλ,y=R(cos⁡φ0sin⁡φ−sin⁡φ0cos⁡φcos⁡Δλ) x = R\cos\varphi\sin\Delta\lambda,\quad y = R\left(\cos\varphi_0\sin\varphi - \sin\varphi_0\cos\varphi\cos\Delta\lambda\right)

Polar stereographic projection (standard parallel): coordinates and scale factor

ρ=a mcttc,t=e−ψ,x=FE+ρsin⁡Δλ, y=FN∓ρcos⁡Δλ,k=ρam \rho = a\,m_c\frac{t}{t_c},\quad t = e^{-\psi},\quad x = FE + \rho\sin\Delta\lambda,\ y = FN \mp \rho\cos\Delta\lambda,\quad k = \frac{\rho}{am}

Sinusoidal equal-area projection (ellipsoidal)

x=acos⁡φ1−e2sin⁡2φ(λ−λ0),y=m(φ) x = \frac{a\cos\varphi}{\sqrt{1-e^2\sin^2\varphi}}(\lambda - \lambda_0),\quad y = m(\varphi)

Tissot's indicatrix: scale factors and distortion of a projection at a point

a′=h2+k2+2hksin⁡θ′, b′=h2+k2−2hksin⁡θ′, a=a′+b′2, b=a′−b′2, ω=2arcsin⁡a−ba+b, s=hksin⁡θ′ a' = \sqrt{h^2+k^2+2hk\sin\theta'},\ b' = \sqrt{h^2+k^2-2hk\sin\theta'},\ a = \tfrac{a'+b'}{2},\ b = \tfrac{a'-b'}{2},\ \omega = 2\arcsin\frac{a-b}{a+b},\ s = hk\sin\theta'

Transverse Mercator projection: coordinates, scale factor and grid convergence

ξ=ξ′+∑j=16αjsin⁡2jξ′cosh⁡2jη′,η=η′+∑j=16αjcos⁡2jξ′sinh⁡2jη′,x=FE+k0Aη, y=FN+k0A(ξ−ξ0) \xi = \xi' + \sum_{j=1}^{6}\alpha_j\sin2j\xi'\cosh2j\eta',\quad \eta = \eta' + \sum_{j=1}^{6}\alpha_j\cos2j\xi'\sinh2j\eta',\quad x = FE + k_0A\eta,\ y = FN + k_0A(\xi - \xi_0)

UTM coordinates to latitude and longitude

ξ′=ξ−∑j=16βjsin⁡2jξcosh⁡2jη,η′=η−∑j=16βjcos⁡2jξsinh⁡2jη \xi' = \xi - \sum_{j=1}^{6}\beta_j\sin2j\xi\cosh2j\eta,\quad \eta' = \eta - \sum_{j=1}^{6}\beta_j\cos2j\xi\sinh2j\eta

Web Mercator (EPSG:3857) to latitude and longitude

φ=arctan⁡sinh⁡yR,λ=xR \varphi = \arctan\sinh\frac{y}{R},\quad \lambda = \frac{x}{R}

Web-map tile (slippy map / XYZ) and quadkey containing a point

xt=⌊2z λ+180∘360∘⌋,yt=⌊2z(12−arsinh⁡(tan⁡φ)2π)⌋ x_t = \left\lfloor 2^z\,\frac{\lambda + 180^\circ}{360^\circ}\right\rfloor,\quad y_t = \left\lfloor 2^z\left(\frac12 - \frac{\operatorname{arsinh}(\tan\varphi)}{2\pi}\right)\right\rfloor

Network accessibility

Gravity-based (Hansen) accessibility on a road network

Ai=∑j≠iOj f(dij),f(d)=d−β or e−βd A_i = \sum_{j\ne i} O_j\,f(d_{ij}),\quad f(d) = d^{-\beta}\ \text{or}\ e^{-\beta d}

Network connectivity indices: cyclomatic number, alpha, beta and gamma

μ=e−v+p,α=e−v+p2v−5,β=ev,γ=e3(v−2) \mu = e - v + p,\quad \alpha = \frac{e - v + p}{2v - 5},\quad \beta = \frac{e}{v},\quad \gamma = \frac{e}{3(v-2)}

Network detour index (circuity) between two nodes

DI=dnet(o,t)∥xo−xt∥ DI = \frac{d_{net}(o, t)}{\lVert\mathbf x_o - \mathbf x_t\rVert}

Network service area (isochrone) of a facility

SA(s,c)={v:d(s,v)≤c} SA(s, c) = \{v : d(s, v) \le c\}

Shimbel accessibility index of every node

Ai=∑jdij,D(G)=∑iAi A_i = \sum_j d_{ij},\quad D(G) = \sum_i A_i

Two-step floating catchment area (2SFCA) accessibility

Rj=Sj∑k:dkj≤d0Pk,Ai=∑j:dij≤d0Rj R_j = \frac{S_j}{\sum_{k: d_{kj}\le d_0}P_k},\quad A_i = \sum_{j: d_{ij}\le d_0}R_j

Planar vector analysis

Discrete Frechet distance between two polylines

ci,j=max⁡(d(Pi,Qj), min⁡(ci−1,j, ci−1,j−1, ci,j−1)) c_{i,j} = \max\left(d(P_i, Q_j),\ \min(c_{i-1,j},\ c_{i-1,j-1},\ c_{i,j-1})\right)

Douglas-Peucker line simplification

dmax=max⁡kdist⁡(Pk,PiPj‾)>ε⇒keep Pk d_{max} = \max_k \operatorname{dist}(P_k, \overline{P_iP_j}) > \varepsilon \Rightarrow \text{keep } P_k

Shape compactness indices of a polygon (Polsby-Popper, Schwartzberg, convex hull, Reock)

PP=4πAP2,S=P2πA,CH=AAhull,R=Aπrmec2 PP = \frac{4\pi A}{P^2},\quad S = \frac{P}{2\sqrt{\pi A}},\quad C_H = \frac{A}{A_{hull}},\quad R = \frac{A}{\pi r_{mec}^2}

Point pattern analysis

Kernel density estimate of a point pattern at a location

f^(p)=1n∑iKh(∥p−xi∥),Khgauss=e−u2/22πh2, Khepa=2(1−u2)πh2, Khunif=1πh2 \hat f(\mathbf p) = \frac1n\sum_i K_h(\lVert\mathbf p - \mathbf x_i\rVert),\quad K^{gauss}_h = \frac{e^{-u^2/2}}{2\pi h^2},\ K^{epa}_h = \frac{2(1-u^2)}{\pi h^2},\ K^{unif}_h = \frac{1}{\pi h^2}

Mean centre and standard distance of a point pattern

SD=∑i(xi−xˉ)2+(yi−yˉ)2n SD = \sqrt{\frac{\sum_i (x_i - \bar x)^2 + (y_i - \bar y)^2}{n}}

Nearest-neighbour index (Clark-Evans ratio) of a point pattern

R=dˉobs0.5/n/A,z=dˉobs−dˉexp0.26136/n2/A R = \frac{\bar d_{obs}}{0.5/\sqrt{n/A}},\quad z = \frac{\bar d_{obs} - \bar d_{exp}}{0.26136/\sqrt{n^2/A}}

Quadrat analysis: chi-square test of complete spatial randomness

χ2=∑c(Oc−E)2E,E=nnxny,VMR=χ2nxny−1 \chi^2 = \sum_{c}\frac{(O_c - E)^2}{E},\quad E = \frac{n}{n_xn_y},\quad VMR = \frac{\chi^2}{n_xn_y - 1}

Ripley's K and L functions of a point pattern

K^(d)=An2∑i≠j1(dij<d),L(d)=K(d)/π \hat K(d) = \frac{A}{n^2}\sum_{i\ne j}\mathbf{1}(d_{ij} < d),\quad L(d) = \sqrt{K(d)/\pi}

Standard deviational ellipse of a point pattern

sx,y=2nn−2λ1,2,λ1,2=sxx+syy2±(sxx−syy)24+sxy2 s_{x,y} = \sqrt{\frac{2n}{n-2}\lambda_{1,2}},\quad \lambda_{1,2} = \frac{s_{xx}+s_{yy}}{2} \pm \sqrt{\frac{(s_{xx}-s_{yy})^2}{4} + s_{xy}^2}

Weighted mean centre and weighted standard distance

xˉw=∑wixi∑wi,SDw=∑wi[(xi−xˉw)2+(yi−yˉw)2]∑wi \bar x_w = \frac{\sum w_ix_i}{\sum w_i},\quad SD_w = \sqrt{\frac{\sum w_i\left[(x_i - \bar x_w)^2 + (y_i - \bar y_w)^2\right]}{\sum w_i}}

Remote sensing

At-sensor brightness temperature from thermal radiance

TB=K2ln⁡(K1Lλ+1) T_B = \frac{K_2}{\ln\left(\frac{K_1}{L_\lambda} + 1\right)}

Ground sample distance and swath of a nadir-looking camera

GSD=p Hf,W=GSD×N GSD = \frac{p\,H}{f},\quad W = GSD \times N

Thematic map accuracy: overall accuracy, kappa, producer's and user's accuracy

OA=∑iniiN,κ=po−pe1−pe,PAj=njjn+j,UAi=niini+ OA = \frac{\sum_i n_{ii}}{N},\quad \kappa = \frac{p_o - p_e}{1 - p_e},\quad PA_j = \frac{n_{jj}}{n_{+j}},\quad UA_i = \frac{n_{ii}}{n_{i+}}

Top-of-atmosphere reflectance from at-sensor radiance

ρTOA=πLλd2ESUNλcos⁡θs,1d2=1.00011+0.034221cos⁡Γ+0.00128sin⁡Γ+0.000719cos⁡2Γ+0.000077sin⁡2Γ \rho_{TOA} = \frac{\pi L_\lambda d^2}{ESUN_\lambda\cos\theta_s},\quad \frac{1}{d^2} = 1.00011 + 0.034221\cos\Gamma + 0.00128\sin\Gamma + 0.000719\cos2\Gamma + 0.000077\sin2\Gamma

Vegetation indices: NDVI, EVI, SAVI, OSAVI, MSAVI and EVI2 from band reflectances

NDVI=ρN−ρRρN+ρR, EVI=2.5ρN−ρRρN+6ρR−7.5ρB+1, SAVI=(1+L)ρN−ρRρN+ρR+L NDVI = \frac{\rho_{N} - \rho_R}{\rho_N + \rho_R},\ EVI = 2.5\frac{\rho_N - \rho_R}{\rho_N + 6\rho_R - 7.5\rho_B + 1},\ SAVI = (1+L)\frac{\rho_N - \rho_R}{\rho_N + \rho_R + L}

Water, moisture, burn and built-up indices: NDWI, MNDWI, NDMI, NBR and NDBI

ND(a,b)=ρa−ρbρa+ρb ND(a, b) = \frac{\rho_a - \rho_b}{\rho_a + \rho_b}

Spatial statistics

Bivariate Moran's I (spatial cross-correlation)

Ixy=∑izx,i∑jwijzy,jn−1 I_{xy} = \frac{\sum_i z_{x,i}\sum_j w_{ij}z_{y,j}}{n-1}

Distance-band spatial weights

wij={1dij≤δ, i≠j0otherwise w_{ij} = \begin{cases}1 & d_{ij} \le \delta,\ i \ne j\\ 0 & \text{otherwise}\end{cases}

Geary's C spatial autocorrelation with normal and randomization inference

C=(n−1)∑i∑jwij(yi−yj)22S0∑i(yi−yˉ)2,VN[C]=(2S1+S2)(n−1)−4S022(n+1)S02 C = \frac{(n-1)\sum_i\sum_j w_{ij}(y_i - y_j)^2}{2S_0\sum_i (y_i - \bar y)^2},\quad V_N[C] = \frac{(2S_1 + S_2)(n-1) - 4S_0^2}{2(n+1)S_0^2}

Getis-Ord general G (global high/low clustering)

G=∑i∑j≠iwijyiyj∑i∑j≠iyiyj,E[G]=S0n(n−1) G = \frac{\sum_i\sum_{j\neq i} w_{ij}y_iy_j}{\sum_i\sum_{j\neq i}y_iy_j},\quad E[G] = \frac{S_0}{n(n-1)}

Global Moran's I spatial autocorrelation with normal and randomization inference

I=nS0∑i∑jwijzizj∑izi2,E[I]=−1n−1,VN[I]=n2S1−nS2+3S02(n2−1)S02−E[I]2 I = \frac{n}{S_0}\frac{\sum_i\sum_j w_{ij}z_iz_j}{\sum_i z_i^2},\quad E[I] = -\frac{1}{n-1},\quad V_N[I] = \frac{n^2S_1 - nS_2 + 3S_0^2}{(n^2-1)S_0^2} - E[I]^2

Join count statistics of a binary map (BB, BW, WW)

BB=12∑i,jwijyiyj, BW=12∑i,jwij(yi−yj)2, WW=12∑i,jwij(1−yi)(1−yj) BB = \tfrac12\sum_{i,j} w_{ij}y_iy_j,\ BW = \tfrac12\sum_{i,j} w_{ij}(y_i - y_j)^2,\ WW = \tfrac12\sum_{i,j}w_{ij}(1-y_i)(1-y_j)

Local Getis-Ord Gi and Gi hot-spot statistics*

Gi∗=∑jwijyj∑jyj,Zi=Gi−Wi/NWi(N−Wi)(N−1)N2s2yˉ2 G_i^* = \frac{\sum_j w_{ij}y_j}{\sum_j y_j},\quad Z_i = \frac{G_i - W_i/N}{\sqrt{\frac{W_i(N - W_i)}{(N-1)N^2}\frac{s^2}{\bar y^2}}}

Local Moran's I (LISA) and Moran scatterplot quadrants

Ii=(n−1)zi∑jwijzj∑kzk2 I_i = (n-1)\frac{z_i\sum_j w_{ij}z_j}{\sum_k z_k^2}

Spatial lag of a variable

[Wy]i=∑jwijyj [Wy]_i = \sum_j w_{ij}y_j

k-nearest-neighbour spatial weights

wij=1  ⟺  j∈Nk(i) w_{ij} = 1 \iff j \in N_k(i)

Terrain analysis

D8 flow accumulation of a small DEM

A(c)=1+∑u→cA(u) A(c) = 1 + \sum_{u\to c}A(u)

D8 flow direction of every cell of a small DEM

d∗=arg⁡max⁡kz0−zkℓk,ℓk∈{Δ,2Δ} d^* = \arg\max_{k}\frac{z_0 - z_k}{\ell_k},\quad \ell_k \in \{\Delta, \sqrt2\Delta\}

Hillshade (analytical relief shading) of a 3x3 elevation window

cos⁡i=cos⁡Zcos⁡S+sin⁡Zsin⁡Scos⁡(A−α),H=255max⁡(0,cos⁡i) \cos i = \cos Z\cos S + \sin Z\sin S\cos(A - \alpha),\quad H = 255\max(0, \cos i)

Line-of-sight visibility along a terrain profile (with Earth curvature and refraction)

visible(i)  ⟺  zj<zeye+(zi+ht−zeye)djdi ∀ 0<j<i,Δzcurv=d2(1−k)2R \text{visible}(i) \iff z_j < z_{eye} + (z_i + h_t - z_{eye})\frac{d_j}{d_i}\ \forall\, 0 < j < i,\quad \Delta z_{curv} = \frac{d^2(1-k)}{2R}

Slope and aspect of a 3x3 elevation window (Horn's method)

∂z∂x=(z3+2z6+z9)−(z1+2z4+z7)8Δ, ∂z∂y=(z1+2z2+z3)−(z7+2z8+z9)8Δ, S=arctan⁡∥∇z∥ \frac{\partial z}{\partial x} = \frac{(z_3 + 2z_6 + z_9) - (z_1 + 2z_4 + z_7)}{8\Delta},\ \frac{\partial z}{\partial y} = \frac{(z_1 + 2z_2 + z_3) - (z_7 + 2z_8 + z_9)}{8\Delta},\ S = \arctan\lVert\nabla z\rVert

Terrain curvature: total, profile and plan curvature (Zevenbergen-Thorne)

K=−2(D+E),Kprof=−2(DG2+EH2+FGH)G2+H2,Kplan=2(DH2+EG2−FGH)G2+H2 K = -2(D+E),\quad K_{prof} = \frac{-2(DG^2 + EH^2 + FGH)}{G^2 + H^2},\quad K_{plan} = \frac{2(DH^2 + EG^2 - FGH)}{G^2 + H^2}

Terrain ruggedness index (Riley), topographic position index and local relief

TRI=∑i=18(zi−z0)2,TPI=z0−18∑i=18zi TRI = \sqrt{\sum_{i=1}^{8}(z_i - z_0)^2},\quad TPI = z_0 - \frac18\sum_{i=1}^{8}z_i

Watershed (catchment) of an outlet cell on a small DEM

W(o)={c:c→⋯→o} W(o) = \{c : c \to \cdots \to o\}

Urban geography

Huff model: probabilities of shopping at each store from an origin (network distances)

Pij=Sjαdij−β∑kSkαdik−β P_{ij} = \frac{S_j^{\alpha}d_{ij}^{-\beta}}{\sum_k S_k^{\alpha}d_{ik}^{-\beta}}

Rank-size rule (Zipf) fit of a settlement system

ln⁡Pr=ln⁡P1−qln⁡r \ln P_r = \ln P_1 - q\ln r

Residential segregation (evenness): dissimilarity, Gini and Theil entropy indices

D=∑iti∣pi−P∣2TP(1−P),G=∑i∑jtitj∣pi−pj∣2T2P(1−P),H=∑iti(E−Ei)ET D = \frac{\sum_i t_i\vert p_i - P\vert }{2TP(1-P)},\quad G = \frac{\sum_i\sum_j t_it_j\vert p_i - p_j\vert }{2T^2P(1-P)},\quad H = \sum_i\frac{t_i(E - E_i)}{ET}

Residential segregation (exposure): isolation, interaction and correlation ratio

xPx∗=∑ixiXxiti,xPy∗=∑ixiXyiti,η2=xPx∗−P1−P {}_xP^*_x = \sum_i\frac{x_i}{X}\frac{x_i}{t_i},\quad {}_xP^*_y = \sum_i\frac{x_i}{X}\frac{y_i}{t_i},\quad \eta^2 = \frac{{}_xP^*_x - P}{1-P}

Spatial interaction (gravity) model fitted by Poisson regression

Tij∼Poisson(μij),ln⁡μij=ln⁡k+αln⁡Oi+βln⁡Dj−γln⁡dij T_{ij} \sim \mathrm{Poisson}(\mu_{ij}),\quad \ln\mu_{ij} = \ln k + \alpha\ln O_i + \beta\ln D_j - \gamma\ln d_{ij}

Urban population density gradient (Clark's negative exponential model)

D(r)=D0e−br,ln⁡D=ln⁡D0−br D(r) = D_0e^{-br},\quad \ln D = \ln D_0 - br

Out of scope

  • Open-ended explanation, essay writing or tutoring dialogue: it is a solver, not a chatbot.
  • Questions outside its certified geospatial analytics capabilities, and any question whose stated numbers it cannot all use — it refuses with the reason instead.
  • High-stakes engineering, medical or legal decisions without independent review.

Limitations

  • It answers what its certified capabilities cover (ellipsoidal geodesy, coordinates and map projections, spatial statistics and geostatistics, remote sensing, terrain analysis, and urban and network analysis); anything else is refused with a reason.
  • ask() reads documented question forms and common phrasings; unusual wording may be refused — use solve() for guaranteed results.
  • Results are as correct as the certified relations and their stated conditions; a certified relation is a checked model, not a claim about every physical situation.

Citation

@software{geospatial_analytics_ai999x_1_0_0,
  title  = {geospatial-analytics-ai999x: an offline, verified geospatial analytics solver},
  author = {Farabi, Ibnul Jaif}, organization = {AI999X},
  year   = {2026}, version = {1.0.0},
  url    = {https://huggingface.co/AI999X/geospatial-analytics-ai999x}
}

Contact

Questions, bug reports and requests: open a discussion on https://huggingface.co/AI999X/geospatial-analytics-ai999x/discussions or visit https://ai999x.com.

Support the project

geospatial-analytics-ai999x is free and open source. If it helps you, you can support further development on Buy Me a Coffee.

Created and engineered by Ibnul Jaif Farabi · AI999X · ai999x.com

Downloads last month
-
Safetensors
Model size
4.72M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collections including AI999X/geospatial-analytics-ai999x

Evaluation results

  • identical on every platform on Golden answers (615 documented questions, Windows + Linux Python 3.10-3.14)
    self-reported
    1.000