【メモ】C++からC言語を呼び出すための方法

目安時間:約 2分

C++で書いているけど、Cのソースコードを読み込みたいときがある。

 

しかし、普通にC++からCの関数を呼び出すと、

 

というエラーになってしまう。

 

 

調べてみると、C++コンパイラは、マングル(mangle)と呼ばれる仕組みがあり、

 

オーバーロードの実現のためなどに、引数の型やクラス・名前空間名を使って

 

修飾された一意の名前を作成して、引き当てに使っているらしい。

 

しかしCコンパイラはマングリングしないため、

 

マングル前の素の名前になっている。

 

それで引き当てに失敗してしまうということだ。

 

対策としては、C++コンパイラに対して、

 

Cの関数であることを明示し、マングリングしないようにさせる必要がある。

 

 

そのためには、以下のようにするだけで、Cのソースコードを利用できるようになる。

 

 

いいね!

 

■参考

http://www.wagavulin.jp/entry/2017/02/09/215036

 

カテゴリ:C++  [コメント:0]

どうやら出向することになりそうだ

目安時間:約 2分

自分は英語が大っ嫌いだ。

 

なぜ嫌いなのかは自分でもわからない。

 

新しいプログラム言語を覚えることはとても楽しいのに、

 

新しい英単語や文法を覚えるのは大っ嫌いだ。

 

 

これまで英語にできるだけ関わらないように生きてきた。

 

大学時代も最低限しかやってこなかった。

 

社会人になってもほとんど英語を使うことなくやってきた。

 

使うとしてもgoogle翻訳にすぐ頼って生きてきた。

 

そんな自分が英語メインの会社に出向することになってしまった。。。

 

 

こればっかりはサラリーマンなので、拒否することはできない。

 

ならばいっそ、このタイミングで英語を習得し、

 

英語ができる意識高い系の人間になればいいのではないか?

 

そうだ、英語をやろう!!

 

ということで、英語を頑張ることにした。

 

 

タグ:

カテゴリ:英語  [コメント:0]

QGIS3.0 プロキシの設定について

目安時間:約 4分

恥ずかしながら、最近になってようやくQGISを使い始めた。

 

他の部署ではよく使っていたようだが、

 

私のいる部署はシステム部署なので、

 

内製のビューワーがあり、QGISなんて使うより、

 

内製で作ったビューワーのほうが便利だと思って(信じて)

 

あえてQGISを使わずに生活してきた。

 

しかし、最近Shape形式のファイルや、GeoJSON形式のファイルを手に入れたときに、

 

ささっとビューワーで見て、ささっと編集したいと思うのだが、

 

内製のビューワーでは、スクリプトを書く必要があったので、

 

もっと簡単にできないかと思ったらQGISにたどり着いていた。

 

 

たまには他のビューワーの機能もみてみて、

 

それを内製のビューワーに生かすのもいいなぁとも思ったので、

 

QGIS3.0をWindowsインストールして、軽く使ってみることにした。

 

 

その結果、めちゃめちゃ便利でびっくりした。

 

なんということでしょう。

 

「レイヤ」→「レイヤの追加」→「ベクタレイヤの追加」で

 

ファイルを選択するだけで、

 

勝手に拡張子を判断して、勝手に座標が入っているカラムを判断して、

 

画面上にベクトル地図が表示されるではありませんか!!

 

 

QGISやるな。。。と認めざるを得ない。。。

 

 

さらにOpenStreetMapのラスターも背景に表示できるようで、

 

試してみたが、会社の環境では表示されなかった。

 

こういう時はたいていプロキシである。

 

プロキシの設定

 

プロキシの設定をしてみた。

 

「設定」→「オプション」

 

 

こちらに適切な値を入力。

 

これでベクターも表示できるようになると思います。

 

 

QGIS便利だなぁ。これが無料で提供されているとか、どゆこと!?

 

さらにpythonでプラグインを追加できる模様。

 

これはやるしかない。

 

今後QGISの記事を書いていくかもしれません。

 

タグ: 

カテゴリ:QGIS  [コメント:0]

2点間の距離(ヒュベニの公式)

目安時間:約 2分

地図を扱っていると、2点間の距離を計算することがよくある。

 

平面上での2点間の距離は、学生時代に数学で習った式で計算することができる。

 

ただ、それでは正確な距離とは言えない。

 

 

地球の丸みを考慮した距離を計算したいときにはどうすればよいか。

 

方法はたくさんあるが、最も簡単でそれなりの精度が計算できる、

 

ヒュベニ(Hubeny)の公式を用いることが多い。

 

詳細な計算式や概念は他のサイトを探せばたくさん見つかるため

 

ここでは割愛させていただく。

 

例えば以下のサイトはとても分かりやすい。

 

二地点の緯度・経度からその距離を計算する

 

参考サイトではJavaの実装が書かれていたが、

 

私はC++を使っているため、C++でHubenyクラスを作成した。

 

 

 

使い方は簡単である。

 

 

 

計算すると以下の値となり、参考サイトと同じ値となった。

 

 

今度時間があればヒュベニ(Hubeny)以外の計算も試してみたいところ。

 

PostgreSQL9.2にPostGISをインストール

目安時間:約 6分

今まで仕事でSQLServerを使っていましたが、

 

今回の案件はpostgreSQLを使用することになったため、

 

インストールして試してみることにしました。

 

また、今回の案件は、アプリの制約で32bitのPostgreSQLの9.2を使うことになっています。

 

それではインストールしてみましょう。

 

PostgreSQLのインストール

 

まずはPostgreSQLのインストールです。

公式サイトからバージョンを指定して、インストールしました。

 

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

 

 

んん、9.2はNot supportedになっている。。。

 

うーん、でも9.2を使うのは決まりなので、そのまま行きます。

 

インストーラを実行して、基本的には全て「次へ」で問題ありませんでした。

 

 

すると、以下にインストールされます。

 

C:\Program Files\PostgreSQL\9.2\bin

 

起動

 

pgAdminを起動します。

 

C:\Program Files\PostgreSQL\9.2\bin\pgAdmin3.exe

 

 

まずはデータベースを作成します。

 

「データベース」を右クリックして、「新しいデータベース...」を選択。

 

今回はsampleDBという名前でDBを作りました。

 

 

ここにデータを流し込めば、自由に使えますね。

 

PostGISのインストール

 

次にPostGISのインストールを行います。

 

純粋に公式サイトのものをダウンロードすればよかったのですが、

 

少しでも新しいほうが良いかなと思って、

 

開発版を含むサイトからインストールすることにしました。

 

http://winnie.postgis.net/download/windows/pg92/buildbot/

 

 

下記のzipをダウンロード&解凍します。

postgis-pg92-binaries-2.2.2w32gcc481.zip

 

そして、解凍後のフォルダ内に存在する「bin」「gdal-data」「lib」「share」を

postgreSQLのbinフォルダにコピーします。

 

↓↓↓↓↓↓↓↓

 

 

これで準備はOKです。

 

pgAdmin3.exeを起動します。

 

そして、データベースを選択して、虫眼鏡にSQLと書かれたボタンを押下。

 

表示されたエディタに下記のコマンドを入力し、実行を押下します。

 

すると、、、

 

 

えええええええ、エラー!!!

 

 

「C:/Program Files/PostgreSQL/9.2/lib/」に間違いなく「postgis-2.2.dll」が存在しているため、

 

なぜロードできないのかわからない。権限の関係かと思って、

 

権限の見直しをしたが、改善せず。結局原因がわからなかった。

 

一つ気になったのは、zipファイルの名前にdevと書かれているのが気になって、

 

devが書かれていないzipファイルをアーカイブから探しました。

 

そしたら以下のzipがあったので、こちらを使用。

 

http://winnie.postgis.net/download/windows/pg92/buildbot/archive/

postgis-pg92-binaries-2.1.7w32.zip

 

すると、、、

 

パンパカパーン、うまくいきました!!

 

pgAdmin3.exeで見てみると、

 

 

EXTENTIONに追加されてるぅ。

 

なんとかインストール成功しました。

 

これからPostGISをいじり倒していきたいと思います。

 

タグ:

カテゴリ:PostGIS PostgreSQL  [コメント:0]

ページの先頭へ