2012-03-27 10 views
0

私は数日間苦労していますので頼んでいます。私はインターネットとstackoverflowを検索し、何も見つかりませんでした。場所によっては緯度と経度の精度が問題になる場合があります。

マップ上にマーカー/円などを配置する必要があります。 しかし、私は正確度が私の場所に依存するグリッド上にしか描画できないようです。したがって、その場所は十分正確ではありません。

私はWt(C++)を使用していますが、問題の一部ではないようです。 私は、座標が等間隔である20 * 20の円の配列を描くコードを書いた。私はパリやニューヨークにいても同じ結果を得られません。パリで

: (それは私の最初の質問ですので、画像を投稿することはできません)新ニューヨークで http://img818.imageshack.us/img818/7841/parism.png

:パリで http://img193.imageshack.us/img193/9822/newyorkq.png

、私は経度の精度を得ることはなく、緯度。 ニューヨークでは、私は緯度も経度も正確さを得ることができません。ここで

は、私が使用するコードです:

/*Choose between both*/ 
    double centerLat = 40.714468; double centerLng = -74.005966;//New-York 
    //double centerLat = 48.854607; double centerLng = 2.347126;//Paris 

    /*Other parameters*/ 
    double lngMargin = 0.000400; 
    double latMargin = 0.000400; 
    int granularity = 20; 

    int i,j; 
    WVBoxLayout* layout = new WVBoxLayout(); 
    WColor::WColor myBlue = WColor::WColor(0,0,255,255); 
    WColor::WColor myRed = WColor::WColor(255,0,0,255); 
    WColor::WColor myTransparent = WColor::WColor(0,0,0,0); 
    WGoogleMap::Coordinate coordArray[granularity][granularity]; 

    /* Creating and configuring the map */ 
    WGoogleMap *map = new WGoogleMap(WGoogleMap::Version3); 
    WGoogleMap::Coordinate centerCoord = WGoogleMap::Coordinate(centerLat,centerLng); 
    setLayout(layout); 
    resize(height,width); 
    map->setCenter(centerCoord,19); 
    map->setMapTypeControl(WGoogleMap::DefaultControl); 
    map->enableScrollWheelZoom(); 
    map->addCircle(centerCoord,2,myBlue,2,myTransparent); 

    /* Here is the loop that draws the circles */ 
    for(i=0 ; i<=granularity-1 ; i++){ 
      for(j=0 ; j<=granularity-1 ; j++){ 

        coordArray[i][j] = WGoogleMap::Coordinate(centerLat + beforeOrAfterTheCenter_Lat * (latMargin/granularity) * i, 
            centerLng + beforeOrAfterTheCenter_Lng * (lngMargin/granularity) * j); 

        map->addCircle(coordArray[i][j],1,myRed,2,myTransparent); 
      } 
    } 

コードは大丈夫動作するようになっています。正確さを増すために私ができることについて何か手がかりはありますか?それはよく知られている問題ですか?

は苦労のいくつかの時間後に、あなたが提供できるすべてのヘルプは非常に

L.

+0

私の推測では、緯度、経度の等価の違いはピクセル単位で等しくなりません。グリッドを(Lat、lon)で描画してから、(-Lat、lon)を描いて、形状が似ているか反転しているかどうかを確認してください。おそらく赤道の周りで動作するのでしょうか? –

+0

Heitor、そうです。どうもありがとうございました。近くに(0,0)、私は完璧なグリッドを持っていますが、さらにこの点から行くと、悪いことがあります。 私はmapCanvasProjectionObjectを使って解決策を見つけようとします。それがうまくいくと思いますか?他に何かしようか? – Luke

+0

私は、緯度と経度が等しい場合に投影があると信じています。距離は等しく遠くに現れる。しかし、私は、等距離射影では、Google Mapsの射影下のLatLngを新しいLatLngに変換するのは難しいと思います。そこに数式があるかもしれません。私はGoogleマップの投影方法を変更する方法はわかりません。 –

答えて

2

をありがとう、私は最終的に問題が何であったかが分かりました。

私は重量(C++)を使用していますが、まあ問題

の一部ではないようです、それは実際にでした。 Wtはstd :: stringstreamを使用してJavaScriptコードを生成します。このオブジェクトには、doubleを与えるときにデフォルトの無限精度がありません。ちょうど6桁です。つまり、ポイントの前に1桁の数字がある場合は5桁、ポイントの前に2桁の数字がある場合は4桁後になります。 そのため、私たちはパリの経度に対しては偉大な精度を持っていましたが、緯度ではありませんでした(lngは6ですがlatは45です)。それで、New Yorkの緯度と経度の精度が悪いです(どちらも2桁前)

問題を解決するために、addCircle(およびaddMarkerとその他のすべての関数)にカスタム私の関数であり、私はまだ知らなかった std :: stringstream :: precision(int n) メソッドで使用されるstd :: stringstreamの精度を設定しました。

この問題はWt Redmineで報告されていますが、間もなく修正される可能性があります。

Heitor、muito obrigado pela ajuda。

あなたにお会いください、

関連する問題