VN-2000 to Google Maps (WGS84) Converter & Parcel Area
Convert Vietnamese VN-2000 x, y (sổ đỏ coordinates) to WGS84 lat / lon, UTM or back, with the province central meridian, parcel area and GeoJSON.
Result
Press “Run” to see the result.
Converts coordinates between the Vietnamese national system VN-2000 and WGS84: plane coordinates x (northing), y (easting) in the 3° transverse Mercator zone of a province (k0 = 0.9999, the system printed on land-use certificates) or 6° UTM zones, VN-2000 latitude / longitude, WGS84 latitude / longitude (GPS, Google Maps) and WGS84 UTM. The datum shift uses the official seven parameters of TT 973/2001/TT-TCĐC and QĐ 05/2007/QĐ-BTNMT (EPSG:6960); the projection uses the Krüger series, accurate to the millimetre.
Pass province (any of the 63 former provinces or the 34 current ones) and the central meridian of TT 973/2001 is used; for a merged province the response warns when its former provinces have different meridians, because cadastral records keep the meridian of the former province. Or pass meridian directly (105.75 or 105°45').
With three or more points the parcel area and perimeter are computed on the projection plane, as cadastral maps do. format=geojson returns a GeoJSON polygon ready for Google Maps or QGIS. Accuracy between datums is about 1 m: fine for maps, not for legal surveys.
Use this in your code
curl -X POST "https://apibox.io.vn/v1/vn-vn2000" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[[1192000,600000],[1192000,600020],[1191980,600020],[1191980,600000]],"province":"Hồ Chí Minh"}'const res = await fetch('https://apibox.io.vn/v1/vn-vn2000', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"points": [
[
1192000,
600000
],
[
1192000,
600020
],
[
1191980,
600020
],
[
1191980,
600000
]
],
"province": "Hồ Chí Minh"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-vn2000",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"points": [[1192000, 600000], [1192000, 600020], [1191980, 600020], [1191980, 600000]], "province": "Hồ Chí Minh"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-vn2000');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"points":[[1192000,600000],[1192000,600020],[1191980,600020],[1191980,600000]],"province":"Hồ Chí Minh"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));API documentation → Get a free API key
FAQ
Which order are x and y?
VN-2000 lists x = northing (about 1–2.6 million m) first, y = easting (about 400–700 thousand m). Swapped pairs are detected and fixed with a warning.
Which central meridian should I use?
The one of the province where the parcel lies (TT 973/2001); for merged provinces use the former province. The certificate often prints it (e.g. KTT 105°45', múi chiếu 3°).
How accurate is it?
The projection is exact to the millimetre; the national 7-parameter datum shift is accurate to about 1 m (checked against published VN-2000 / WGS84 pairs of TT 47/2025/TT-BXD).