def testLengthMeasureAndUnits(self): """Test a variety of length measurements in different CRS and ellipsoid modes, to check that the calculated lengths and units are always consistent """ da = QgsDistanceArea() da.setSourceCrs(3452) da.setEllipsoidalMode(False) da.setEllipsoid("NONE") daCRS = QgsCoordinateReferenceSystem() daCRS.createFromSrsId(da.sourceCrs()) # We check both the measured length AND the units, in case the logic regarding # ellipsoids and units changes in future distance = da.measureLine(QgsPoint(1, 1), QgsPoint(2, 3)) units = da.lengthUnits() print "measured {} in {}".format(distance, QgsUnitTypes.toString(units)) assert ((abs(distance - 2.23606797) < 0.00000001 and units == QGis.Degrees) or (abs(distance - 248.52) < 0.01 and units == QGis.Meters)) da.setEllipsoid("WGS84") distance = da.measureLine(QgsPoint(1, 1), QgsPoint(2, 3)) units = da.lengthUnits() print "measured {} in {}".format(distance, QgsUnitTypes.toString(units)) assert ((abs(distance - 2.23606797) < 0.00000001 and units == QGis.Degrees) or (abs(distance - 248.52) < 0.01 and units == QGis.Meters)) da.setEllipsoidalMode(True) distance = da.measureLine(QgsPoint(1, 1), QgsPoint(2, 3)) units = da.lengthUnits() print "measured {} in {}".format(distance, QgsUnitTypes.toString(units)) # should always be in Meters self.assertAlmostEqual(distance, 247555.57, delta=0.01) self.assertEqual(units, QGis.Meters) # now try with a source CRS which is in feet da.setSourceCrs(27469) da.setEllipsoidalMode(False) # measurement should be in feet distance = da.measureLine(QgsPoint(1, 1), QgsPoint(2, 3)) units = da.lengthUnits() print "measured {} in {}".format(distance, QgsUnitTypes.toString(units)) self.assertAlmostEqual(distance, 2.23606797, delta=0.000001) self.assertEqual(units, QGis.Feet) da.setEllipsoidalMode(True) # now should be in Meters again distance = da.measureLine(QgsPoint(1, 1), QgsPoint(2, 3)) units = da.lengthUnits() print "measured {} in {}".format(distance, QgsUnitTypes.toString(units)) self.assertAlmostEqual(distance, 0.67953772, delta=0.000001) self.assertEqual(units, QGis.Meters)
def browseCRS(self): selector = QgsGenericProjectionSelector() selector.setSelectedAuthId(self.crs) if selector.exec_(): authId = selector.selectedAuthId() if authId.upper().startswith("EPSG:"): self.crs = authId else: proj = QgsCoordinateReferenceSystem() proj.createFromSrsId(selector.selectedCrsId()) self.crs = proj.toProj4() self.updateText()
def browseCRS(self): selector = QgsGenericProjectionSelector() selector.setSelectedAuthId(self.crs) if selector.exec_(): authId = selector.selectedAuthId() if authId.upper().startswith("EPSG:"): self.crs = authId else: proj = QgsCoordinateReferenceSystem() proj.createFromSrsId(selector.selectedCrsId()) self.crs = proj.toProj4() self.updateText()
def reprojectCoords(self): self.refreshCoordsMatrix(self.prev_row) if self.valueChecker.checkCoordsMatrix(self.coords_matrix): srcProj = QgsCoordinateReferenceSystem() srcProj.createFromSrsId(self.featureCrsId) crsSelectorFrom = QgsProjectionSelectionDialog() crsSelectorFrom.setCrs(srcProj) crsSelectorFrom.setMessage( self.translate_str("Select source coordinates system")) if crsSelectorFrom.exec(): crsSelectorTo = QgsProjectionSelectionDialog() crsSelectorTo.setMessage( self.translate_str( "Select destination coordinates system")) if crsSelectorTo.exec(): rc = ReprojectCoordinates(crsSelectorFrom.crs().srsid(), crsSelectorTo.crs().srsid(), self.has_Z, self.has_M) self.coords_matrix = list( rc.reproject(self.coords_matrix, False)) self.__part_changing = True self.refreshTable(self.prev_row) self.__part_changing = False self.featureCrsId = crsSelectorTo.crs().srsid() if self.featureCrsId == self.mapCanvas.currentLayer().crs( ).srsid(): self.rb_LayerCrs.setChecked(True) elif self.featureCrsId == self.projectCrsId: self.rb_ProjectCrs.setChecked(True) else: self.rb_OtherCrs.blockSignals(True) self.rb_OtherCrs.setChecked(True) self.rb_OtherCrs.blockSignals(False) self.__displayAuthid()
def SelectOtherCrsClicked(self): crsSelector = QgsProjectionSelectionDialog() if self.otherCrsId is None: crsSelector.setCrs(QgsCoordinateReferenceSystem("EPSG:4326")) else: currentQCRS = QgsCoordinateReferenceSystem() if currentQCRS.createFromSrsId(self.otherCrsId): crsSelector.setCrs(currentQCRS) else: crsSelector.setCrs(QgsCoordinateReferenceSystem("EPSG:4326")) if crsSelector.exec(): self.otherCrsId = crsSelector.crs().srsid() self.featureCrsId = self.otherCrsId self.__displayAuthid()
def testAreaMeasureAndUnits(self): """Test a variety of area measurements in different CRS and ellipsoid modes, to check that the calculated areas and units are always consistent """ da = QgsDistanceArea() da.setSourceCrs(3452) da.setEllipsoidalMode(False) da.setEllipsoid("NONE") daCRS = QgsCoordinateReferenceSystem() daCRS.createFromSrsId(da.sourceCrs()) polygon = QgsGeometry.fromPolygon([[ QgsPoint(0, 0), QgsPoint(1, 0), QgsPoint(1, 1), QgsPoint(2, 1), QgsPoint(2, 2), QgsPoint(0, 2), QgsPoint(0, 0), ]]) # We check both the measured area AND the units, in case the logic regarding # ellipsoids and units changes in future area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) assert ((abs(area - 3.0) < 0.00000001 and units == QgsUnitTypes.SquareDegrees) or (abs(area - 37176087091.5) < 0.1 and units == QgsUnitTypes.SquareMeters)) da.setEllipsoid("WGS84") area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) assert ((abs(area - 3.0) < 0.00000001 and units == QgsUnitTypes.SquareDegrees) or (abs(area - 37176087091.5) < 0.1 and units == QgsUnitTypes.SquareMeters)) da.setEllipsoidalMode(True) area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) # should always be in Meters Squared self.assertAlmostEqual(area, 37416879192.9, delta=0.1) self.assertEqual(units, QgsUnitTypes.SquareMeters) # test converting the resultant area area = da.convertAreaMeasurement(area, QgsUnitTypes.SquareMiles) self.assertAlmostEqual(area, 14446.7378, delta=0.001) # now try with a source CRS which is in feet polygon = QgsGeometry.fromPolygon([[ QgsPoint(1850000, 4423000), QgsPoint(1851000, 4423000), QgsPoint(1851000, 4424000), QgsPoint(1852000, 4424000), QgsPoint(1852000, 4425000), QgsPoint(1851000, 4425000), QgsPoint(1850000, 4423000) ]]) da.setSourceCrs(27469) da.setEllipsoidalMode(False) # measurement should be in square feet area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) self.assertAlmostEqual(area, 2000000, delta=0.001) self.assertEqual(units, QgsUnitTypes.SquareFeet) # test converting the resultant area area = da.convertAreaMeasurement(area, QgsUnitTypes.SquareYards) self.assertAlmostEqual(area, 222222.2222, delta=0.001) da.setEllipsoidalMode(True) # now should be in Square Meters again area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) self.assertAlmostEqual(area, 184149.37, delta=1.0) self.assertEqual(units, QgsUnitTypes.SquareMeters) # test converting the resultant area area = da.convertAreaMeasurement(area, QgsUnitTypes.SquareYards) self.assertAlmostEqual(area, 220240.8172549, delta=1.0)
def testAreaMeasureAndUnits(self): """Test a variety of area measurements in different CRS and ellipsoid modes, to check that the calculated areas and units are always consistent """ da = QgsDistanceArea() da.setSourceCrs(3452) da.setEllipsoidalMode(False) da.setEllipsoid("NONE") daCRS = QgsCoordinateReferenceSystem() daCRS.createFromSrsId(da.sourceCrs()) polygon = QgsGeometry.fromPolygon( [[ QgsPoint(0, 0), QgsPoint(1, 0), QgsPoint(1, 1), QgsPoint(2, 1), QgsPoint(2, 2), QgsPoint(0, 2), QgsPoint(0, 0), ]] ) # We check both the measured area AND the units, in case the logic regarding # ellipsoids and units changes in future area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) assert ((abs(area - 3.0) < 0.00000001 and units == QgsUnitTypes.SquareDegrees) or (abs(area - 37176087091.5) < 0.1 and units == QgsUnitTypes.SquareMeters)) da.setEllipsoid("WGS84") area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) assert ((abs(area - 3.0) < 0.00000001 and units == QgsUnitTypes.SquareDegrees) or (abs(area - 37176087091.5) < 0.1 and units == QgsUnitTypes.SquareMeters)) da.setEllipsoidalMode(True) area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) # should always be in Meters Squared self.assertAlmostEqual(area, 37416879192.9, delta=0.1) self.assertEqual(units, QgsUnitTypes.SquareMeters) # test converting the resultant area area = da.convertAreaMeasurement(area, QgsUnitTypes.SquareMiles) self.assertAlmostEqual(area, 14446.7378, delta=0.001) # now try with a source CRS which is in feet polygon = QgsGeometry.fromPolygon( [[ QgsPoint(1850000, 4423000), QgsPoint(1851000, 4423000), QgsPoint(1851000, 4424000), QgsPoint(1852000, 4424000), QgsPoint(1852000, 4425000), QgsPoint(1851000, 4425000), QgsPoint(1850000, 4423000) ]] ) da.setSourceCrs(27469) da.setEllipsoidalMode(False) # measurement should be in square feet area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) self.assertAlmostEqual(area, 2000000, delta=0.001) self.assertEqual(units, QgsUnitTypes.SquareFeet) # test converting the resultant area area = da.convertAreaMeasurement(area, QgsUnitTypes.SquareYards) self.assertAlmostEqual(area, 222222.2222, delta=0.001) da.setEllipsoidalMode(True) # now should be in Square Meters again area = da.measureArea(polygon) units = da.areaUnits() print("measured {} in {}".format(area, QgsUnitTypes.toString(units))) self.assertAlmostEqual(area, 184149.37, delta=1.0) self.assertEqual(units, QgsUnitTypes.SquareMeters) # test converting the resultant area area = da.convertAreaMeasurement(area, QgsUnitTypes.SquareYards) self.assertAlmostEqual(area, 220240.8172549, delta=1.0)
from PyQt4.QtCore import QVariant # initialize QGIS application providers qgs = QgsApplication([], True) qgs.setPrefixPath(r'A:\OSGeo4W64\apps\qgis', True) qgs.initQgis() # import QGIS processing toolbox from processing.core.Processing import Processing Processing.initialize() from processing.tools import general # create a QGIS measure object distance_area = QgsDistanceArea() crs = QgsCoordinateReferenceSystem() crs.createFromSrsId(3452) # EPSG:4326 distance_area.setSourceCrs(crs) distance_area.setEllipsoidalMode(True) distance_area.setEllipsoid('WGS84') # define number of iterations of rebalancing phase (more iterations makes more islands) num_iterations = 1 # define school levels school_levels = ['elem', 'midd', 'high'] # define output directory output_dir = r"B:\Workspaces\GIS\GEOG653\final_project\output" # define filenames attendance_areas_filename = r"B:\Workspaces\GIS\GEOG653\final_project\data\MPIA\FS17_COMpolys.shp"
Created on May 21, 2018 @author: Zach """ import calendar import datetime from PyQt5.QtCore import QVariant from qgis.core import QgsApplication, QgsGeometry, QgsPoint, QgsVectorLayer, QgsCoordinateReferenceSystem, QgsField, \ QgsFeature from BalloonPrediction import CUSFPredictionAPI spatial_reference = QgsCoordinateReferenceSystem() spatial_reference.createFromSrsId(3452) # EPSG:4326 qgs = QgsApplication([], False) qgs.setPrefixPath(r"A:\OSGeo4W64\apps\qgis", True) qgs.initQgis() def json_to_polylines(query_json, lines_feature_class, launch_location_name, predict_id): query_prediction = query_json['prediction'] print( f'Using dataset {query_json["request"]["dataset"].replace("-", "").replace(":", "")[0:13]}' ) points = []