レイヤ情報を照会

アクティブなレイヤを照会

layer = self.iface.activeLayer()

レイヤの種別

layer_type = layer.type()
if(layer_type == QgsMapLayer.VectorLayer):

レイヤが編集可能か?

is_edit = layer.isEditable()

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

QGsMapToolのcanvasReleaseEventイベントで実行

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)

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

レイヤにポイントを追加

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

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

メモリレイヤを追加

layer = QgsVectorLayer('Point?crs=epsg:4326', 'test_layer', 'memory')
project = QgsProject.instance()
project.addMapLayer(layer)

QgisInterfaceクラスのaddVectorLayerを使用してもよい

属性追加はlayer.addAttributeを使用

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

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

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

インポートを追加

from PyQt5.QtWidgets import QMessageBox, QAction
from PyQt5.QtGui import QIcon
    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")

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

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

actionOpenProject = iface.actionOpenProject();
actionOpenProject.trigger()

地物の登録

actionAddFeature = iface.actionAddFeature();
actionAddFeature.trigger();

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

QGIS3 python レイヤ

レイヤの一覧を照会

for layer in QgsProject.instance().mapLayers().values():
    QgsMessageLog.logMessage(layer.name(), 'test plugin', Qgis.Info)

レイヤIDからレイヤを求める

layerTreeLayer=QgsProject.instance().layerTreeRoot().findLayer(layers[0].id())
layer = layerTreeLayer.layer()

レイヤ名からレイヤのリスト(List[QgsMapLayer])を照会

layers=layerTreeLayer=QgsProject.instance().mapLayersByName(レイヤ名)

レイヤの表示、非表示を切り替え

QgsProject.instance().layerTreeRoot().findLayer(レイヤID).setItemVisibilityChecked(False)

setItemVisibilityCheckedはQgsMapLayerのメンバーではなくQgsLayerTreeNodeのメンバー。
QgsLayerTreeNodeはQgsLayerTreeLayerの基底クラスであり、QgsLayerTreeNodeはQgsLayerTreeGroupのfindLayerで照会

カテゴリー: QGIS

proj.dllをC#から使う(コンパイル編)

PROJ4のサイトより最新のソース「proj-5.1.0.tar.gz」をダウンロードし展開。

Cドライブ直下にディレクトリPROJを作成

「開発者コマンド プロンプト for VS2013」を起動

環境変数を設定

展開したディレクトリ「proj-5.1.0」にカレントを移動

nmakeコマンドを実行

nmake /f makefile.vc

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        cd src
        nmake /f makefile.vc

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c aasincos.c adjlon.c bch2bps.c bchgen.c pj_gauss.c biveval.c dmstor.c mk_cheby.c pj_auth.c pj_deriv.c pj_ell_set.c pj_ellps.c pj_errno.c pj_factors.c pj_fwd.c pj_init.c pj_inv.c pj_list.c pj_malloc.c pj_mlfn.c pj_msfn.c pj_open_lib.c pj_param.c pj_phi2.c pj_pr_list.c pj_qsfn.c pj_strerrno.c pj_tsfn.c pj_units.c pj_zpoly1.c rtodms.c vector1.c pj_release.c geocent.c pj_transform.c pj_datum_set.c pj_datums.c pj_apply_gridshift.c pj_gc_reader.c pj_gridcatalog.c nad_cvt.c nad_init.c nad_intr.c pj_utils.c pj_gridlist.c pj_gridinfo.c proj_mdist.c pj_mutex.c pj_initcache.c pj_ctx.c pj_fileapi.c pj_log.c pj_apply_vgridshift.c pj_strtod.c pj_internal.c pj_math.c PJ_boggs.c PJ_collg.c PJ_crast.c PJ_denoy.c PJ_eck1.c PJ_eck2.c PJ_eck3.c PJ_eck4.c PJ_eck5.c PJ_fahey.c PJ_fouc_s.c PJ_gins8.c PJ_gn_sinu.c PJ_goode.c PJ_igh.c PJ_hatano.c PJ_loxim.c PJ_mbt_fps.c PJ_mbtfpp.c PJ_mbtfpq.c PJ_moll.c PJ_nell.c PJ_nell_h.c PJ_putp2.c PJ_putp3.c PJ_putp4p.c PJ_putp5.c PJ_putp6.c PJ_robin.c PJ_sts.c PJ_urm5.c PJ_urmfps.c PJ_wag2.c PJ_wag3.c PJ_wink1.c PJ_wink2.c PJ_isea.c PJ_calcofi.c PJ_natearth.c PJ_natearth2.c PJ_times.c PJ_aeqd.c PJ_gnom.c PJ_laea.c PJ_mod_ster.c PJ_nsper.c PJ_nzmg.c PJ_ortho.c PJ_stere.c PJ_sterea.c proj_rouss.c PJ_aea.c PJ_bipc.c PJ_bonne.c PJ_eqdc.c PJ_imw_p.c PJ_lcc.c PJ_poly.c PJ_rpoly.c PJ_sconics.c PJ_lcca.c PJ_ccon.c PJ_cass.c PJ_cc.c PJ_cea.c PJ_eqc.c PJ_gall.c PJ_labrd.c PJ_lsat.c PJ_misrsom.c PJ_merc.c PJ_mill.c PJ_ocea.c PJ_omerc.c PJ_patterson.c PJ_somerc.c PJ_tcc.c PJ_tcea.c PJ_tmerc.c PJ_geos.c PJ_gstmerc.c proj_etmerc.c PJ_comill.c PJ_airy.c PJ_aitoff.c PJ_august.c PJ_bacon.c PJ_chamb.c PJ_hammer.c PJ_lagrng.c PJ_larr.c PJ_lask.c PJ_nocol.c PJ_ob_tran.c PJ_oea.c PJ_sch.c PJ_tpeqd.c PJ_vandg.c PJ_vandg2.c PJ_vandg4.c PJ_wag7.c PJ_latlong.c PJ_krovak.c PJ_geoc.c pj_geocent.c PJ_healpix.c PJ_qsc.c geodesic.c proj_4D_api.c PJ_cart.c PJ_pipeline.c PJ_horner.c PJ_helmert.c PJ_vgridshift.c PJ_hgridshift.c PJ_unitconvert.c PJ_molodensky.c PJ_deformation.c PJ_axisswap.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
aasincos.c
adjlon.c
bch2bps.c
bchgen.c
pj_gauss.c
biveval.c
dmstor.c
mk_cheby.c
pj_auth.c
pj_deriv.c
pj_ell_set.c
pj_ellps.c
pj_errno.c
pj_factors.c
pj_fwd.c
pj_init.c
pj_inv.c
pj_list.c
pj_malloc.c
pj_mlfn.c
コードを生成中...
コンパイル中...
pj_msfn.c
pj_open_lib.c
pj_open_lib.c(47) : warning C4129: 'P' : エスケープ シーケンスとして正しく認識されませんでした。
pj_open_lib.c(47) : warning C4129: 'S' : エスケープ シーケンスとして正しく認識されませんでした。
pj_param.c
pj_phi2.c
pj_pr_list.c
pj_qsfn.c
pj_strerrno.c
pj_tsfn.c
pj_units.c
pj_zpoly1.c
rtodms.c
vector1.c
pj_release.c
geocent.c
pj_transform.c
pj_datum_set.c
pj_datums.c
pj_apply_gridshift.c
pj_gc_reader.c
pj_gridcatalog.c
コードを生成中...
コンパイル中...
nad_cvt.c
nad_init.c
nad_intr.c
pj_utils.c
pj_gridlist.c
pj_gridinfo.c
proj_mdist.c
pj_mutex.c
pj_initcache.c
pj_ctx.c
pj_fileapi.c
pj_log.c
pj_apply_vgridshift.c
pj_strtod.c
pj_internal.c
pj_math.c
PJ_boggs.c
PJ_collg.c
PJ_crast.c
PJ_denoy.c
コードを生成中...
コンパイル中...
PJ_eck1.c
PJ_eck2.c
PJ_eck3.c
PJ_eck4.c
PJ_eck5.c
PJ_fahey.c
PJ_fouc_s.c
PJ_gins8.c
PJ_gn_sinu.c
PJ_goode.c
PJ_igh.c
PJ_hatano.c
PJ_loxim.c
PJ_mbt_fps.c
PJ_mbtfpp.c
PJ_mbtfpq.c
PJ_moll.c
PJ_nell.c
PJ_nell_h.c
PJ_putp2.c
コードを生成中...
コンパイル中...
PJ_putp3.c
PJ_putp4p.c
PJ_putp5.c
PJ_putp6.c
PJ_robin.c
PJ_sts.c
PJ_urm5.c
PJ_urmfps.c
PJ_wag2.c
PJ_wag3.c
PJ_wink1.c
PJ_wink2.c
PJ_isea.c
PJ_calcofi.c
PJ_natearth.c
PJ_natearth2.c
PJ_times.c
PJ_aeqd.c
PJ_gnom.c
PJ_laea.c
コードを生成中...
コンパイル中...
PJ_mod_ster.c
PJ_nsper.c
PJ_nzmg.c
PJ_ortho.c
PJ_stere.c
PJ_sterea.c
proj_rouss.c
PJ_aea.c
PJ_bipc.c
PJ_bonne.c
PJ_eqdc.c
PJ_imw_p.c
PJ_lcc.c
PJ_poly.c
PJ_rpoly.c
PJ_sconics.c
PJ_lcca.c
PJ_ccon.c
PJ_cass.c
PJ_cc.c
コードを生成中...
コンパイル中...
PJ_cea.c
PJ_eqc.c
PJ_gall.c
PJ_labrd.c
PJ_lsat.c
PJ_misrsom.c
PJ_merc.c
PJ_mill.c
PJ_ocea.c
PJ_omerc.c
PJ_patterson.c
PJ_somerc.c
PJ_tcc.c
PJ_tcea.c
PJ_tmerc.c
PJ_geos.c
PJ_gstmerc.c
proj_etmerc.c
PJ_comill.c
PJ_airy.c
コードを生成中...
コンパイル中...
PJ_aitoff.c
PJ_august.c
PJ_bacon.c
PJ_chamb.c
PJ_hammer.c
PJ_lagrng.c
PJ_larr.c
PJ_lask.c
PJ_nocol.c
PJ_ob_tran.c
PJ_oea.c
PJ_sch.c
PJ_tpeqd.c
PJ_vandg.c
PJ_vandg2.c
PJ_vandg4.c
PJ_wag7.c
PJ_latlong.c
PJ_krovak.c
PJ_geoc.c
コードを生成中...
コンパイル中...
pj_geocent.c
PJ_healpix.c
PJ_qsc.c
geodesic.c
proj_4D_api.c
PJ_cart.c
PJ_pipeline.c
PJ_horner.c
PJ_helmert.c
PJ_helmert.c : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
PJ_vgridshift.c
PJ_hgridshift.c
PJ_unitconvert.c
PJ_molodensky.c
PJ_deformation.c
PJ_deformation.c : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
PJ_axisswap.c
コードを生成中...
        if exist proj.lib del proj.lib
        lib /out:proj.lib aasincos.obj adjlon.obj bch2bps.obj bchgen.obj pj_gauss.obj  biveval.obj dmstor.obj mk_cheby.obj pj_auth.obj  pj_deriv.obj pj_ell_set.obj pj_ellps.obj pj_errno.obj  pj_factors.obj pj_fwd.obj pj_init.obj pj_inv.obj  pj_list.obj pj_malloc.obj pj_mlfn.obj pj_msfn.obj  pj_open_lib.obj pj_param.obj pj_phi2.obj pj_pr_list.obj  pj_qsfn.obj pj_strerrno.obj pj_tsfn.obj pj_units.obj  pj_zpoly1.obj rtodms.obj vector1.obj pj_release.obj  geocent.obj pj_transform.obj pj_datum_set.obj pj_datums.obj  pj_apply_gridshift.obj pj_gc_reader.obj pj_gridcatalog.obj  nad_cvt.obj nad_init.obj nad_intr.obj  pj_utils.obj pj_gridlist.obj pj_gridinfo.obj  proj_mdist.obj pj_mutex.obj pj_initcache.obj  pj_ctx.obj pj_fileapi.obj pj_log.obj pj_apply_vgridshift.obj  pj_strtod.obj pj_internal.obj pj_math.obj PJ_boggs.obj PJ_collg.obj PJ_crast.obj PJ_denoy.obj  PJ_eck1.obj PJ_eck2.obj PJ_eck3.obj PJ_eck4.obj  PJ_eck5.obj PJ_fahey.obj PJ_fouc_s.obj PJ_gins8.obj  PJ_gn_sinu.obj PJ_goode.obj PJ_igh.obj PJ_hatano.obj PJ_loxim.obj  PJ_mbt_fps.obj PJ_mbtfpp.obj PJ_mbtfpq.obj PJ_moll.obj  PJ_nell.obj PJ_nell_h.obj PJ_putp2.obj PJ_putp3.obj  PJ_putp4p.obj PJ_putp5.obj PJ_putp6.obj PJ_robin.obj  PJ_sts.obj PJ_urm5.obj PJ_urmfps.obj PJ_wag2.obj  PJ_wag3.obj PJ_wink1.obj PJ_wink2.obj PJ_isea.obj  PJ_calcofi.obj PJ_natearth.obj PJ_natearth2.obj PJ_times.obj PJ_aeqd.obj PJ_gnom.obj PJ_laea.obj PJ_mod_ster.obj  PJ_nsper.obj PJ_nzmg.obj PJ_ortho.obj PJ_stere.obj PJ_sterea.obj  proj_rouss.obj PJ_aea.obj PJ_bipc.obj PJ_bonne.obj PJ_eqdc.obj  PJ_imw_p.obj PJ_lcc.obj PJ_poly.obj  PJ_rpoly.obj PJ_sconics.obj PJ_lcca.obj PJ_ccon.obj PJ_cass.obj PJ_cc.obj PJ_cea.obj PJ_eqc.obj  PJ_gall.obj PJ_labrd.obj PJ_lsat.obj PJ_misrsom.obj PJ_merc.obj  PJ_mill.obj PJ_ocea.obj PJ_omerc.obj PJ_patterson.obj PJ_somerc.obj  PJ_tcc.obj PJ_tcea.obj PJ_tmerc.obj PJ_geos.obj  PJ_gstmerc.obj proj_etmerc.obj PJ_comill.obj PJ_airy.obj PJ_aitoff.obj PJ_august.obj PJ_bacon.obj  PJ_chamb.obj PJ_hammer.obj PJ_lagrng.obj PJ_larr.obj  PJ_lask.obj PJ_nocol.obj PJ_ob_tran.obj PJ_oea.obj  PJ_sch.obj PJ_tpeqd.obj PJ_vandg.obj PJ_vandg2.obj  PJ_vandg4.obj PJ_wag7.obj PJ_latlong.obj PJ_krovak.obj  PJ_geoc.obj pj_geocent.obj PJ_healpix.obj PJ_qsc.obj  geodesic.obj proj_4D_api.obj PJ_cart.obj PJ_pipeline.obj PJ_horner.obj PJ_helmert.obj  PJ_vgridshift.obj PJ_hgridshift.obj PJ_unitconvert.obj PJ_molodensky.obj  PJ_deformation.obj PJ_axisswap.obj
Microsoft (R) Library Manager Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        link /debug /dll /def:proj.def /out:proj.dll /implib:proj_i.lib  aasincos.obj adjlon.obj bch2bps.obj bchgen.obj pj_gauss.obj  biveval.obj dmstor.obj mk_cheby.obj pj_auth.obj  pj_deriv.obj pj_ell_set.obj pj_ellps.obj pj_errno.obj  pj_factors.obj pj_fwd.obj pj_init.obj pj_inv.obj  pj_list.obj pj_malloc.obj pj_mlfn.obj pj_msfn.obj  pj_open_lib.obj pj_param.obj pj_phi2.obj pj_pr_list.obj  pj_qsfn.obj pj_strerrno.obj pj_tsfn.obj pj_units.obj  pj_zpoly1.obj rtodms.obj vector1.obj pj_release.obj  geocent.obj pj_transform.obj pj_datum_set.obj pj_datums.obj  pj_apply_gridshift.obj pj_gc_reader.obj pj_gridcatalog.obj  nad_cvt.obj nad_init.obj nad_intr.obj  pj_utils.obj pj_gridlist.obj pj_gridinfo.obj  proj_mdist.obj pj_mutex.obj pj_initcache.obj  pj_ctx.obj pj_fileapi.obj pj_log.obj pj_apply_vgridshift.obj  pj_strtod.obj pj_internal.obj pj_math.obj PJ_boggs.obj PJ_collg.obj PJ_crast.obj PJ_denoy.obj  PJ_eck1.obj PJ_eck2.obj PJ_eck3.obj PJ_eck4.obj  PJ_eck5.obj PJ_fahey.obj PJ_fouc_s.obj PJ_gins8.obj  PJ_gn_sinu.obj PJ_goode.obj PJ_igh.obj PJ_hatano.obj PJ_loxim.obj  PJ_mbt_fps.obj PJ_mbtfpp.obj PJ_mbtfpq.obj PJ_moll.obj  PJ_nell.obj PJ_nell_h.obj PJ_putp2.obj PJ_putp3.obj  PJ_putp4p.obj PJ_putp5.obj PJ_putp6.obj PJ_robin.obj  PJ_sts.obj PJ_urm5.obj PJ_urmfps.obj PJ_wag2.obj  PJ_wag3.obj PJ_wink1.obj PJ_wink2.obj PJ_isea.obj  PJ_calcofi.obj PJ_natearth.obj PJ_natearth2.obj PJ_times.obj PJ_aeqd.obj PJ_gnom.obj PJ_laea.obj PJ_mod_ster.obj  PJ_nsper.obj PJ_nzmg.obj PJ_ortho.obj PJ_stere.obj PJ_sterea.obj  proj_rouss.obj PJ_aea.obj PJ_bipc.obj PJ_bonne.obj PJ_eqdc.obj  PJ_imw_p.obj PJ_lcc.obj PJ_poly.obj  PJ_rpoly.obj PJ_sconics.obj PJ_lcca.obj PJ_ccon.obj PJ_cass.obj PJ_cc.obj PJ_cea.obj PJ_eqc.obj  PJ_gall.obj PJ_labrd.obj PJ_lsat.obj PJ_misrsom.obj PJ_merc.obj  PJ_mill.obj PJ_ocea.obj PJ_omerc.obj PJ_patterson.obj PJ_somerc.obj  PJ_tcc.obj PJ_tcea.obj PJ_tmerc.obj PJ_geos.obj  PJ_gstmerc.obj proj_etmerc.obj PJ_comill.obj PJ_airy.obj PJ_aitoff.obj PJ_august.obj PJ_bacon.obj  PJ_chamb.obj PJ_hammer.obj PJ_lagrng.obj PJ_larr.obj  PJ_lask.obj PJ_nocol.obj PJ_ob_tran.obj PJ_oea.obj  PJ_sch.obj PJ_tpeqd.obj PJ_vandg.obj PJ_vandg2.obj  PJ_vandg4.obj PJ_wag7.obj PJ_latlong.obj PJ_krovak.obj  PJ_geoc.obj pj_geocent.obj PJ_healpix.obj PJ_qsc.obj  geodesic.obj proj_4D_api.obj PJ_cart.obj PJ_pipeline.obj PJ_horner.obj PJ_helmert.obj  PJ_vgridshift.obj PJ_hgridshift.obj PJ_unitconvert.obj PJ_molodensky.obj  PJ_deformation.obj PJ_axisswap.obj
Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

   ライブラリ proj_i.lib とオブジェクト proj_i.exp を作成中
        if exist proj.dll.manifest mt -manifest proj.dll.manifest -outputresource:proj.dll;2
        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c proj.c gen_cheb.c p_series.c emess.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
proj.c
gen_cheb.c
p_series.c
emess.c
コードを生成中...
        cl proj.obj gen_cheb.obj p_series.obj emess.obj proj_i.lib /link setargv.obj
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:proj.exe
setargv.obj
proj.obj
gen_cheb.obj
p_series.obj
emess.obj
proj_i.lib
        if exist proj.exe.manifest mt -manifest proj.exe.manifest -outputresource:proj.exe;1
        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c cs2cs.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
cs2cs.c
        cl cs2cs.obj gen_cheb.obj p_series.obj emess.obj proj_i.lib /link setargv.obj
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:cs2cs.exe
setargv.obj
cs2cs.obj
gen_cheb.obj
p_series.obj
emess.obj
proj_i.lib
        if exist cs2cs.exe.manifest mt -manifest cs2cs.exe.manifest -outputresource:cs2cs.exe;1
        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c geod.c geod_set.c geod_interface.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
geod.c
geod_set.c
geod_interface.c
コードを生成中...
        cl geod.obj geod_set.obj geod_interface.obj emess.obj proj_i.lib /link setargv.obj
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:geod.exe
setargv.obj
geod.obj
geod_set.obj
geod_interface.obj
emess.obj
proj_i.lib
        if exist geod.exe.manifest mt -manifest geod.exe.manifest -outputresource:geod.exe;1
        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c cct.c proj_strtod.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
cct.c
proj_strtod.c
コードを生成中...
        cl cct.obj proj_strtod.obj proj_i.lib /link setargv.obj
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:cct.exe
setargv.obj
cct.obj
proj_strtod.obj
proj_i.lib
        if exist cct.exe.manifest mt -manifest cct.exe.manifest -outputresource:cct.exe;1
        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c gie.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
gie.c
        cl gie.obj proj_strtod.obj proj_i.lib /link setargv.obj
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:gie.exe
setargv.obj
gie.obj
proj_strtod.obj
proj_i.lib
        if exist gie.exe.manifest mt -manifest gie.exe.manifest -outputresource:gie.exe;1
        cl /nologo -I. -DPROJ_LIB=\"C:\PROJ\SHARE\"  -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 /Ox /Op /MD /c nad2bin.c
cl : コマンド ライン warning D9002 : 不明なオプション '/Op' を無視します
nad2bin.c
        cl nad2bin.obj emess.obj proj_i.lib /link setargv.obj
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:nad2bin.exe
setargv.obj
nad2bin.obj
emess.obj
proj_i.lib
        cd ..\nad
        nmake /f makefile.vc

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        if exist conus.lla "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.EXE" /f makefile.vc nadshift
        cd ..

終了したら次のコマンドでインストール

C:\Work\proj-5.1.0>nmake /f makefile.vc install-all

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        cd src
        nmake /f makefile.vc install

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        mkdir C:\PROJ
サブディレクトリまたはファイル C:\PROJ は既に存在します。
        mkdir C:\PROJ\bin
        mkdir C:\PROJ\share
        mkdir C:\PROJ\lib
        mkdir C:\PROJ\include
        mkdir C:\PROJ\test
        mkdir C:\PROJ\test\gie
        copy *.exe C:\PROJ\bin
cct.exe
cs2cs.exe
geod.exe
gie.exe
nad2bin.exe
proj.exe
        6 個のファイルをコピーしました。
        copy *.dll C:\PROJ\bin
proj.dll
        1 個のファイルをコピーしました。
        copy *.lib C:\PROJ\lib
proj.lib
proj_i.lib
        2 個のファイルをコピーしました。
        copy proj.h     C:\PROJ\include
        1 個のファイルをコピーしました。
        copy proj_api.h C:\PROJ\include
        1 個のファイルをコピーしました。
        copy projects.h C:\PROJ\include
        1 個のファイルをコピーしました。
        copy geodesic.h C:\PROJ\include
        1 個のファイルをコピーしました。
        copy ..\test\gie\*.gie C:\PROJ\test\gie
..\test\gie\4D-API_cs2cs-style.gie
..\test\gie\axisswap.gie
..\test\gie\builtins.gie
..\test\gie\deformation.gie
..\test\gie\DHDN_ETRS89.gie
..\test\gie\ellipsoid.gie
..\test\gie\GDA.gie
..\test\gie\more_builtins.gie
..\test\gie\unitconvert.gie
        9 個のファイルをコピーしました。
        cd ..\nad
        nmake /f makefile.vc install-all

Microsoft(R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        mkdir C:\PROJ
サブディレクトリまたはファイル C:\PROJ は既に存在します。
        mkdir C:\PROJ\SHARE
サブディレクトリまたはファイル C:\PROJ\SHARE は既に存在します。
        for %f in ( FL GL27 nad.lst nad27 nad83 proj_def.dat world epsg esri  esri.extra other.extra IGNF ITRF2000 ITRF2008 ITRF2014 ) do copy %f C:\PROJ\SHARE

C:\Work\proj-5.1.0\nad>copy FL C:\PROJ\SHARE
指定されたファイルが見つかりません。

C:\Work\proj-5.1.0\nad>copy GL27 C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy nad.lst C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy nad27 C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy nad83 C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy proj_def.dat C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy world C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy epsg C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy esri C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy esri.extra C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy other.extra C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy IGNF C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy ITRF2000 C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy ITRF2008 C:\PROJ\SHARE
        1 個のファイルをコピーしました。

C:\Work\proj-5.1.0\nad>copy ITRF2014 C:\PROJ\SHARE
        1 個のファイルをコピーしました。
        if exist conus "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.EXE" /f makefile.vc install-nadgrids
        copy *.gsb C:\PROJ\SHARE
*.gsb
指定されたファイルが見つかりません。
        0 個のファイルをコピーしました。
        copy ntv1_can.dat C:\PROJ\SHARE
指定されたファイルが見つかりません。
        cd ..

C:\Work\proj-5.1.0>

無事に終了すると以下のディレクトリ構成に配置

カテゴリー: C#

C#(.NET Framework4.5)からCで作成したDLLの関数を呼ぶ

proj4をコンパイルしてproj.dllを作成しC#のEXEから読んだら以下のエラー

PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメーターがターゲットのアンマネージ シグネチャに一致していることを確認してください。

呼び出し

[DllImport("proj")]
private static extern IntPtr pj_init_plus(string definition);

[DllImport("proj")]
private static extern void pj_free(IntPtr pj);

//[DllImport("proj")]
//private static extern IntPtr MVlibInit(Int32 PrjType, double lat, double lon, Int32 fkncd);

        static void Main(string[] args)
        {
            IntPtr pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33");
            if (pj_merc != IntPtr.Zero)
            {
                pj_free(pj_merc);
            }

        }

.NET Farmerowk 4.0から以下に変更なったらしい

[DllImport("proj", CallingConvention = CallingConvention.Cdecl))]
private static extern IntPtr pj_init_plus(string definition);

カテゴリー: C#