代码之家  ›  专栏  ›  技术社区  ›  Hubert

如何在PyQGIS中输入点坐标?

  •  0
  • Hubert  · 技术社区  · 8 年前

    我想编写一个脚本,提示用户输入X和Y坐标。这些坐标将向现有形状文件添加点。另外,我应该使用哪个函数调用来获取这些坐标?

    vectorLyr = QgsVectorLayer("D:/Projekty/qgis_projekt/forty922.shp", "Forty", "ogr")
    vpr = vectorLyr.dataProvider()
    x = QInputDialog.getDouble(None, 'input', 'Insert x: ')
    y = QInputDialog.getDouble(None, 'input', 'Insert y: ')
    pnt = QgsGeometry.fromPoint(QgsPoint(x,y))
    f = QgsFeature()
    f.setGeometry(pnt)
    vpr.addFeatures([f])
    vectorLyr.updateExtents()
    QgsMapLayerRegistry.instance().addMapLayers([vectorLyr])
    

    输入窗口工作正常,但Python控制台抛出此语句

    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "c:/users/hubi/appdata/local/temp/tmpxkrjpx.py", line 5, in <module>
        pnt = QgsGeometry.fromPoint(QgsPoint(x,y))
    TypeError: arguments did not match any overloaded call:
      QgsPoint(): too many arguments
      QgsPoint(QgsPoint): argument 1 has unexpected type 'tuple'
      QgsPoint(float, float): argument 1 has unexpected type 'tuple'
      QgsPoint(QPointF): argument 1 has unexpected type 'tuple'
      QgsPoint(QPoint): argument 1 has unexpected type 'tuple'
    

    当我向pnt变量中添加一个常量时,它工作得很好。

    pnt = QgsGeometry.fromPoint(QgsPoint(361637,501172))
    

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Rob Grossman    8 年前

    查看stacktrace中的以下行:

    QgsPoint(QgsPoint): argument 1 has unexpected type 'tuple'

    python is解释器告诉您,当您需要一个整数时,您将得到一个元组作为输入。将代码更改为以下内容:

    vectorLyr = QgsVectorLayer("D:/Projekty/qgis_projekt/forty922.shp", "Forty", "ogr")
    vpr = vectorLyr.dataProvider()
    x = QInputDialog.getDouble(None, 'input', 'Insert x: ')
    y = QInputDialog.getDouble(None, 'input', 'Insert y: ')
    pnt = QgsGeometry.fromPoint(QgsPoint(x[0],y[0]))
    f = QgsFeature()
    f.setGeometry(pnt)
    vpr.addFeatures([f])
    vectorLyr.updateExtents()
    QgsMapLayerRegistry.instance().addMapLayers([vectorLyr])
    

    希望这有帮助!