Quantcast

GDALのPython版の精度

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

GDALのPython版の精度

Hiroshi Miura(@osmf)
三浦です。

先月、基盤地図情報のコンバーターについて、取組をご紹介しました。
現在、テストケースで悩んでおり、皆さんの知見をお聞かせ頂きたいです。

FGDConvプロジェクト

テスト結果

こちらの結果で、生成されるべきデータの正解を、GDALの
C++版のコマンドで生成しました。
ところが、PythonのGDALで生成したものと、値が異なるというのです。

結果3132行目を細かく見ますと、
実際:139.718509733734
期待:139.718509733734379
のように、桁が3桁も違っています。値はあっているようです。

なぜ、こんなに桁の精度が違うのでしょう?

該当するコードは、この辺ですが、値をPython側で明示的に処理しているわけではないので、不思議に思っています。

三浦

_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: GDALのPython版の精度

Taro Matsuzawa
松澤です。

C++の方のコードは .15f で、
Pythonの方のコードは .15g なので、
そこらへんから調べて見るとよいのではないでしょうか?
(latitudeだと2桁の違いになる)

また、Pythonの表示をするための文字に変換する組み込み関数の
repr()では物によっては .15g となります。
ただ、以下の結果だと期待したものにはなりませんでした。

 >>> repr(139.718509733734379)
'139.71850973373438'
 >>> format(139.718509733734379, '.15g')
'139.718509733734'

あと、gdal-2.0.2のコードが手元にあったので検索してみましたが、
決定的な所はわからなかったです。

ちなみに、座標の比較を行う時は必ず誤差がある前提で比較をします。
よくこんなのを先に定義してやったりします。

```python
     EPSILON1 = 0.1
     EPSILON2 = 0.01
     EPSILON3 = 0.001
     EPSILON4 = 0.0001
     EPSILON5 = 0.00001
     # ...
     EPSILON16 = 0.0000000000000001
     EPSILON17 = 0.00000000000000001
```

On 2017/04/23 9:19, Miura Hiroshi wrote:

> 三浦です。
>
> 先月、基盤地図情報のコンバーターについて、取組をご紹介しました。
> 現在、テストケースで悩んでおり、皆さんの知見をお聞かせ頂きたいです。
>
> FGDConvプロジェクト
> https://github.com/miurahr/fgdconv
>
> テスト結果
> https://travis-ci.org/miurahr/fgdconv/builds/223815639
>
> こちらの結果で、生成されるべきデータの正解を、GDALの
> C++版のコマンドで生成しました。
> ところが、PythonのGDALで生成したものと、値が異なるというのです。
>
> 結果3132行目を細かく見ますと、
> 実際:139.718509733734
> 期待:139.718509733734379
> のように、桁が3桁も違っています。値はあっているようです。
>
> なぜ、こんなに桁の精度が違うのでしょう?
>
> 該当するコードは、この辺ですが、値をPython側で明示的に処理しているわけで
> はないので、不思議に思っています。
> https://github.com/miurahr/fgdconv/blob/master/fgdconv/ogr2ogr.py#L82
>
> 三浦
>
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> [hidden email]
> https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
>


--
Georepublic Japan Ltd.
c/o CommunityLink
5-3-1 Kumoidori, Chuo Ward
Kobe 651-0096

Taro Matsuzawa
Senior Developer

eMail: [hidden email]
Web: https://georepublic.info

Tel: +81 (03) 6868 5418
Fax: +81 (03) 3374 0291
_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: GDALのPython版の精度

Hiroshi Miura(@osmf)
ありがとうございます。
おそらく、C/C++とPythonのブリッジを提供するSWIGによる制限ですね。

このあたりに、C++の .xxf は Fを落すと書いてあります。

三浦

2017年4月24日 12:42 Taro Matsuzawa <[hidden email]>:
松澤です。

C++の方のコードは .15f で、
Pythonの方のコードは .15g なので、
そこらへんから調べて見るとよいのではないでしょうか?
(latitudeだと2桁の違いになる)

また、Pythonの表示をするための文字に変換する組み込み関数の
repr()では物によっては .15g となります。
ただ、以下の結果だと期待したものにはなりませんでした。

>>> repr(139.718509733734379)
'139.71850973373438'
>>> format(139.718509733734379, '.15g')
'139.718509733734'

あと、gdal-2.0.2のコードが手元にあったので検索してみましたが、
決定的な所はわからなかったです。

ちなみに、座標の比較を行う時は必ず誤差がある前提で比較をします。
よくこんなのを先に定義してやったりします。

```python
    EPSILON1 = 0.1
    EPSILON2 = 0.01
    EPSILON3 = 0.001
    EPSILON4 = 0.0001
    EPSILON5 = 0.00001
    # ...
    EPSILON16 = 0.0000000000000001
    EPSILON17 = 0.00000000000000001
```


On 2017/04/23 9:19, Miura Hiroshi wrote:
三浦です。

先月、基盤地図情報のコンバーターについて、取組をご紹介しました。
現在、テストケースで悩んでおり、皆さんの知見をお聞かせ頂きたいです。

FGDConvプロジェクト
https://github.com/miurahr/fgdconv

テスト結果
https://travis-ci.org/miurahr/fgdconv/builds/223815639

こちらの結果で、生成されるべきデータの正解を、GDALの
C++版のコマンドで生成しました。
ところが、PythonのGDALで生成したものと、値が異なるというのです。

結果3132行目を細かく見ますと、
実際:139.718509733734
期待:139.718509733734379
のように、桁が3桁も違っています。値はあっているようです。

なぜ、こんなに桁の精度が違うのでしょう?

該当するコードは、この辺ですが、値をPython側で明示的に処理しているわけで
はないので、不思議に思っています。
https://github.com/miurahr/fgdconv/blob/master/fgdconv/ogr2ogr.py#L82

三浦


_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss



--
Georepublic Japan Ltd.
c/o CommunityLink
5-3-1 Kumoidori, Chuo Ward
Kobe 651-0096

Taro Matsuzawa
Senior Developer

eMail: [hidden email]
Web: https://georepublic.info

Tel: <a href="tel:%2B81%20%2803%29%206868%205418" value="+81368685418" target="_blank">+81 (03) 6868 5418
Fax: <a href="tel:%2B81%20%2803%29%203374%200291" value="+81333740291" target="_blank">+81 (03) 3374 0291
_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss


_______________________________________________
OSGeoJapan-discuss mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
Loading...