Shapeファイルを開く時にCRSを指定できませんでした

投影情報を持っていないShapeファイルを開くと投影を選択する画面が表示される

[code]
layer = QgsVectorLayer(‘c:\work\A27-16_13.shp’, ‘scool’, ‘ogr’)
[/code]

これを回避するためにQgsVectorLayerの最初の引数をuri形式にして同時にCRSを指定しようとしたが、

[code]
layer = QgsVectorLayer(‘file:///c:/work/A27-16_13.shp?crs=EPSG:4326’, ‘scool’, ‘ogr’)[code]
[/code]

エラーが発生したために一旦あきらめ

[code]
2018-11-27T11:31:35 WARNING Pythonのエラー : Pythonコードの実行中にエラーが発生しました: 詳細についてはメッセージログ(Pythonエラー)を参照して下さい.
[/code]

C# フィールド値に改行を持つCSVの読み込み

[code]
using System.Data;

using (var connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + @"CSVのあるフォルダ" + "\";Extended Properties=’text;characterset=65001;HDR=Yes;FMT=Delimited(,)’;"))
{
using (var command = new OleDbCommand("SELECT * FROM [ファイル名]", connection))
{
connection.Open();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
// 数値項目
string no = reader.GetInt32(1).ToString();
// 文字列項目
string name = reader.GetString(0).Replace("’", "”");

}
}
}
}
[/code]

characterset=65001はUTF8

jQuery Mobileのcheckboxを動的に作成

jQuery Mobile でCheckBoxを作るには以下のHTMLを組む必要がある

[code]
<label>
<input type="checkbox" name="checkbox-0 ">Check me
</label>
[/code]

DEMO

これをjQueryで動的に作成

[code]
var id_check_bookmark = ‘id-chk-bookmark-‘+handle;

var h_lbl = $("<label />", {
‘text’ : ‘bookmark’
});

var h_chekcbox = $("<input />", {
‘type’ : ‘checkbox’,
‘id’ : id_check_bookmark
});

h_chekcbox.appendTo(h_lbl);

h_content.append(h_lbl);
[/code]

部品メモ

リスト

http://demos.jquerymobile.com/1.3.0-rc.1/docs/demos/widgets/listviews/

Listview Widget

http://jquery-mobile.tecc0.com/04listview.html

http://forresst.github.io/demos/sortable/en/index.html

jQuery Mobile さまざまなスタイルのリスト例

http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/jquerymobile/jquerymobile_examples.asp.html

レイヤ情報を照会

アクティブなレイヤを照会
[code]
layer = self.iface.activeLayer()
[/code]

レイヤの種別
[code]
layer_type = layer.type()
if(layer_type == QgsMapLayer.VectorLayer):
[/code]

レイヤが編集可能か?
[code]
is_edit = layer.isEditable()
[/code]

一時的にレイヤ上にポイント追加

QGsMapToolのcanvasReleaseEventイベントで実行
[code]
def canvasReleaseEvent(self, e):
marker = QgsVertexMarker(self.canvas())
trans = self.canvas().getCoordinateTransform()
p = trans.toMapCoordinates(e.pos().x(), e.pos().y())
marker.setCenter(p)
marker.setColor(QColor(255, 0, 0))
marker.setIconType(QgsVertexMarker.ICON_CIRCLE)
marker.setIconSize(20)
marker.setPenWidth(5)
[/code]

marker.hide()で非表示
marker.show()で表示

レイヤにポイントを追加

[code]
layer = self.iface.activeLayer()
layer.startEditing()
feature = QgsFeature()
geom = QgsGeometry.fromPointXY(QgsPointXY(135,40))
feature.setGeometry(geom)
layer.addFeature(feature)
layer.commitChanges()
layer.updateExtents()
[/code]

layer.commitChanges()をしないと表示に反映されない?

メモリレイヤを追加

[code]
layer = QgsVectorLayer(‘Point?crs=epsg:4326’, ‘test_layer’, ‘memory’)
project = QgsProject.instance()
project.addMapLayer(layer)
[/code]
QgisInterfaceクラスのaddVectorLayerを使用してもよい

属性追加はlayer.addAttributeを使用

QGIS3のツールバーにボタンを追加

既存のプラグインツールバーにボタンを追加

今回はプラグインのinitGuideでツールバーにボタンを追加しボタンが押されたらメッセージボックスを表示

インポートを追加
[code]
from PyQt5.QtWidgets import QMessageBox, QAction
from PyQt5.QtGui import QIcon
[/code]

[code]
def initGui(self):
"""Create the menu entries and toolbar icons inside the QGIS GUI."""

testAction = QAction(QIcon(os.path.dirname(__file__) + ‘/niko.png’), ‘TEST’, self.iface.mainWindow())
testAction.triggered.connect(self.test)
self.iface.addToolBarIcon(testAction)

def test(self):
QMessageBox.about(self, "Title", "Message")
[/code]

QGISのメニューをPythonから操作

プロジェクトを開くメニューを呼び出す

[code]
actionOpenProject = iface.actionOpenProject();
actionOpenProject.trigger()
[/code]

地物の登録

[code]
actionAddFeature = iface.actionAddFeature();
actionAddFeature.trigger();
[/code]

事前にPOINTレイヤを選択していたらポイントの登録メニューを呼び出す