My 'handcrafted' cartogram (How to create contiguous area cartograms in QGIS or R?) is ready to embed in code - I want to present it online with D3.js.
Therefore I produced a topoJSON file of it - but all I get are weird shapes all around the globe.
Here is the (simplified) cartogram in geoJSON (file:removed) - it works perfectly with QGis. Also I checked the geometry in QGis and it doesn't display an error [Vector > Geometry Tools > Check geometry validity].
I tried both: From QGis > geoJSON > topoJSON (with topojson), and QGis > ESRI shapefile > geoJSON (with ogr2ogr) > topoJSON (with topojson).
Also I tried reprojection with ogr2ogr:
ogr2ogr "ESRI Shapefile" -t_srs EPSG:4326 outfile.shp infile.shp
And I did the whole thing with UTF-8 flag:
topojson --shapefile-encoding utf8 -o outfile.json infile.shp
Here is the (simplified) cartogram in topoJSON (file:removed), and it looks ok to me - even the json-validators are happy with it.
But my D3.js code just results in weird shapes and lines.
<head>
<meta charset="utf-8">
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v0.min.js"></script>
<title></title>
<style>
.unit {
fill: none;
stroke: #111;
stroke-linejoin: round;
}
</style>
</head>
<body>
<script>
var width = 600,
height = 600;
var projection = d3.geo.albers() // also: orthographic & mercator wont work
.rotate([0, 0])
.center([8.43, 46.8]) // Switzerland
.scale(100);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("hexmap.json", function(error, hexm) {
var units = topojson.object(hexm, hexm.objects.hexmap).geometries[25];
svg.append("path")
.datum(units)
.attr("class", "unit")
.attr("d", path);
});
</script>
</body>
I just don't know where I am going wrong... Is it the projection? The conversion? Are the files ok?
EDIT - SOLUTION
- use a transferable projection in the first place.
the correct ogr2ogr command:
ogr2ogr "GEOJSON" -s_srs infile.prj -t_srs EPSG:4326 outfile.geojson infile.shp
alternative:
ogr2ogr "GEOJSON" -s_srs EPSG:21781 -t_srs EPSG:4326 outfile.geojson infile.shp