2017-07-31 10 views
2

qgisで作成したカスタムgeojsonファイルからマップを作成しました。 lat-long-valueではなくgeodataが投影されていますが、自動的にsvgコンテナに収まらなくなりました。そこで私は変換属性を使って適切な場所に移動しました。ここに私のコードは、これまでのところです:d3.js:投影されたジオデータと投影されていないジオデータを混合する

var height = 800, 
    width = 800; 

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

d3.queue() 
    .defer(d3.json,"./data/Shapefiles_simplyfied_20.json") 
    .await(drawMap); 

function drawMap(error,bw) { 

    if (error) throw error; 

    var features = bw.features; 

    var map = svg.append("g") 
     .attr("class", "kommunen") 
     .attr("id","karte-rdb"); 

    map 
     .selectAll("path") 
     .data(features) 
     .enter().append("path") 
     .attr("d", d3.geoPath(null)) 
     .attr("transform","scale(1,-1)") 

    //make the map fit to svg container 
    var bbox = d3.select("#karte-rdb")._groups[0][0].getBBox(); 
    var scaleFactor = d3.min([width/bbox.width, height/bbox.height]); 
    var translation = [width - bbox.x,height - bbox.y]; 

    map 
     .attr("transform","scale("+scaleFactor+","+scaleFactor+") translate("+ translation[0] +","+ translation[1] +")") 

} 

(切り捨て)にGeoJSONは次のようになります。

{ 
"type": "FeatureCollection", 
"name": "Shapefiles", 
"crs": { 
    "type": "name", 
    "properties": { 
     "name": "urn:ogc:def:crs:OGC:1.3:CRS84" 
    } 
}, 
"features": [{ 
    "type": "Feature", 
    "properties": { 
     "GEN": "Area1", 
     "BEZ": "RDB-RP" 
    }, 
    "geometry": { 
     "type": "MultiPolygon", 
     "coordinates": [[[[393361.666451968252659, 
     5504072.610383642837405], 
     [393366.833893342292868, 
     5503968.659385782666504], 
     ... 

enter image description here

今、私は緯度とcsvファイルにあるいくつかのポイントを表示したいと思います - ロンペア。

Name lat lon 
A 7.601581 49.203633 
B 8.008745 50.374521 
C 8.11676  49.746425 
D 6.657145 50.221658 
E 6.942947 49.654687 
F 9.62743  51.196755 

d3.geoProject-functionを使用しないで投影されたジオデータと一緒に表示するにはどうすればよいですか?

+1

緯度/経度のポイントがあり、正しい投影を使用して地図を表示している場合は、すべて正常であるはずです。問題は、データがどの投影法を使用しているのか、間違った投影法を使用しているのかわからないときです。スケール/平行移動するとうまくいく場合がありますが、実際はそうではありません。あなたの緯度/経度が正しい場所にない場合は、データと一致しない投影を使用している可能性があります。フラットな地図には、「投影されていない」データはありません。地球は(ほぼ)球形です。射影アルゴリズムなしで球体をフラットにすることはできません。 –

答えて

1

簡単な回答ではなく、選択肢があります。

使用している投影データは、メートルまたはヤードなどのグリッドに投影されます。グリッドに緯度経度ポイントを投影するには、投影を使用して緯度経度ポイントをそのグリッドに変換する必要があります(マップスケール、同じデータにも依存しますが、すべての地理データが同じデータを使用すると仮定します)。ポイントを投影する数式は、既に投影されたレイヤーに使用している投影法に依存します。これは、代替案よりも複雑である。

  1. QGISで最も突起がかなり容易に変換することができるように(にGeoJSONまたは他の地理的な形式で配置されている場合)、同じ共有凸点にあなたの緯度経度座標を変換することができあなたのデータとしての投影。

  2. もう1つのオプションは、既に投影されたデータを「アンプロジェクト」して、ロングペア(通常はd3を使用する場合はWGS84)を使用し、すべてのデータをd3で投影することです。しかし、あなたはd3.projectionを使用したくないと述べたので、これは理想的ではないかもしれません。

どちらのオプションもd3でうまくいくでしょう。逆にgeoProjectionとgeoTransformまたはnull投影を組み合わせると、再スケーリング、ズームなどのときに頭​​痛が発生します。は投影データに.geoTransformを使用すると、スケーリングと比較していくつかの利点がありますsvgを直接翻訳する。

+0

あなたの答えをありがとう。 d3.projectionを使うことも可能ですが、正しい投影に必要なqgisのx-y座標をlat-lon-valuesに変換できませんでした。しかし、ここでの答えは私にこの問題を解決するための正しいヒントを与えた:https://gis.stackexchange.com/questions/250720/creating-geojson-with-lat-lon-out-of-shapefile-using-qgis –

関連する問題