Isochrone Map Generator
A radius circle drawn around a candidate location answers the wrong question. Nobody travels in a straight line — they travel on roads, and a river, a toll road with no exit, or a single congested artery changes the answer completely. This draws the shape people can actually reach, then counts how many of them there are.
Click anywhere in the world and it routes outward over the full OpenStreetMap street network — residential lanes and alleys included, not just the arterials — returning three nested bands: five, ten and fifteen minutes. For each one you get the reachable area in km², the population inside, and the resulting density.
One request leaves your browser per click, and it carries exactly two things: the coordinate you clicked and whether you chose walking or driving. It goes to the public OpenStreetMap routing service — no API key, no account. Your population CSV is read and counted in this tab and never travels: the page is only permitted to reach that one host, so there is nowhere else for it to go.
How to use it
- 01
Click a point
Anywhere on Earth. The routing service walks the street network outward until the time budget runs out and returns the three bands as polygons. If it is busy or unreachable, the tool falls back to a road network carried inside the page itself — coarser, Jabodetabek only, but still an isochrone rather than an error message.
- 02
Switch walking or driving
Walking assumes 5 km/h, driving 30 km/h — a realistic urban average rather than a speed limit. Switching recomputes the same point immediately, which is the fastest way to see how differently a location serves people on foot and in a car.
- 03
Score the candidates
Every point you click becomes a numbered candidate, and picking a site type — minimarket, F&B, school, housing, office, warehouse — reweights them. The profiles differ where it matters: a minimarket’s catchment decays steeply because nobody drives fifteen minutes for bottled water, while a warehouse’s barely decays at all because a parcel still arrives. The panel prints the weights it used, and what it ignored.
- 04
Read the population
The built-in sample carries 32 million people across the thirteen cities and regencies of Jabodetabek, using real BPS totals per city, and its outline is drawn on the map as a dashed border. Click outside that border and the area is still measured but the people count is left blank rather than reported as zero — drop your own CSV to get numbers anywhere else, and the border redraws around your data.
CSV columns it reads
Only coordinates are required, and only for the population side — the isochrone itself needs nothing but a click. A population column turns point counts into people; without one, every row counts as one person.
| Field | Required | Notes |
|---|---|---|
| latitude | Yes | Decimal degrees. Also accepted: lat, y, lattitude, lat_deg. Matched case-insensitively. |
| longitude | Yes | Decimal degrees. Also accepted: lng, lon, long, x, lon_deg. |
| population | Optional | People represented by that point. Also accepted: pop, penduduk, jiwa, people, weight, count, jumlah. Thousands separators are tolerated. |
How it works
Why the result is fetched, not computed here
Every other tool on this site runs with connect-src 'none' — the browser forbids it from making any network request at all. This one cannot, and the reason is arithmetic: a single 30 km² square of South Jakarta holds 35,379 street points, more than the entire Jabodetabek arterial file this page also carries. Shipping the full network would mean millions of points for one metro area, and the tool is meant to work in any city. So the network fetches the answer, not the roads: about 9 kB of polygon, roughly a second.
The population figure is half real, half modelled
Real: the administrative boundary of all thirteen kota and kabupaten, and each one’s population from BPS — 32.0 million in total. Modelled: where inside each city those people sit, clustered on twenty-five genuine activity centres rather than spread evenly. So a city total is exact and a neighbourhood total is an estimate, and the panel says so rather than presenting one number as if it were all measurement.
The score is a comparison, not a grade
It is normalised across the candidates you are comparing, so 100 means best of that set, not best possible — a single candidate always scores 100 and the panel says so. Three things feed it: time-decayed reachable population, the density of the catchment, and how much of the theoretical free-flow circle the road network actually delivers. That last one is the surprising one: measured from central Jakarta it is 8.9%, from Bekasi 21.9%.
What the score deliberately leaves out
Competitors, purchasing power, rent, parking, footfall. None of it is in the data, so none of it is in the number — and for retail siting, competition is usually the factor that decides. Travel times are free-flow too, which flatters a congested CBD. Treat the score as one input that answers a question radius circles cannot, not as the answer.
One grid answers all three questions
The travel times are rasterised into a single field, and the polygon outline, the area and the population count are all read from that same grid. Computing the shape and the count separately is how tools end up drawing one thing and reporting another; here they cannot disagree, and the polygon area matches the counted area to within four per cent.
Questions
- What exactly leaves my browser?
- One coordinate and one travel mode, per click, to one host: the public OpenStreetMap Valhalla service. Nothing else can leave, and that is enforced rather than promised — the page’s Content-Security-Policy names that single host and forbids every other destination, my own server included. Your population CSV is parsed and counted in the tab and has nowhere to be sent. Check it in ten seconds: curl -sI https://lutfilabs.com/lab/isochrone.html | grep -i content-security
- Does it work outside Indonesia?
- Yes — the routing covers wherever OpenStreetMap has streets, which is most of the world. Tested from London and Surabaya as readily as from Jakarta. What is regional is the built-in population sample, which covers Jabodetabek only; its extent is drawn as a dashed border, and outside it the reachable area is still measured while the people count stays blank until you supply data of your own.
- How accurate are the travel times?
- They are free-flow estimates from the road classes and speed limits in OpenStreetMap, not live traffic. At rush hour on a congested corridor the real reach will be smaller. Use it to compare candidate locations against each other, which is what it is good at, rather than to promise a delivery window.
- Can I use this for site selection?
- That is what it is for. Click two candidate locations in turn and compare the fifteen-minute population: that difference is usually far more decisive than anything a radius circle would have told you, because it accounts for which roads actually connect.
- Do I need an account?
- No account, no email, no trial limit. The tool is a static page; there is nothing to sign up to.
Other tools
RF Coverage Map from CSV
Turn a cell site CSV into directional sector coverage on a real map — azimuth, beamwidth, and technology, all drawn in your browser.
RSRP Drive Test Map
Render a hundred thousand drive test points on a map, coloured by any metric, with thresholds you set yourself.
Network Diagram Generator from Config
Mikrotik, Cisco, Fortinet, Juniper, VyOS, and Huawei configs drawn as one topology — with secrets masked on screen.
H3 Hexbin Density Map
Aggregate millions of coordinates into Uber H3 hexagons and see them as 3D bars on a map you can tilt and rotate.
Hitung RAB dari Denah
Hitung RAB otomatis dari foto denah: luas, volume pekerjaan, keramik, dan cat — bisa diedit lalu diekspor ke Excel.
Generator Script Konten
JSON ide konten jadi naskah 18-20 detik lengkap dengan gerakan tangan dan rencana rekam — siap disalin ke Google Docs.