<div dir="ltr">朝日さん<div><br></div><div>ありがとうございます。</div><div>AutoFieldsプラグイン、使えそうですね。</div><div>ユーザーにプラグインをインストールさせるという作業があるのと、</div><div>バージョンアップなどで突然使えなくなるということが無ければいいですが、</div><div>うまく使えば便利なプラグインですね。<br><br>設定がどこに保存されているのかがわかりませんので、</div><div>うまく設定したプロジェクトを配布できればいいんですが。</div><div><br></div><div>北海道 喜多耕一</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016年8月25日 17:54 朝日孝輔 <span dir="ltr"><<a href="mailto:waigania13@gmail.com" target="_blank">waigania13@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">喜多さん<br>
<br>
少し前のスレッドへの返答失礼いたします。<br>
朝日です。<br>
<br>
AutoFields pluginというのがリリースされていました。<br>
 <a href="http://plugins.qgis.org/plugins/AutoFields/" rel="noreferrer" target="_blank">http://plugins.qgis.org/plugin<wbr>s/AutoFields/</a><br>
 <a href="http://geotux.tuxfamily.org/index.php/en/geo-blogs/item/333-autofields-plugin-for-qgis" rel="noreferrer" target="_blank">http://geotux.tuxfamily.org/in<wbr>dex.php/en/geo-blogs/item/333-<wbr>autofields-plugin-for-qgis</a><br>
<br>
これを試してみるとどうでしょう? <br>
出たてのpluginで信頼できるものかわかっておりませんが、<wbr>要件を満たさない場合もこれをベースにするorリクエスト上げて<wbr>いくとよいんじゃないかと。<span class=""><br>
<br>
On 2016/07/29 16:42, 喜多耕一 wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
赤木さん<br>
<br>
喜多です。<br>
<br>
ご丁寧に教えていただき、ありがとうございます。<br>
教えていただいたサイトを見て、勉強してみます。<br>
<br>
いろいろお手数をおかけして、申し訳ありませんでした。<br>
<br>
北海道 喜多耕一<br>
<br>
<br></span>
2016/07/29 16:28 "Minoru Akagi" <<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a> <mailto:<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a>>>:<span class=""><br>
<br>
    喜多さん<br>
<br>
    > 難しいでしょうか?<br>
<br>
    ちょっと難しくなりますが、地物フォーム内の年度、地区番号フィ<wbr>ールドの値が変更されるたびにID番号フィールドの値を自動設定<wbr>するという方法であればPython初期化コードでもできます(<wbr>よりよい方法があるかもしれませんが)。サンプルスクリプト[<wbr>1]をGistにアップロードしましたが、実際に使用するのはP<wbr>ythonにある程度慣れてからの方がいいかと思います。<br>
<br>
    > 自分でも勉強したいのですが、<br>
    ><br>
    QGISのPythonコードのわかりやすい事例などがあるWe<wbr>bページなどはありますか?<br>
<br>
    Pythonの学習については公式の日本語チュートリアル[2]<wbr>・リファレンス[3]等が整備されていますのでそれらを用いれば<wbr>十分可能かと思います。QGISの中でPythonを使うにはQ<wbr>GISの基礎となっているQtライブラリやQGISのライブラリ<wbr>について知る必要があります。まずはPyQGIS<br>
    Developer<br>
    Cookbook[4]を一通り読んでみるのがいいかもしません<wbr>。サンプルコードも結構含まれていますよ。<br>
<br>
    [1] <a href="https://gist.github.com/minorua/86c22f5298b00c6c7a61e9b2e9b7f46b" rel="noreferrer" target="_blank">https://gist.github.com/minoru<wbr>a/86c22f5298b00c6c7a61e9b2e9b7<wbr>f46b</a><br>
    [2] <a href="http://docs.python.jp/2/tutorial/index.html" rel="noreferrer" target="_blank">http://docs.python.jp/2/tutori<wbr>al/index.html</a><br>
    [3] <a href="http://docs.python.jp/2/reference/index.html" rel="noreferrer" target="_blank">http://docs.python.jp/2/refere<wbr>nce/index.html</a><br>
    [4]<br>
    <a href="http://docs.qgis.org/2.8/ja/docs/pyqgis_developer_cookbook/index.html" rel="noreferrer" target="_blank">http://docs.qgis.org/2.8/ja/do<wbr>cs/pyqgis_developer_cookbook/<wbr>index.html</a><br>
<br>
    赤木 実<br>
<br>
    2016年7月28日 21:53 喜多耕一 <<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a><br></span>
    <mailto:<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a>><wbr>>:<span class=""><br>
    > 赤木さん<br>
    ><br>
    > 喜多です。<br>
    > 詳しい返信有り難うございます。<br>
    ><br>
    確かに、教えていただいたコードで、新規追加時のみ初期値を設定<wbr>することができました。<br>
    ><br>
    > もしよろしければ、もう少しご教授頂きたいのですが、<br>
    > 今回はフォームを開くときに初期値を設定できましたが、<br>
    > フォームを閉じるときに値を設定することはできるのでしょうか?<br>
    > これができれば、初めに質問した2つ目の質問で、<br>
    > 「ID番号」フィールドを非表示にして、<br>
    > 「年度」フィールドと「地区番号」フィールドに値を入力し、<br>
    > フォームを閉じるときに「ID番号」がNULLなら、<br>
    ><br>
    年度+地区番号をID番号フィールドに入れるということができる<wbr>気がします。<br>
    > 難しいでしょうか?<br>
    ><br>
    ><br>
    > Pythonのコードがわからなく、質問ばかりで申し訳ありませ<wbr>ん。<br>
    ><br>
    > 自分でも勉強したいのですが、<br>
    ><br>
    QGISのPythonコードのわかりやすい事例などがあるWe<wbr>bページなどはありますか?<br>
    ><br>
    > おいそがしいところ申し訳ありません。<br>
    > よろしくお願いします。<br>
    ><br>
    ><br>
    > 北海道 喜多耕一<br>
    ><br>
    ><br>
    ><br>
    ><br>
    ><br>
    ><br>
    > 2016年7月28日 18:11 Minoru Akagi <<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a><br></span>
    <mailto:<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a>>>:<span class=""><br>
    ><br>
    >> QGIS<br>
    >><br>
    2.16では属性フォームのクラス(QgsAttributeF<wbr>orm)にフォームのモードを得るメソッド(mode)が追加さ<wbr>れており[1]、追加か編集かを判別できるはずなのですが試した<wbr>ところ期待する値が得られません。<wbr>本体の修正が必要なのだろうと思います。<br>
    >><br>
    当座の手法として次のコードはいかがでしょうか。地物の属性値が<wbr>全てNULLの場合のみ初期値を設定しています。スタンドアロン<wbr>版のQGIS<br>
    >> 2.16 (64ビット)で動作確認しました。<br>
    >><br>
    >> ------------------------------<wbr>------------------------------<wbr>-----<br>
    >> # -*- coding: utf-8 -*-<br>
    >> from PyQt4.QtGui import QLineEdit<br>
    >> from qgis.gui import QgsAttributeForm<br>
    >><br>
    >> def my_form_open(dialog, layer, feature):<br>
    >>     # if dialog.mode() == QgsAttributeForm.AddFeatureMod<wbr>e:<br>
    >>     attrset = set(feature.attributes())<br>
    >>     attrset.discard(None)<br>
    >>     if not attrset:<br>
    >>         dialog.findChild(QLineEdit, u"type").setText(u"3")<br>
    >>         dialog.findChild(QLineEdit, u"name").setText(u"カボチャ")<br>
    >> ------------------------------<wbr>------------------------------<wbr>-----<br>
    >><br>
    >> [1]<br>
    >><br>
    <a href="https://qgis.org/api/classQgsAttributeForm.html#ad219d225b812c355d303dc21e6c253f3" rel="noreferrer" target="_blank">https://qgis.org/api/classQgsA<wbr>ttributeForm.html#ad219d225b81<wbr>2c355d303dc21e6c253f3</a><br>
    >><br>
    >><br>
    >> 赤木 実<br>
    >><br>
    >><br>
    >><br>
    >> 2016年7月28日 16:30 喜多耕一 <<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a><br></span>
    <mailto:<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a>><wbr>>:<span class=""><br>
    >> > 赤木さん<br>
    >> ><br>
    >> > 喜多です。<br>
    >> > ありがとうございます。<br>
    >> ><br>
    >> > 地物編集時に上書きされてしまうなら、ちょっとの使えません。<br>
    >> ><br>
    >> > 地物追加時のみに有効になるコードは、あるんですか?<br>
    >> ><br>
    >> > もし、可能であれば教えていただけると非常に助かります。<br>
    >> > よろしくお願いします。<br>
    >> ><br>
    >> > 北海道 喜多耕一<br>
    >> ><br>
    >> ><br>
    >> > 2016/07/28 14:28 "Minoru Akagi" <<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a><br></span>
    <mailto:<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a>>>:<span class=""><br>
    >> ><br>
    >> >> 喜多さん<br>
    >> >><br>
    >> >> さきほどのコードはQGIS<br>
    2.14で動作確認したもので使用するQGISのバージョンによ<wbr>って動作しない場合があります。<br>
    >> >> 次はスタンドアロン版のQGIS 2.16<br>
    (64ビット)で動作確認したものです。<br>
    >> >><br>
    >> >><br>
    >> >><br>
    >> >><br>
    ------------------------------<wbr>------------------------------<wbr>--------------------<br>
    >> >> # -*- coding: utf-8 -*-<br>
    >> >> from PyQt4.QtGui import QLineEdit<br>
    >> >><br>
    >> >> def my_form_open(dialog, layer, feature):<br>
    >> >>     dialog.findChild(QLineEdit, u"type").setText(u"3")<br>
    >> >>     dialog.findChild(QLineEdit, u"name").setText(u"カボチャ")<br>
    >> >><br>
    >> >><br>
    >> >><br>
    ------------------------------<wbr>------------------------------<wbr>--------------------<br>
    >> >><br>
    >> >> #<br>
    また既存の地物のフォームを開く場合に値がデフォルト値で上書き<wbr>されてしまうのでその辺り改良の余地があります。<br>
    >> >> #<br>
    地物追加の場合にのみデフォルト値を設定するようにするべきです<wbr>がここではコードをお示しできません。あしからず<br>
    >> >><br>
    >> >> 赤木 実<br>
    >> >><br>
    >> >><br>
    >> >> 2016年7月28日 12:04 喜多耕一 <<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a><br></span>
    <mailto:<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a>><wbr>>:<span class=""><br>
    >> >> > 赤木さん<br>
    >> >> ><br>
    >> >> > 喜多です。<br>
    >> >> > ありがとうございます。<br>
    >> >> ><br>
    >> >> > いま、出先なので帰ったらやってみます。<br>
    >> >> ><br>
    >> >> ><br>
    データの連結は、やっぱりフィールド計算機などで行わないとダメ<wbr>ですか。<br>
    >> >> > データ追加時にできると、捗るんですけどねえ。<br>
    >> >> ><br>
    >> >> > 北海道 喜多耕一<br>
    >> >> ><br>
    >> >> ><br>
    >> >> > 2016/07/28 11:23 "Minoru Akagi" <<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a><br></span>
    <mailto:<a href="mailto:akaginch@gmail.com" target="_blank">akaginch@gmail.com</a>>>:<span class=""><br>
    >> >> ><br>
    >> >> >> 喜多さん<br>
    >> >> >><br>
    >> >> >> 少し長い回答になりますがご容赦下さい。<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    地物を追加した時に表示される属性入力フォームにデフォルト値を<wbr>設定するには「Python初期化関数」を使います。デフォルト<wbr>値の設定ぐらい簡単にできればいいのですが、今のところはPyt<wbr>honコードを書く必要があります。Pythonの知識がある方<wbr>が望ましいですが難しいコードではないので下記のサンプルを見な<wbr>がらコードを書いてみて下さい。<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    まずベクタレイヤのプロパティダイアログを開き、フィールドオプ<wbr>ションの「Python初期化関数」コンボボックスで"<wbr>このダイアログでコードを入力"を選択します。フィールド一覧の<wbr>下にコードが現れますので内容を編集します。<br>
    >> >> >><br>
    >> >> >> 初期状態では次のようなコードになっています。<br>
    >> >> >><br>
    >> >> >> def my_form_open(dialog, layer, feature):<br>
    >> >> >>     geom = feature.geometry()<br>
    >> >> >>     control = dialog.findChild(QWidget, "MyLineEdit")<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    簡単に説明すると、ここではmy_form_openという関数<wbr>が定義されており、geomという名前に地物のジオメトリオブジ<wbr>ェクト、controlという名前にMyLineEditという<wbr>フィールド名のウィジェット(QLineEditクラス)のオブ<wbr>ジェクトを代入するコードになっています。<br>
    >> >> 訂正: フィールド名→オブジェクト名<br>
    >> >> >> 関数の引数は順にQgsAttributeForm, QgsVectorLayer,<br>
    >> >> >> QgsFeatureの各クラスのオブジェクトとなります。<br>
    >> >> >><br>
    >> >> >> 初期値を設定するにはコードを次のように書き換えます。<br>
    >> >> >><br>
    >> >> >> def my_form_open(dialog, layer, feature):<br>
    >> >> >>     dialog.findChild(QWidget, u"type").setText(u"3")<br>
    >> >> >>     dialog.findChild(QWidget, u"name").setText(u"カボチャ")<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    ここでtypeとnameはフィールド名、3とカボチャは各フィ<wbr>ールドに対するデフォルト値です。インデントはタブかスペースの<wbr>どちらかに統一して下さい。初期コードのインデントにはタブが使<wbr>われています。<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    >> >> >><br>
    そして、ダイアログ上部から2行目の「関数名」のテキストボック<wbr>スに初期化関数の名前(ここではmy_form_open)を入<wbr>力してダイアログのOKボタンを押せば初期値設定が有効となりま<wbr>す。この設定はプロジェクトファイルに保存されますので配布され<wbr>たプロジェクトを使用する場合にも初期値設定は有効です。<br>
    >> >> >><br>
    >> >> >><br>
    以上が先の質問への回答となります。あとの質問については仮想フ<wbr>ィールドを使うかフィールド計算機を使うことになるでしょうか?<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >> 赤木 実<br>
    >> >> >><br>
    >> >> >><br>
    >> >> >> 2016年7月27日 20:12 喜多耕一 <<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a><br></span>
    <mailto:<a href="mailto:kou35tochas@gmail.com" target="_blank">kou35tochas@gmail.com</a>><wbr>>:<span class=""><br>
    >> >> >> > 垂水さん<br>
    >> >> >> ><br>
    >> >> >> > 北海道の喜多です。<br>
    >> >> >> ><br>
    >> >> >> > ありがとうございます。<br>
    >> >> >> > 内容が専門的すぎて(汗)、ちょっと私にはわかりませんが、<br>
    >> >> >> ><br>
    できればQGISのデフォルトな機能でできればいいなと思ってい<wbr>ます。<br>
    >> >> >> > むずかしいですかね・・・。<br>
    >> >> >> ><br>
    >> >> >> ><br>
    何故かと言うと、職場のいろんな事務所のいろんな人に、そういう<wbr>設定を行った<br>
    >> >> >> ><br>
    プロジェクトファイルを配布して、みんなで共通の機能を簡単に使<wbr>いたいと考えています。<br>
    >> >> >> ><br>
    殆どの方は初心者以前の方なので、できるだけ簡単に、データ作成<wbr>ができればと思っています。<br>
    >> >> >> ><br>
    >> >> >> > なにかいい方法があれば、よろしくお願いします。<br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> > 北海道 喜多耕一<br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> ><br>
    >> >> >> > 2016年7月27日 18:27 垂水 秀雄 <<a href="mailto:tarumi@kk-kernel.co.jp" target="_blank">tarumi@kk-kernel.co.jp</a><br></span>
    <mailto:<a href="mailto:tarumi@kk-kernel.co.jp" target="_blank">tarumi@kk-kernel.co.jp</a><wbr>>>:<span class=""><br>
    >> >> >> ><br>
    >> >> >> >> カーネル垂水です<br>
    >> >> >> >><br>
    >> >> >> >><br>
    QGISで地物を追加時に、属性データに特定の値を初期値として<wbr>設定したいのですが、できますでしょうか?<br>
    >> >> >> >><br>
    >> >> >> >><br>
    レイヤプロパティのフィールドで、Python初期化関数などで<wbr>、コードを書いてできそうな気もしますが、全くやり方はわかりま<wbr>せん。<br>
    >> >> >> >><br>
    >> >> >> >><br>
    >> >> >> >> 試していませんが、<br>
    >> >> >> >><br>
    >> >> >> >> qgsvectorlayer.sipを見ると以下のシグナルが<wbr>あるので<br>
    >> >> >> >><br>
    >> >> >> >> void featureAdded( QgsFeatureId fid );<br>
    >> >> >> >><br>
    >> >> >> >> これをconnectして、呼ばれたら<br>
    >> >> >> >><br>
    >> >> >> >> QgsFeatureIdをキーに追加されたQgsFeatur<wbr>eを取得して、<br>
    >> >> >> >><br>
    QgsFeatureのsetAttributeで値をセットす<wbr>ればPythonのプラグインでできそうな気がします。<br>
    >> >> >> >><br>
    >> >> >> >><br>
    >> >> >> >> On 2016/07/27 17:48, 喜多耕一 wrote:<br>
    >> >> >> >><br>
    >> >> >> >> 皆様<br>
    >> >> >> >><br>
    >> >> >> >> いつもお世話になっています。<br>
    >> >> >> >> 北海道の喜多です。<br>
    >> >> >> >><br>
    >> >> >> >><br>
    QGISで地物を追加時に、属性データに特定の値を初期値として<wbr>設定したいのですが、できますでしょうか?<br>
    >> >> >> >><br>
    >> >> >> >><br>
    レイヤプロパティのフィールドで、Python初期化関数などで<wbr>、コードを書いてできそうな気もしますが、全くやり方はわかりま<wbr>せん。<br>
    >> >> >> >><br>
    >> >> >> >><br>
    あと、入力した属性データの値を使って、データを入力したいとい<wbr>うのもあります。<br>
    >> >> >> >><br>
    例えば、年度と地区番号を入力したら、年度+地区番号のIDコー<wbr>ドを自動入力したいです。<br>
    >> >> >> >><br>
    >> >> >> >> わかる方がいらっしゃいましたら、教えて下さい。<br>
    >> >> >> >> よろしくお願いします。<br>
    >> >> >> >><br>
    >> >> >> >> 北海道 喜多耕一<br>
    ><br>
    ><br>
<br>
<br>
<br></span><span class="">
______________________________<wbr>_________________<br>
OSGeoJapan-discuss mailing list<br>
<a href="mailto:OSGeoJapan-discuss@lists.osgeo.org" target="_blank">OSGeoJapan-discuss@lists.osgeo<wbr>.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss" rel="noreferrer" target="_blank">http://lists.osgeo.org/mailman<wbr>/listinfo/osgeojapan-discuss</a><br>
</span></blockquote><div class="HOEnZb"><div class="h5">
<br>
______________________________<wbr>_________________<br>
OSGeoJapan-discuss mailing list<br>
<a href="mailto:OSGeoJapan-discuss@lists.osgeo.org" target="_blank">OSGeoJapan-discuss@lists.osgeo<wbr>.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss" rel="noreferrer" target="_blank">http://lists.osgeo.org/mailman<wbr>/listinfo/osgeojapan-discuss</a></div></div></blockquote></div><br></div>