2017-04-01 54 views
1

私はd3.jsを使用して私の国の地図を作成しています。私はいくつかのポイントの経度と緯度の値を抽出するためにGoogleマップのURLを使用します。 d3を使って点を表示するには、ピクセル単位で(x、y)値に変換し、都市の配列に格納する必要があります。私はこの問題が投機についてあることを知っていますが、私はそれを解決することができませんでした。d3.jsを使用して緯度と経度を(x、y)座標に変換する方法

これは私のコードの一部です。

var projection = d3.geoMercator().fitSize([width, height], json); 
var path = d3.geoPath().projection(projection); 


var URL = "https://www.google.com.tr/maps/place/Ankara/@39.9035553,32.6223376,11z/data=!3m1!4b1!4m5!3m4!1s0x14d347d520732db1:0xbdc57b0c0842b8d!8m2!3d39.9333635!4d32.8597419?hl=tr"; 

var splitUrl = URL.split('@'); 
var coords = splitUrl[1].split(','); 

console.log(coords[0]); 
console.log(coords[1]); 

cities.push([coords[0], coords[1]]); 
+0

値は常にいくつかのエラーを持っています球を変形させる。これらの(x、y)座標を生成するためにどの方法を使用すべきかは、これらの座標をどの目的に使うかによって大きく左右されます。あなたは何をしようとしているのですか? –

+0

Googleマップから取得した地図の座標をプロットしたいと思います。 –

答えて

3

ピクセル単位で(x、y)のペアにデータを変換する必要はありません。 d3.geoPath.projection(projection)を使用する場合は、d3.geoPath()パスジェネレータを指定した投影を使用して(緯度、経度)のペアを(x、y)のペアに自動的に変換するように設定しています。

(緯度、経度)のペアをとり、それらを使ってGeoJSONオブジェクトを生成し、次にこれをd3.geoPathジェネレータにフィードします。あなたはおそらくGeoJSON pointが欲しいでしょう。

だからあなたのコードは、おそらくのようになりますせずに平面上に球をフィットする方法がないため(x、y)に緯度と経度の変換

var projection = d3.geoMercator().fitSize([width, height], json); 
var pathGenerator = d3.geoPath(projection); 

var URL = "https://www.google.com.tr/maps/place/Ankara/@39.9035553,32.6223376,11z/data=!3m1!4b1!4m5!3m4!1s0x14d347d520732db1:0xbdc57b0c0842b8d!8m2!3d39.9333635!4d32.8597419?hl=tr"; 

var splitUrl = URL.split('@'); 
var coords = splitUrl[1].split(','); 

var geoJsonPoint = { 
    type: "Point", 
    coordinates: coords, 
} 

pathGenerator.path(geoJsonPoint); 
+0

ポイントにパスを使用する理由与えられた投影のその点の投影されたx、y値を返す 'projection([long、lat])'を単純に使うのはもっと簡単ではないでしょうか? –

+0

投影された座標を取得するだけの場合は問題ありませんが、実際に投影された点をレンダリングしたい場合は、質問のコメントに記載されています。 –

+0

ああ、十分です。 "私はピクセル単位で(x、y)値に変換し、それを都市の配列に格納する必要があります。" –

関連する問題