2017-02-05 9 views
0

d3.js v4.5.0とtopojson v2を使用して、https://d3js.org/us-10m.v1.jsonにあるtopojsonファイルから米国の郡をプロットしようとしています。 d3のデフォルトプロジェクトはAlbers(私は思う)です。d3.geoMercator()に投影するとエラーが発生する

:それはタイプの799のエラーを生成

var projection = d3.geoMercator() 
    .scale(500) 
    .translate([width/2, height/2]); 

var path = d3.geoPath() 
    .projection(projection); 

:にvar pathを変更する際に、しかし

var width = 1000, 
    height = 600; 

var svg = d3.select("#us-county-map").append("svg") 
    .attr("width", width) 
    .attr("height", height); 

var path = d3.geoPath(); 

d3.json("data/us_counties.json", function(error, us) { 
    if (error) return console.error(error); 

    svg.append("g") 
     .attr("class", "counties") 
    .selectAll("path") 
    .data(topojson.feature(us, us.objects.counties).features) 
    .enter().append("path") 
     .attr("d", path); 
}); 

enter image description here

:次のコードを使用して

標準の投影マップを生成します

Error: <path> attribute d: Expected number, "…61.126408983549,NaNL1559.4690422…" 

と次の図(はい、ブラックボックス)です。

エラーを作成して何

enter image description here

、および投影を適用行うための適切な方法はありますか?

答えて

1

あなたが定義された投影せずに表示された地図を見るたびに、データがすでに投影であるので、それは次のとおりです。

var path = d3.geoPath(); 

これはまたのように表すことができる。

var path = d3.geoPath().projection(null); 

D3突起プロジェクト3次元の地球上の点である緯度と経度の座標。あなたのような投影データは2次元のサーフェスに変換され、投影する必要はありません。 D3の投影機能は正しく投影することができません。

d3投影を使用するには、空間参照系(または座標参照系)としてWGS84を使用していることを確認する必要があります。つまり、データは緯度と経度で測定されます。

ジオトランスフォームを使用して既に投影されたデータを操作することは可能ですが、API referenceとこのブロックon reprojecting already projected dataを参照してください。


編集:

この問題の特定のデータ(ハワイとアラスカの包含を可能にする)複合投影に投影されるので、unprojectが困難であってもよいです。郡データを見つけてtopojsonに変換する方が簡単かもしれません。

郡境界の1つのソースはhereです。これらのシェイプファイルは、シェイプファイルのすべての部分をmapshaper.orgに追加し、topojsonとしてエクスポートすることで簡単に変換できます。それはWGS84データではなくNAD83データを使用しますが、その差はかなり小さいはずです。しかし、必要に応じて、コンソールを使用してproj wgs84と入力して、マップシェイパーのWGS84に変換することは可能です。このデータのデモンストレーションは次のとおりです。US Counties Bl.ock

+0

ありがとうございます。だから私はそれを変換する前にjsonデータの元の投影を知る必要がありますか? – James

+0

これは役に立ちますが、これは非常にユニークで複雑なタイプの投影法であり、複数の投影法を組み合わせて投影します。他の地域の郡データを見つけてtopojsonまたはgeojsonに変換する方が簡単かもしれません。問題でテストしたあなたのmercator投影法では、データが確実に表示されるように、アメリカの中心近くの中心座標を使用してください。これは '.center([ - 100,40])のようなものですが、心のアラスカとハワイは見えないかもしれません。 –