Monthly Archives: 9月 2013

水文水理解析ソフトウェアの販売セール終了

今回の2013年9月8日~9月25日の販売セール中のお問合せ、ご購入、誠にありがとうございました。

今後も水文水理解析ソフトウェア(Excel VBAソース公開版)を下記金額で購入いただけます。

  1. キネマティック法による流域流出解析¥150,000円
  2. 逐次計算法による1次元河床変動プログラム(tys-rba版)¥300,000円
  3. TVD-MacCormack法による1次元河床変動計算¥200,000円
  4. TVD-MacCormack法による1次元河床変動計算(支川考慮)¥250,000円
  5. TVD-MacCormack法による1次元河床変動計算(支川・斜面土砂流入考慮)¥300,000円
  6. 土石流シミュレーションVBA版¥260,000円

別途Fortran版のソースファイルもございます。

また、GIS関連商品におきましても、MapWinGISを使ったExcel上でのGIS解析softwareのExcelGISの販売やカスタマイズも行っております。 ExcelGISはデモ版もございます。

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

その他水文関連、砂防関連、水質関連ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。

水文水理解析ソフトウェア無償ダウンロード版につきましては、こちらからお願いします。

注意:登録ユーザーに公開しています。

水文水理解析ソフトウェアの販売セール後1日です。

合同会社TYSでは水文水理解析ソフトウェアの販売を行っております。

今回決算処分としまして、下記の4つのソフトウェアについて2013年9月25日の販売セール終了まで後1日となりました。

今回のソフトウェアはExcel VBAソース公開版として約25%OFFでご購入いただけます。

  1. キネマティック法による流域流出解析¥150,000円 -> ¥110,000円
  2. 逐次計算法による1次元河床変動プログラム(tys-rba版)¥300,000円 -> ¥220,000円
  3. TVD-MacCormack法による1次元河床変動計算¥200,000円 -> ¥150,000円
  4. 土石流シミュレーションVBA版¥260,000円 -> ¥190,000円

別途Fortran版のソースファイルもございます。

また、GIS関連商品におきましても、MapWinGISを使ったExcel上でのGIS解析softwareのExcelGISの販売も行っております。

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

また弊社ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。

その他水文関連、砂防関連、水質関連のシミュレーション・ソフトウェアも多数ございますので、お気軽にお問合せ下さい。

合同会社TYS

技術開発部

水文水理解析ソフトウェアの販売

弊社では水文水理解析ソフトウェアの販売を行っております。

今回決算処分第1弾、第2弾としまして、下記の4つのソフトウェアについて2013年9月25日の販売セール終了まで後1週間となりました。

今回のソフトウェアはExcel VBAソース公開版として約25%OFFでご購入いただけます。

  1. キネマティック法による流域流出解析¥150,000円 ->   ¥110,000円
  2. 逐次計算法による1次元河床変動プログラム(tys-rba版)¥300,000円 ->   ¥220,000円
  3. TVD-MacCormack法による1次元河床変動計算¥200,000円 ->   ¥150,000円
  4. 土石流シミュレーションVBA版¥260,000円 ->   ¥190,000円

別途Fortran版のソースファイルもございます。

また、GIS関連商品におきましても、MapWinGISを使ったExcel上でのGIS解析softwareのExcelGISの販売も行っております。

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

また弊社ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。

その他水文関連、砂防関連、水質関連のシミュレーション・ソフトウェアも多数ございます。

合同会社TYS

技術開発部

PythonでMySQLを使ってみる。基本編[Chapter 20]

====== PythonでMySQLを使ってみる準備編[Chapter 20] ======
[[http://blog.godo-tys.jp/2013/09/13/4266/|PythonでDatabaseを使ってみる準備編[Chapter 19] ]]に引き続き、Spatial Indexを扱えるOpen Source DatabseとしてPythonでMySQLを使用する基本を学んでおきます。

本tutorialは、[[http://www.packtpub.com/python-geospatial-development/book|Python Geospatial Development]]を参考にして、実践的に使えるPythonでGeoSpatialの使い方を学んでいくものです。

===== 準備 =====
Python環境については、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1] ]]と[[http://blog.godo-tys.jp/2013/07/11/2937/|PythonでGeoSpatial Dataの読み書きについて_1[Chapter 8] ]]でPythonとGeoSpatialに関するlibraryが設定できているもとして進めていきます。

===== MySQL =====
==== Install ====
MySQLのinstallについては、[[http://www.dbonline.jp/mysqlinstall/install/index2.html|MySQL 5.6.11 インストール]]を参考にしてください。
Oracleに買収されてから、installerが機能豊富すぎて本当に迷います。
今回使用するMySQLは、**mysql-installer-community-5.6.13.1.msi**を使います。(09/16/2013現在)

MySQLをcommand lineから起動後、正しくinstallされていると
{{http://blog.godo-tys.jp/wp-content/gallery/python_20/image01.jpg}}
のようにmysqlのmodeが表示されます。表示されない場合は、MySQLが正しくinstallされていないので、再度installしてください。

次に、PythonからMySQLを使うには、MySQL-Python driverが必要になります。
MySQL-Python driverは[[http://www.codegood.com/|Python driver download]]から取得します。ここでは、32bit環境で動かしているので、** MySQL-python-1.2.3.win32-py2.7.exe**をdownloadしてinstallします。

MySQL-Python driverは、
{{http://blog.godo-tys.jp/wp-content/gallery/python_20/image02.jpg}}
のようにPython programとMySQLをつなぐinterfaceとなります。

==== MySQL-Python driverの確認 ====
次に、driverが正しくinstallされているかの確認をしてみます。
PyScripterを起動して、
{{http://blog.godo-tys.jp/wp-content/gallery/python_20/image03.jpg}}
のようにインタープリタ画面に**import MySQLdb**を入力します。
エラーが表示されなければ、driverのinstallは完了です。
**help(MySQLdb)**でmoduleの確認ができます。

続けて、以下のcodeを入力してみます。
ここで、**user=”root”**, **passwd=”admin”**はinstall時のものに置き換えてください。

connection = MySQLdb.connect(user="root", passwd="admin")
cursor = connection.cursor()
cursor.execute("USE myDatabase")


すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_20/image05.jpg}}
のように接続状況が表示されます。

ここでは、あらかじめMySQLに**myDatabase**という名前でdatabaseを作成していたので、**0L**として行数が0の情報が表示されています。
MySQLの操作方法については、[[http://www.dbonline.jp/mysql/|MySQLの使い方]]等を参考にしてください。

==== MySQLのtabeleの作成 ====
MySQLでの polygonを含んだtableの作成は、

CREATE TABLE cities (
    id      INTEGER AUTO_INCREMENT PRIMARY KEY,
    name    CHAR(255),
    outline POLYGON NOT NULL,
    INDEX (name),
    SPATIAL INDEX (outline)
)


として、MySQLのcommand lineから実行します。

たとえば、POLYGONが有効なカラム・タイプで、直接geometryに空間のインデックスを作成することができることに注目してください。これは、次のようなSQLを出すことを可能にします。

SELECT name FROM cities WHERE MBRContains(outline, myLocation)


このSQL statementは、与えられた位置が都市のoutline内にあることをMBRContains() functionを使うことで該当する都市をすべて返します。

==== MySQLを使ったPython program ====
MySQLの能力の主な制限であるMBRContains() functionの最初の「MBR」は、 Minimum Bounding Rectangleを表わします。そのMBRContains functionは、pointが多角形の内部にあるかどうか実際に判断しません。
もっと正確に言えば、それは、pointがMinimum Bounding Rectangleの内部にあるかどうか判断します:
{{http://blog.godo-tys.jp/wp-content/gallery/python_20/image04.jpg}}

図に示すとおり、よりやや薄いgray pointがMinimum Bounding Rectangleの外部で、濃いblack pointはMinimum Bounding Rectangleの内部にあります。
これは、MBRContains() functionがfalse positivesを返すことを意味します。すなわちbounding rectangleの内部にあるが、polygonの外部であるpointとなります。

MySQLに完全に見切りをつける前に、このbounding rectangleの計算が何を与えるか考えてください。
たとえば、100万pointを持っており、どのpointが与えられたpolygon内にあるか速く決める必要があれば、MBRContains() functionはpolygonのbounding rectangleにあることによって、polygonの内部にあるかもしれない少数のpointまで狭めることができます。
その後、Databaseからpolygonを抽出し、Shapelyなどの別の機能を使用することができます。
次のcodeは、これらの数残るpointに関する最終計算を行う方法を含んでいます。

cursor.execute("SELECT AsText(outline) FROM cities WHERE ...") 
wkt = cursor.fetchone()[0]
polygon = shapely.wkt.loads(wkt)
pointsInPolygon = []
cursor.execute("SELECT X(coord),Y(coord) FROM coordinates " +
               "WHERE MBRContains(GEOMFromText(%s), coord)",
               (wkt,))
for x,y in cursor:
    point = shapely.geometry.Point(x, y)
    if polygon.contains(point):
        pointsInPolygon.append(point)


最初にMinimum Bounding Rectangle内のpointをすべて見つけて、次にpolygon内部で実際にあるかどうか確かめるために、pointをcheckしてくれるようにDatabaseに依頼します。このアプローチは少しだけ仕事を増やすころになります。しかし、典型的なpolygonのために、非常に効率的で計量することができます。

===== MySQLを使う意味 =====
Spatialの機能が制限されたとしても、MySQLは他の利点を持っています。また、実行処理時間も問題でもあります。しかし、geo-spatialのために、2つの主な長所を持ちます:
* MySQLはとてもポピュラーなDatabaseです。そして、すでに使用しているHosting Serverに簡単にセット・アップできます。また、MySQLが既にinstasllされるであろうということです。
* MySQLは、初心者でも取り扱いが容易なデータベースです。他のデータベース(特にPostgreSQL)は、正確に初心者が使用するのに困難なことで悪名高いものです。

===== 今回のまとめ =====
今回は、PythonでMySQLを使うときの基本事項について学びました。
次回はいよいよPostGISを使うときの基本事項について学んでいみます。

また、本tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや勘違いや翻訳間違いなど多々出てくると考えられます。
それは違うじゃん!!とかいろんな意見をいただければと思います。
そこんところ ヨロシク~~!!

**[[http://blog.godo-tys.jp/python-geospatial-tutorial/|Python GeoSpatial Tutorialの目次に戻る。]]**

Pythonのmatplotlibの日本語表示

====== Pythonのmatplotlibの日本語表示 ======
すぐに忘れてしまうので、**matplotlibで日本語を表示**させる方法を書き留めておきます。
PyScripterを起動して、以下のcodeを新規作成して入力します。

#! C:¥Python27¥python.exe
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

from matplotlib import font_manager

# 日本語fontの設定
font_path = 'C:¥¥Windows¥¥Fonts¥¥msgothic.ttc'
font_prop = font_manager.FontProperties(fname=font_path)
font_prop.set_style('normal')
font_prop.set_weight('light')
font_prop.set_size('12')

time = np.linspace(0,100,21) # create time variable

rainfall = np.random.rand(21) # generate rainfall

# bar plot
plt.bar(time,rainfall)
plt.xlabel(u'時間',fontproperties=font_prop)
plt.ylabel(u'時間降雨量', fontproperties=font_prop)
plt.savefig('F:¥¥python_in_hydrology¥¥png¥¥rain_jp.png')
plt.show()


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

このcodeは、
matplotlib.font_managerを呼び出して、日本語fontの設定を

# 日本語fontの設定
font_path = 'C:¥¥Windows¥¥Fonts¥¥msgothic.ttc'
font_prop = font_manager.FontProperties(fname=font_path)
font_prop.set_style('normal')
font_prop.set_weight('light')
font_prop.set_size('12')


で行います。
**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

そして、日本語を表示させる場合は
**plt.xlabel(u’時間’,fontproperties=font_prop)**
で**fontproperties**を指定します。

上記codeを実行すると
f:¥python_hydrology¥png¥にrain_jp.pngが
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_apdx/rain_jp.png}}
のように出力されます。
また、windows上には、
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_apdx/image01.jpg}}
のようにWindows上にplot図が作成されます。

システム環境自身を日本語対応にするやり方については、[[http://plog.web-hack.org/2011/01/matplotlib.html|matplotlibで、日本語を表示させるための3ステップ設定]]が非常に参考になります。

**[[http://blog.godo-tys.jp/python%E3%81%A7%E6%B0%B4%E6%96%87%E6%B0%B4%E7%90%86%E8%A7%A3%E6%9E%90/|Pythonで水文水理解析の目次に戻る。]]**

水文解析の基本_3 [Chapter 4]

====== Pythonで水文水理解析をやってみる。[Chapter 4] ======
[[http://blog.godo-tys.jp/2013/09/05/4230/|水文解析の基本_2 [Chapter 3] ]]に引き続き、raifall(降水量)について学んでいきます。

このTutorialは、[[http://www.greenteapress.com/pythonhydro/pythonhydro.html|Python in Hydrology]]を使って、Pythonの基本的な勉強と**Pythonで水文水理解析**の勉強していきます。

===== 水文解析の基本 =====
本章の中の問題は、chowによって「応用水文学」というタイトルの本からのものです。また、それらの詳細な記述については、「応用水文学」の本を参照してください。このtutorialは、水文学の中で一般的な方程式を含んでいます。
水文学の基本として、まずは、以下の7項目について、Pythonを使って学んでいきます。
– Water Vapor(水蒸気)
– Precipitation(降雨)
– Rainfall(降水量) ->**今回はここ**
– Evaporation(蒸発散)
– Infiltration(浸透)
– Surface water(表面流)
– River Routing–Muskingum method(マスキンガム法による河道流)

===== Rainfall(降水量) =====
Rainfall(降水量)時系列を使って、pythonでplotを行ってみます。

==== 降水量時系列データのplot ====
まずは、降水量時系列データを作成します。
時間とそのときの降水量を定義します。降水量はrandam関数を使って計算してみます。
PyScripterを起動して、インタープリタ画面で以下のcodeを入力します。

import numpy as np
time = np.linspace(0,100,21) # create time variable
time
rainfall = np.random.rand(21) # generate rainfall
rainfall

timeとrainfallが
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/image01.jpg}}
のようにデータが作成されます。
これをbar plotしてみましょう。
上記のcodeに続けて以下のcodeを入力します。

import matplotlib.pyplot as plt
plt.bar(time,rainfall)
plt.xlabel('Time')
plt.ylabel('Incremental rainfall')
plt.savefig('F:¥¥python_in_hydrology¥¥png¥¥rain.png')


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

上記codeを入力すると
f:¥python_hydrology¥png¥にrain.pngが
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/rain.png}}
のように出力されます。
Windows上に出力させるには、以下のcodeを追加します。

plt.show()


すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/image03.jpg}}
のようにWindows上にplot図が作成されます。

==== 累積降水量データのplot ====
次に、累積(cumulative sum)降水量をplotしてみましょう。
累積値の計算は、以下のcodeになります。

cum_rainfall = np.cumsum(rainfall)


続けてインタープリタ画面で以下のcodeを入力します。

plt.clf() #current figure clear
plt.plot(time,cum_rainfall) #xy plot
plt.xlabel('Time')
plt.ylabel('Cummulative rainfall')
plt.savefig('F:¥¥python_in_hydrology¥¥png¥¥cum_rain.png')


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

上記codeを入力すると
f:¥python_hydrology¥png¥にcum_rain.pngが
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/cum_rain.png}}
のように出力されます。
Windows上に出力させるには、**plt.show()**を追加します。

==== 地点ごとの降水量データのcontour図 ====
降水量は、地点ごとに変わるため、内挿して観測点のない降水量を求めることも必要になってきます。
また、降水量のcountourを作成することで空間的な情報を得ることができます。
まずは、xy地点を作成してplotしてみます。
以下のcodeをインタープリタ画面に入力します。

# import required modules
import numpy as np
import matplotlib.pyplot as plt
#genrate locations and rainfall
x = np.random.rand(10)
y = np.random.rand(10)
rain = 10*np.random.rand(10)

#plot the locations
plt.scatter(x,y)
plt.xlabel('X')
plt.ylabel('Y')
plt.savefig'F:¥¥python_in_hydrology¥¥png¥¥loc.png')


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

上記codeを入力すると
f:¥python_hydrology¥png¥にloc.pngが
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/loc.png}}
のように出力されます。
Windows上に出力させるには、**plt.show()**を追加します。

次に降水量データをxyのgridデータに内挿します。

from scipy.interpolate import griddata
#generate the desired grid, where rainfall is to be interpolated
X,Y = np.meshgrid(np.linspace(0,1,1000), np.linspace(0,1,1000))

#perform the gridding
grid_rain = griddata((x,y), rain, (X, Y))

内挿後、

plt.clf()
plt.contourf(X,Y,grid_rain) #countour
plt.colorbar() #color legend 
plt.xlabel('X')
plt.ylabel('Y')
plt.scatter(x, y, s=30, c='r')
plt.xlim((0,1))
plt.ylim((0,1))
plt.savefig('F:¥¥python_in_hydrology¥¥png¥¥grid_rain.png')


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

上記codeを入力すると
f:¥python_hydrology¥png¥にgrid_rain.pngが
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/grid_rain.png}}
のようにcontourが出力されます。
Windows上に出力させるには、**plt.show()**を追加します。

今回作成したcontour作成flowは、
{{http://blog.godo-tys.jp/wp-content/gallery/python_hydrology_04/image04.jpg}}
のようになります。

contourfのhelpについては、

import matplotlib.pyplot
help(matplotlib.pyplot.contourf)


で使用方法を確認することができます。

contour図の作成はよく使うので、覚えておくとよいですね。

===== 今回のまとめ =====
**水文解析の基本_3 [Chapter 4]**のrainfall(降水量)のデータを使ったplotについて勉強しました。
次回は、Evaporation(蒸発散)について勉強していきます。
**[[http://blog.godo-tys.jp/python-geospatial-tutorial/|Python GeoSpatial Tutorial]]**ではGISについてblogを書いていますので、GISに興味のある方はのぞいてみてください。

また、本Tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや翻訳の勘違いも多々出てくると考えられます。
特に英語から日本語への専門用語の翻訳については、プロではないので、「それは違うじゃん!!」とかいろんな意見をいただければと思います。

**[[http://blog.godo-tys.jp/python%E3%81%A7%E6%B0%B4%E6%96%87%E6%B0%B4%E7%90%86%E8%A7%A3%E6%9E%90/|Pythonで水文水理解析の目次に戻る。]]**

PythonでGUIを試してみる。

====== PythonでGUIを試してみる。 ======
今回は、[[http://www.wxpython.org/|wxPython]]を使って、PythonでGUIを作成してみました。
[[http://www.wxpython.org/|wxPython]]を使うことで、簡単にGUI画面を作成できます。
ネタ本は、[[http://www.cutt.co.jp/book/978-4-87783-289-6.html|wxPython GUIプログラミング]]です。
Windowsだけでなく、OSに依存しないGUIを作るのにPythonを使うのはいいんじゃないでしょうか?
最終的には、水文水理解析のPython programをGUI環境で使うことを想定しています。

とりあえず、[[http://www.wxpython.org/|wxPython]]をinstallして動かしてみましょう。

===== wxPythonのinstall =====
Pythonは2.7.5を使います。
Pythonのinstallと設定は、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1] ]]を参考にしてください。

次に、[[http://www.wxpython.org/|wxPython]]をinstallします。
[[http://www.wxpython.org/download.php|wsPython dpwnload]]から、今回は、**wxPython2.8-win32-unicode-py27.exe**をdawonloadして、installします。
これで、とりあえずはOKです。

===== 初めてのGUI =====
おきまりのhello worldをやってみます。
PyScripterを立ち上げて、以下のcodeを入力します。

#! C:¥Python27¥python.exe
# -*- coding: utf-8 -*-

import wx

def main():
    app = wx.App()
    frame = wx.Frame(None, -1, u'日本語でこんにちわ')
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

そして、編集->ファイルフォーマット->UTF-8に変更して、f:¥wxpython¥Hello_world_module1.pyで保存します。

code自身はいたって簡単ですね。

import wx

でmodule importします。

次に、

app = wx.App()

でobjectをinstanceします。
後は、frame objectをinstanceして、windowを表示させます。

最後に、

app.MainLoop()

でMainLoopの呼び出しを行い、eventのキャッチを行います。今回は、無限loopになっています。

保存後、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_gui_01/image01.jpg}}
のようにwindowが表示されます。

簡単にGUIを作成することができました。
visual studioの環境のようなGUIもあるので、使い方次第ではOSに依存しないGUI環境を作れますね。

===== Python GUI 開発環境 =====
GUIの開発は、以下のアプリケーションがあります。好みものを使えば良いかと。
– [[http://boa-constructor.sourceforge.net/|boa constructor]] -> codeの補完機能をついたGUI Editor(2007年から更新stop)
– [[http://wxglade.sourceforge.net/|wxGlade]]
– [[http://sourceforge.net/projects/wxformbuilder/|wxFormBuilder]] -> これを使う予定。
– [[http://python.keicode.com/devenv/install-pydev.php|PyDev]] -> Eclipseのplugin GUI機能はない。
などあります。

===== 最後に =====
日本語での参考になる資料は、
– [[http://www.python-izm.com/contents/gui/wxpython.shtml|Python-izm]] -> お勧めです。
– [[http://labs.beatcraft.com/ja/index.php?Python%2FwxPython%A4%CB%A4%E8%A4%EBWindowsGUI%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0|Python/wxPythonによるWindowsGUIプログラミング]]
– [[http://python.keicode.com/advanced/wxpython-helloworld.php|Python入門]]
– [[http://www.atsuhiro-me.net/python/dev/py2exe|py2exeでwxpythonのGUIアプリケーションを作成]]
などなど、たくさんあります。

しかし、[[http://www.riverbankcomputing.co.uk/software/pyqt/intro|PyQt]]も捨てがたしですね。

このwxPythonですが、[[http://www.wxwidgets.org/|wxWidgets]]のラッパーで、PHPなどの別言語でも使えるという点が非常に興味があります。例えば、同じGUIで言語を変えることができるということですね。
参考として、
– [[http://wiki.wxphp.org/Introduction_to_using_wxPHP_Example|Introduction to using wxPHP Example]]
– [[http://www.wxwidgets.org/|wxWidgets]]
– [[http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html|wxWidgetsのススメ]]
などもあります。

PythonでDatabaseを使ってみる準備編[Chapter 19]

====== PythonでDatabaseを使ってみる準備編[Chapter 19] ======
[[http://blog.godo-tys.jp/2013/08/05/3566/|Pythonでgeometryと距離の変換と標準化_3[Chapter 18] ]]に引き続き、PythonでDatabaseを使用する基本を学んでおきます。

本tutorialは、[[http://www.packtpub.com/python-geospatial-development/book|Python Geospatial Development]]を参考にして、実践的に使えるPythonでGeoSpatialの使い方を学んでいくものです。

===== 準備 =====
Python環境については、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1] ]]と[[http://blog.godo-tys.jp/2013/07/11/2937/|PythonでGeoSpatial Dataの読み書きについて_1[Chapter 8] ]]でPythonとGeoSpatialに関するlibraryが設定できているもとして進めていきます。

===== Spatially-enabled databases =====
GISでDatabseを扱う場合、地理空間情報を扱うことができなければなりません。

ある意味では、ほとんどどんなDatabseも地理空間データ単に格納するために使用することができます、geometryをWKTフォーマットに変換し、テキスト・カラムに結果を格納すればですが。
しかし、これでは地理空間データを格納することはできても、有用な方法ではありません。

空間的処理が可能なDatabase(Spatially-enabled databases)は、空間についての概念をもっており、空間のオブジェクトおよび概念を用いて直接的にDatabaseをそうさすることができます。
特に、空間的処理が可能なDatabaseは、次のような機能を持つことになります。

– **直接Datbaseにspatial data typesとして保存することができる。**(geometry column形式として)
– **空間検索(spatial queries)が実行できる。**例えば、select all landmarks within 10 km of the city named “San Francisco” のようなSQLが実行できる。
– **空間結合(spatial joins)が実行できる。**例えば、select all cities and their associated countries by joining cities and countries on (city inside country) のようなSQLが実行できる。
– **空間関数(spatial functions)を使って新しいobjectを作成できる。**例えば、set “danger_zone” to the intersection of the “flooded_area” and “urban_area” polygons  のようなfunctionLが実行できる。

空間的処理が可能なDatabaseは、地理空間データを用いて作業するための非常に強力なツールです。そして、空間index(spatial indexes)および他の最適化の使用によって、空間的処理が可能なDatabaseは速くこれらのタイプのオペレーションを行なうことができ、莫大な量のデータを簡単に処理することができます。

===== Spatial indexes =====
空間のデータベースの定義する特性のうちの1つはgeometryに基づいた探索を促進する特別の空間indexを作成する能力です。
これらのindexは与えられたbounding box内に位置するfeatureをすべて識別するか、与えられたpointのある距離内のfeatureをすべて識別するか、与えられたpolygonと交差するfeatureをすべて識別するような空間の操作を行なうために使用されます。

空間indexのキーワードSPATIALを加えること以外は、通常のDatabase indexを定義するのと同じ方法で定義されています。
例えば、

CREATE TABLE cities (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name CHAR(255),
geom POLYGON NOT NULL,
INDEX (name),
SPATIAL INDEX (geom)
)

このDatabaseの章で使う3つのOpen Source Spatial Databaseは、R木(R-Tree)データ構造を使用する空間indexを持っています。

R木(R-tree) indexは空間のデータベースの中で最も強力な特徴のうちの1つです。
R木は、各々geometryがdatabaseでの位置を使用して、gfeometryを速く捜すことを可能にするために最小の長方形となるようにします:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image01.jpg}}

これらのbounding boxは、ともに、それらがどれくらい接近してあるかに基づいた入れ子の階層へグループ化されます:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image02.jpg}}

その後、入れ子のbounding boxの階層は木のようなデータ構造を使用して表わされます:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image03.jpg}}

特別のgeometryを見つけるかあるいは様々なgeometryの位置あるいはサイズを比較するために、コンピューターは、この木によって速く走査することができます。
例えば、Xによって最後のものに先行する図に表わされるポイントを含んでいるgeometryは、木を横断し各レベルにbounding boxを比較することにより速く見つけることができます。
R木(R-tree)は次の方法で探索されるでしょう:
{{http://blog.godo-tys.jp/wp-content/gallery/python_19/image04.jpg}}

R木(R-tree) indexを使用して、polygonを見つけることはわずか3つの比較しか必要としませんでした。

Tree構造の階層的性質のために、R木(R-tree) indexは、またわずかなbounding boxの比較を使用して、多数のfeatureを隅々まで捜すことができます。
また、まさにgeometryが単純な bounding boxになるので、R木(R-tree)はpolygonだけでなく任意のタイプのgeometryをサポートすることができます。

R木(R-tree) indexは囲まれた座標を単に探索することだけではありません。それらは、空間の比較のすべての種類および空間の接合個所に使用することができます。

===== 今回のまとめ =====

今回は、GISでDatabaseを使うときの基本事項について学びました。
次回はいよいよOpen Source Databaseを使ったGeoSpatialなDatabaseを使ってみます。

また、本tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや勘違いや翻訳間違いなど多々出てくると考えられます。
それは違うじゃん!!とかいろんな意見をいただければと思います。
そこんところ ヨロシク~~!!

**[[http://blog.godo-tys.jp/python-geospatial-tutorial/|Python GeoSpatial Tutorialの目次に戻る。]]**

水理解析ソフトウェア販売 25%OFF 第2弾

弊社では水文水理解析ソフトウェアの販売を行っております。

今回決算処分第2弾としまして、下記のソフトウェアについて2013年9月25日まで、Excel VBAソース公開版として約25%OFFでご購入いただけます。

  1. 土石流シミュレーションVBA版¥260,000円 ->   ¥190,000円

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

また弊社ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。また、砂防関連のシミュレーション・ソフトウェアも多数ございます。

合同会社TYS

技術開発部

水理解析ソフトウェア販売 25%OFF 第1弾

弊社では水文水理解析ソフトウェアの販売を行っております。

今回決算処分第一弾としまして、下記の3つのソフトウェアについて2013年9月25日まで、Excel VBAソース公開版として約25%OFFでご購入いただけます。

  1. キネマティック法による流域流出解析¥150,000円 ->   ¥110,000円
  2. 逐次計算法による1次元河床変動プログラム(tys-rba版)¥300,000円 ->   ¥220,000円
  3. TVD-MacCormack法による1次元河床変動計算¥200,000円 ->   ¥150,000円

別途Fortran版のソースファイルもございます。

ご注文は、お問い合わせあるいはお電話にて、ソフトウェアの購入希望でご連絡をお願いします。

また弊社ソフトウェアのカスタマイズ、その他のソフトウェアの価格などにつきましても、お問い合わせあるいはお電話にてお気軽にご相談ください。

合同会社TYS

技術開発部