Skip to content

Vietnam · UTC+7 · Async-first, fixed-scope projects

Trần Ngọc Bình

3D Data Engineer

Point cloud & drone data → web 3D

I work across three things that usually take three people: I register and QC terrestrial laser scans, I process drone survey and multispectral data into maps an agronomist or engineer can act on, and I build the 3D web that lets your client walk through the result in a browser tab. Twelve years in UAV field operations before I wrote the software side, so I read a dataset the way the person who flew it does. Every deliverable ships with a QC report whose numbers come from measurement artifacts, not from me typing them in.

Founded 115Drone (2024), a Vietnamese multi-sector drone services company. UAV field practice since 2014 across five organizations. The datasets in the case studies below are from real production work, not exercises.

What I do

  1. 01

    Multi-station point cloud registration + QC reporting

    Terrestrial laser scan registration with a coarse→fine cascade, pose-graph loop closure to kill open-traverse drift, and an accuracy report generated from measurement artifacts. Includes the diagnostics most vendors skip: figure-8 detection, yaw-slide tripwires, and along-surface slide checks that a point-to-plane residual alone will hide.

    • 39stations registered (Trimble X7)
    • 2.2–3.4 mminter-station agreement
    • 96.9–98.6%wall points within 5 mm
    • 4–5×better than LOD400 documentation tolerance
  2. 02

    Web 3D & web maps — turning captured data into something a client can open

    Browser viewers for point clouds, meshes and map layers, so the deliverable is a link instead of a 4 GB file nobody can open. This is where the two halves meet: I process the survey and I build the front end that presents it. Range runs from marketing sites through to a multi-room 3D museum with authored camera paths, post-processing and a typed API behind it. Production Next.js and React Three Fiber, end-to-end tested and deployed.

    • 3production sites live
    • 6-room3D exhibition, browser-native
    • 2,683commits across 36 repositories
    • Next 16 · React 19 · R3Fcurrent stack, not legacy
  3. 03

    Drone survey processing — orthomosaic, DSM/DTM, vegetation indices

    Multispectral and RGB drone data into orthomosaics, terrain models, contours and index rasters, packaged as a client-readable report rather than a folder of GeoTIFFs. Five vegetation indices computed and cross-checked, with per-zone statistics carried into the report itself rather than left in the raster.

    • 1multispectral survey flight, processed end-to-end
    • 5indices (NDVI · GNDVI · OSAVI · NDRE · LCI)
    • 7management zones · 19.67 ha
    • ahead of estimatedelivery vs. planned hours
  4. 04

    Point cloud cleaning — conservative, reversible, reviewed

    Transient-object detection by visibility voting across registered stations: a point is flagged only when at least three independent stations measured a ray straight through it. Removals are delivered as a candidate list with the removed points kept as a sidecar, so nothing is destroyed. Known systematic false positive — open-work elements such as railings, grilles, ceiling grids and cable trays — is handled by the site-context intake below rather than by tuning a threshold.

    • 0.021%false-positive rate, measured on a controlled subset
    • 458.9 Mpoints examined in one pass
    • not yet quantifiedrecall — stated, not estimated
  5. 05

    DJI Mobile SDK v5 application development

    Native Android flight applications on DJI MSDK v5 for enterprise airframes — mission planning, camera control, telemetry. A narrow specialism: the SDK is thinly documented and needs real hardware to test against, which I own and fly.

    • MSDK 5.18Mavic 3M · RC Pro Enterprise
    • Kotlin 2.1compileSdk 35

How I verify

The reason to hire me over a cheaper bid is not that I run different software. It is that you can check my work without taking my word for anything.

Numbers come from artifacts, not from me

Accuracy and QC reports are generated by script from measurement JSON. No figure in a report I send you was typed by hand. If the pipeline did not measure it, it is not in there.

Explicit accept/reject thresholds

Each report states the gate it had to pass and by how much — for example, a consolidation step is accepted only if the loop-closure median does not worsen by more than 0.2 mm.

Known-failure tripwires are printed in the report

Historical failure modes are checked automatically and flagged in the output. Example: if the residual on one wall axis greatly exceeds the other, that is a yaw-slide signature — the report says so and blocks promotion.

Limits are stated, not buried

Where a residual is a physical data floor rather than something more processing can fix, the report says so and names what would actually fix it — usually field control, not more iterations. You get the real number, including when it is not the number you hoped for.

Selected work

Heritage temple — 39-station laser scan registration

Hưng Miếu, Imperial City of Huế · Trimble X7 · 264.9 M points

Problem

The on-tablet vendor registration had drifted. Long corridors, open courtyards and repeated flat walls produced an open-traverse error that split single columns into two rings roughly 290 mm apart — invisible in the vendor software’s own summary numbers.

Approach

  • Read structured E57 per station, preserving the scan grid and filtering invalid returns.
  • Coarse global alignment per overlapping pair, then fine refinement — the coarse stage sized to exceed the initial offset so the constraining far walls actually enter correspondence.
  • Pose-graph optimisation with loop-closure edges to distribute accumulated error, instead of growing off a few anchors.
  • Accuracy measured per building element — plinth, column shaft, beam, truss, wall — rather than on the merged cloud, so floor and vegetation cannot flatter the result.

Outcome

  • 2.2–3.4 mminter-station agreement, structural elements
  • 0.70–0.83 mmmedian per-point wall residual
  • 96.9–98.6%wall points within 5 mm
  • 39/39stations registered, network fully connected

Deliverables

  • Registered point cloud (LAS/E57), colour, 6 mm working resolution
  • Accuracy report — per element, generated from measurement artifacts
  • QC report — per-station gates, drift and yaw-slide checks, connectivity
  • Cleaned-fabric extract with removed points retained as a sidecar
The registered cloud in colour, roof partly cut away so the timber frame reads. 39 stations merged; what you see is measured points, not a model built over them.
The registered cloud in colour, roof partly cut away so the timber frame reads. 39 stations merged; what you see is measured points, not a model built over them.
The failure and the fix, on four columns. Top row is the vendor registration — each column arrives as two offset rings. Bottom row is after re-registration: one ring.
The failure and the fix, on four columns. Top row is the vendor registration — each column arrives as two offset rings. Bottom row is after re-registration: one ring.
Per-element check rather than a whole-cloud average: wall points against the reference station, 0.71 mm median, 98.9% within 5 mm. Green is inside tolerance.
Per-element check rather than a whole-cloud average: wall points against the reference station, 0.71 mm median, 98.9% within 5 mm. Green is inside tolerance.
Cleaning shown as a decision, not a deletion. Red is flagged clutter — 2.3 M points — kept as a sidecar so the client can review it and put any of it back.
Cleaning shown as a decision, not a deletion. Red is flagged clutter — 2.3 M points — kept as a sidecar so the client can review it and put any of it back.

Stated limits — Accuracy figures are inter-station agreement and per-element residuals computed from the scan data itself. No independent survey control was in scope, so these describe internal consistency of the registration, not absolute position in a national coordinate system.

Precision agriculture — multispectral survey to a report a grower can act on

Fruit-growing co-operative (name withheld) · DJI P4 Multispectral · 19.67 ha

Problem

A grower does not need index rasters. They need to know which block to walk to on Monday morning. The usual delivery — a folder of GeoTIFFs and a viewer licence — puts the burden of interpretation on the person least equipped to carry it.

Approach

  • Radiometric handling of the five-band capture, then orthomosaic and per-band reflectance rasters.
  • Five vegetation indices computed and cross-checked against one another rather than trusting a single index.
  • The block split into management zones, with statistics computed per zone so the numbers correspond to areas a person can actually walk to.
  • Report written in the grower's language, with the per-zone number printed on the map it came from.

Outcome

  • 1multispectral survey flight, processed end-to-end
  • 7management zones · 19.67 ha
  • 5indices (NDVI · GNDVI · OSAVI · NDRE · LCI)
  • ahead of estimatedelivery vs. planned hours

Deliverables

  • Orthomosaic and per-band reflectance rasters
  • Five index rasters with per-zone statistics
  • Zone classification into vigour bands
  • Client-readable report, per-zone figures printed on the maps they derive from
NDVI for one management zone, with that zone's statistics carried in the title so the number travels with the picture instead of living in a separate table.
NDVI for one management zone, with that zone's statistics carried in the title so the number travels with the picture instead of living in a separate table.
The same zone classified into vigour bands over the orthomosaic. The split between healthy and stressed area is the line an agronomist acts on.
The same zone classified into vigour bands over the orthomosaic. The split between healthy and stressed area is the line an agronomist acts on.
Orthomosaic detail at working resolution — individual tree crowns and row structure resolve, which is what makes per-tree statistics meaningful rather than decorative.
Orthomosaic detail at working resolution — individual tree crowns and row structure resolve, which is what makes per-tree statistics meaningful rather than decorative.
A different management zone from the same flight, processed identically so the two are comparable. Consistency across zones is the product here, not any single map.
A different management zone from the same flight, processed identically so the two are comparable. Consistency across zones is the product here, not any single map.

Stated limits — One survey flight. Reports are delivered in Vietnamese for this client; English is available on request. Index values are relative, not calibrated to a reflectance standard — no panel calibration was in scope, so these support relative comparison across zones rather than absolute biophysical measurement. Coordinate axes are cropped from the maps shown here: the parcel location belongs to the client and is not mine to publish.

Browser-native 3D museum — my own build, in progress

Hue4U Digital Museum · React 19 · React Three Fiber · Three.js · Hono + tRPC + Drizzle · Postgres 16 · pnpm monorepo

Problem

A heritage collection is only useful to the public if you can walk through it without installing anything. Museum 3D usually ships either as a video — no agency for the visitor — or as a heavy download that phones refuse. I am building a walkable exhibition that runs in a browser tab, on the hardware people actually own.

Approach

  • Six exhibition rooms off a great hall, each a separate scene graph, loaded on demand rather than as one bundle.
  • Authored camera paths per room so a first-time visitor is led rather than left to fly a free camera into a wall.
  • Post-processing (tone mapping, bloom) tuned per room — a bright ceramics gallery and a lacquered red hall need different exposure.
  • Typed API boundary — Hono + tRPC over Drizzle — so room and artifact metadata is not hard-coded into the client.
  • Monorepo split web / api / db / shared, with migrations under version control.

Outcome

  • 6exhibition rooms off a great hall
  • browser-nativeno install, no plugin
  • per-roomauthored camera + post-processing

Deliverables

  • 3D exhibition with per-room routing, running locally
  • Typed API + database schema with migrations
  • Bilingual interface (Vietnamese / English)
  • Asset pipeline: source model → compressed GLB → baked room shell
The great hall. Six gates, each labelled, each opening a room that is fetched when you walk through it rather than loaded up front.
The great hall. Six gates, each labelled, each opening a room that is fetched when you walk through it rather than loaded up front.
The Nine Dynastic Urns room — authored camera path, artifact metadata panel served from the API rather than hard-coded into the client.
The Nine Dynastic Urns room — authored camera path, artifact metadata panel served from the API rather than hard-coded into the client.
Rites & Spirituality. Exposure and bloom are tuned per room; settings that read correctly in a bright gallery blow out lacquer and gilt.
Rites & Spirituality. Exposure and bloom are tuned per room; settings that read correctly in a bright gallery blow out lacquer and gilt.
Ceramics & Woodcraft — pedestal-mounted artifacts, bilingual descriptions.
Ceramics & Woodcraft — pedestal-mounted artifacts, bilingual descriptions.

Stated limits — This is my own product, still in development, not a delivered client engagement — it runs locally and is not yet public, which is why there is no link. The artifact models and exhibition copy originate with the site's heritage conservation authority and its digital partner, whose published exhibition I used as a technical reference; the collection is theirs, not mine. What is mine, and what these screenshots show, is the web and 3D engineering: the hall, the room loading, the camera work and the API behind them.

Production web delivery — three live sites

Next.js 16 · React 19 · TypeScript · Tailwind 4 · Vercel

Problem

Three organizations needed public sites that load fast on Vietnamese mobile networks, are maintainable by non-developers, and do not depend on an agency retainer to update.

Approach

  • App Router with server components, content collections and internationalised routing.
  • Design tokens shared across projects; component library rather than per-page CSS.
  • End-to-end tests with Playwright covering the flows that actually earn money — booking, enquiry, lead capture.
  • Deployed on Vercel with preview environments per branch.

Outcome

  • 3sites live in production
  • 2,683commits across 36 repositories
  • e2e testedcritical paths, not just unit tests

Deliverables

  • Production site, deployed, with preview environments
  • Content editing for non-developers
  • End-to-end test suite
  • Handover documentation
Feniko — heritage river tourism, booking flow.
Feniko — heritage river tourism, booking flow.
Đào Tạo Bay — drone pilot training academy.
Đào Tạo Bay — drone pilot training academy.
115Drone — role-based entry into five audience portals.
115Drone — role-based entry into five audience portals.
binhuav.com — this site. Interactive 3D city scene, React Three Fiber.
binhuav.com — this site. Interactive 3D city scene, React Three Fiber.

What I ask for before processing

Remote processing fails in one predictable way: the person at the keyboard never saw the site. Five questions close most of that gap, and they take you five minutes.

  1. Photos or panoramas from the day of capture.
  2. What was temporarily on site during capture — scaffolding, vehicles, equipment, materials, people?
  3. Any area that was occluded, scanned through glass or a doorway, or obstructed by vegetation?
  4. Which elements are open-work — railings, mesh, grilles, suspended ceiling grid, cable trays, louvres?
  5. Capture log: which station or flight happened when.

Question four matters most. Ray-based transient detection assumes opaque surfaces, so open-work elements are the one class of false positive the method reliably produces. Naming them up front is faster and safer than any threshold I could tune blind.

Tools

Point cloud & photogrammetry
PDALOpen3DCloudComparesmall_gicpTEASER++pye57COLMAPOpenMVSIfcOpenShell
Geospatial
QGISGDALrasterioPROJGeoTIFF / COGPostGIS
Web & 3D
TypeScriptNext.js 16React 19Three.jsReact Three FiberTailwind 4DrizzlePlaywright
Mobile & field
KotlinDJI Mobile SDK v5AndroidRTK / GNSS workflows
Languages
PythonTypeScriptKotlinSQL

Working together

Fixed-scope project

Defined deliverable, defined price, agreed before work starts. Preferred for registration, survey processing and viewer builds.

Overnight processing partner

For drone service providers in North America and Europe: you fly during your day, send the capture at close of business, and the processed deliverable is waiting the next morning. The 11–14 hour offset works in your favour.

Ongoing retainer

Recurring flight series, repeat scanning programmes, or continuing web/3D work.

How I work

  • Async-first. Written scope, written updates, no standing calls required.
  • Every deliverable arrives with its QC report.
  • Scope stated in writing before work begins, including what is explicitly not included.
  • Source files and intermediate artifacts handed over — no lock-in.

What I don’t offer

  • Scan-to-BIM / point cloud to Revit modelling — I do not offer this yet, and I would rather say so than learn on your project.
  • On-site capture outside Vietnam — I process data; the flying or scanning is yours or a local provider’s.
  • Certified survey deliverables requiring ASPRS or licensed-surveyor sign-off.