このブログについて

ブログ移転

謹賀新年
あけましておめでとうございます。
本年もよろしくお願いいたします。

さて、「OpenなGISのこと」ブログは下記に移転します。
今後ともよろしくお願いいたします。

OpenなGISのこと続き

2019年元旦

謹賀新年

2014年明けまして、おめでとうございます。
昨年は10月以降、諸々の事情ですっかりブログがstopしてしまいました。

「やらにゃいかん」とは思っていたのですが。。。

PythonもOpenLayersも中途半端ですが、
今年は、しっかりまとめ上げていきます。

よろしく!!

FOSS4G 2013 Tokyo

10月は結局ブログの更新ができませんでした。 PythonもOpenLayersのtutorialも中途半端ですね。

なんだか、色々と忙しくなって、事務所にゆっくりいる事ができません。

おまけに無謀にも、FOSS4G 2013 Tokyoにて発表することになりました。

11月1日の初っぱなですがな。

タイムテーブルはこちら

MapWinGISの話でもしようと考えていますが、大丈夫かなぁ???

まぁ、気軽にやりますかね。

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

今回の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で水文水理解析の目次に戻る。]]**