Keeping the data in Javascript or JSON is missing the point about unobtrusive Javascript. One of the key things about "unobtrusive" is degrading gracefully when Javascript isn't present - and ideally when CSS isn't present either. For this reason, you should put the data in the document, not in Javascript, so users can see it.
Furthermore, you should present it in a table or div structure that looks clean without any CSS. In this case, a table is probably the correct semantic structure to represent this kind of data. You might further style the table for those who have CSS but not Javascript. The Javascript can then easily parse the data and put it into the map, but if Javascript isn't supported, the data will still be shown.
A further benefit is that it will be easily scrapable by robots such as search engines and anyone who wants to write a third-party mashup. (You could see that's a downside if you don't want to share it, but if someone wants the data enough, they'll get it from the page anyway.) It will also be there in neat form for visually impaired users using screenreaders.
Now you don't want to make the table visible by default, so you'll have to hide it using CSS. But what if a user has CSS but not Javascript? Then you probably want to show the table...that's what degrading gracefully is about. So what you do is make the table visible in the CSS (ie don't explicitly hide it), and then run some Javascript to hide it on initialisation:
document.getElementById("geodata").style.display = "none";
or some library-specific equivalent, e.g.
$("geodata").hide()
The only problem is that if you run this in document.onload(), the table will be visible for a few seconds. So include it in a script tag just after you output the table. This is one situation where it's okay to include a script tag in the HTML. If you do that, then avoid using library-specific code as the library may not yet have loaded by the time your inline script is evaluated.
Now you have all cases covered:
- JS and CSS - data presented nicely in the map
- no JS, but CSS - data presented nicely the table
- no JS and no CSS - data presented in a raw HTML table
(the other case, JS and no CSS rarely arises, you could deal with it if you like but kind of pointless)
You Javascript code will also be clean because it's parsing a neatly constructed data structure. You can easily inspect the table during development to see if it has the right data and if the map reflects that data correctly.