Batch Geocoding Tool For Singapore SVY21 Coordinate System

I have created a tool to geocode large amount Singapore postal codes into X, Y values of SVY21 coordinate system. SVY21 is the Singapore standard coordinate system used by Singapore Land Authority.

You can get the X, Y values of an address by using search function provided in But if you have a few thousands of addresses to geocode, my batch geocoding tool can help you better. You need internet connection to use the tool because the program is the wrapper written in c# to call web service provided by onemap.

Download link:  Batch Geocoder Installer 

Download the installer and unzip the folder. Run setup to install the tool on your computer. You may need .NET runtime to run the program. After installation run the tool from start menu.


Simply provide an input file containing a column of Singapore postal codes. Give the name and location of the output file where the result (X, Y) values are to be written. Click Run button to start the batch process. It may take a while depending on the number of postal codes you are processing.

Right now, the tool can only accept postal codes as input. In the future, I am planning to extend it to accept whole or partial addresses as input. The source code is hosted on Github for anyone who is interested to look at it.

4 thoughts on “Batch Geocoding Tool For Singapore SVY21 Coordinate System

  1. This is great help! Would you please make a version to convert postal code to Long and Lat coordinates? I saw you have a Python code to do batch conversion from SVY21 to Long Lat, but I don’t know how to use Python… Thank you very much!


  2. Hi, thank you for creating this useful tool. I have used this tool months ago without a problem, but when I tried using it today (Oct 2017), I keep getting the below error. Would appreciate it if you could let me know how to fix this. I have a project that requires me to convert a large number of Singapore postal codes, any other recommendations would be appreciated. Thank you.

    Error System.Net.Http.HttpRequestException: An error occurred while sending the request. —>
    System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. —> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. —> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
    at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
    at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
    — End of inner exception stack trace —
    at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
    at System.Net.PooledStream.EndWrite(IAsyncResult asyncResult)
    at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
    — End of inner exception stack trace —
    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
    at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
    — End of inner exception stack trace —
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at Rest_Client.RestClient.d__0.MoveNext()


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s