[QGIS-Developer] [Qgis-user] New Features in Shape Tools 3.2.0

C Hamilton adenaculture at gmail.com
Thu Sep 27 09:34:37 PDT 2018


I am resending this since I did not include everyone.

I wrote a little script that calculates the area using geographiclib in
QGIS. You need to have the Shape Tools plugin installed and then change the
path accordingly in the script. You also need to have the polygon layer
selected in QGIS because it is looking for the active layer and it only
pulls out the first polygon. You can run it from the python console. Here
are the results running it on your polygon.

num   = 4017
perim = 503.3782852369916 km
area  = -14737.935340098571 km^2

It is interesting that the area is negative. It must be the direction that
he points are added. This value corresponds to Caris LOTS.

Calvin


On Tue, Sep 25, 2018 at 9:31 AM, Kristian Evers <kreve at sdfe.dk> wrote:

> Right, here are the calculated areas as returned by a number of different
> GIS applications and the planimeter app of GeographicLib for reference:
>
> Caris LOTS: 14.737 km^2
> ArcMap:     14.727,446 km^2
> MapInfo:    14.727,352 km^2
> GeoMedia:   14.726,443 km^2
> Planimeter: 14.722,522 km^2
> QGIS 3.2:   14.652,181 km^2
> QGIS 2.8:   14.652,181 km^2
>
> The polygon that I have used to get the numbers above can be found here:
> https://gist.github.com/kbevers/207b5bcb9be20e7554abe5f56742ec2c
>
> I am quite confident that GeographicLib delivers the most accurate result
> (if you have doubts, this reference [0] should convince you). As can be
> seen from the table above all but QGIS come fairly close. I expect some
> variation in the results as these are numerical approximations, although I
> think QGIS is too far of the mark. My suspicion is that the geodesic
> algorithm used by QGIS (and apparently GRASS) is to blame here.
>
> /Kristian
>
> [0] https://arxiv.org/pdf/1102.1215.pdf
>
> -----Oprindelig meddelelse-----
> Fra: QGIS-Developer <qgis-developer-bounces at lists.osgeo.org> På vegne af
> Kristian Evers
> Sendt: 25. september 2018 09:15
> Til: Nyall Dawson <nyall.dawson at gmail.com>
> Cc: qgis-developer <qgis-developer at lists.osgeo.org>
> Emne: Re: [QGIS-Developer] [Qgis-user] New Features in Shape Tools 3.2.0
>
> It's not a small area, that's why I have been nitpicking ellipsoid area
> calculation
> algorithms!
> I did end up doing the calculations with geographiblib to get a reference
> to judge
> various other calculations by. It's a pain in the butt to extract the data
> from a
> polygon shapefile (or whatever) and format it to suit the planimeter app of
> geographiclib. It would be so much cooler if I could get the same results
> by
> clicking info on a polygon in QGIS :-)
>
> /Kristian
>
>
> -----Oprindelig meddelelse-----
> Fra: Nyall Dawson <nyall.dawson at gmail.com>
> Sendt: 25. september 2018 09:07
> Til: Kristian Evers <kreve at sdfe.dk>
> Cc: Paolo Cavallini <cavallini at faunalia.it>; qgis-developer <
> qgis-developer at lists.osgeo.org>
> Emne: Re: [QGIS-Developer] [Qgis-user] New Features in Shape Tools 3.2.0
>
> On Tue, 25 Sep 2018 at 16:59, Kristian Evers <kreve at sdfe.dk> wrote:
> >
> > Hi Paolo,
> >
> > I have some rought notes that I can try to polish up a bit and share
> here.
> > I'll see if I can find the time for that today. I didn't get to the
> bottom of
> > the problem but I am leaning towards the issue being that QGIS uses an
> > inferior algorithm to determine geodesics. Unfortunately I couldn't find
> out
> > from either the source code or the documentation which algorithm is used.
> > As far as I remember it differs from the otherwise popular algorithm by
> > Vincenty. That may be because a different algorithm is used or the
> > Implementation is wrong.
> >
> > I'll get back with a better write-up later and some test data and
> results.
>
> We use a direct port from GRASS:
>
> https://github.com/qgis/QGIS/blob/master/src/core/qgsdistancearea.cpp#L690
>
> vs GRASS upstream:
>
> https://trac.osgeo.org/grass/browser/grass/trunk/lib/gis/
> area_poly1.c?rev=71260
>
> It's not very stable for very small areas -- better to use cartesian
> calculations there. Or bring in geographiclib and punt the
> responsibility elsewhere ;)
>
> Nyall
>
>
>
> >
> > /Kristian
> >
> > -----Oprindelig meddelelse-----
> > Fra: QGIS-Developer <qgis-developer-bounces at lists.osgeo.org> På vegne
> af Paolo Cavallini
> > Sendt: 25. september 2018 08:23
> > Til: qgis-developer at lists.osgeo.org
> > Emne: Re: [QGIS-Developer] [Qgis-user] New Features in Shape Tools 3.2.0
> >
> > Hi Kristian,
> >
> >
> > Il 09/25/2018 07:24 AM, Kristian Evers ha scritto:
> > >
> > >
> > > On a related note, I have been meaning to raise a similar issue based
> > > on QGIS’s not so accurate polygon-area-on-the-ellipsoid calculations.
> > > A colleague of mine came across some differences between QGIS and
> > > CARIS LOTS while doing area calculations in relation to a border
> > > dispute at sea. After that I tested several popular closed source GIS
> > > apps and they all performed better than QGIS.
> > this is worth exploring in detail. could you please be more specific? do
> > you have a test case? could you share the results, or give us a way to
> > replicate them?
> > Thanks.
> >
> > --
> > Paolo Cavallini - www.faunalia.eu
> > QGIS.ORG Chair:
> > http://planet.qgis.org/planet/user/28/tag/qgis%20board/
> >
> > _______________________________________________
> > QGIS-Developer mailing list
> > QGIS-Developer at lists.osgeo.org
> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > _______________________________________________
> > QGIS-Developer mailing list
> > QGIS-Developer at lists.osgeo.org
> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20180927/c4bee0ae/attachment.html>
-------------- next part --------------
import os, sys
# Change the path to the shapetools plugin
sys.path.append(os.path.dirname('C:/Users/user/AppData/Roaming/QGIS/QGIS3/profiles/default/python/plugins/shapetools/ext-libs/geographiclib'))
from geographiclib.geodesic import Geodesic
from geographiclib.polygonarea import PolygonArea
from qgis.core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject
geod = Geodesic.WGS84
epsg4326 = QgsCoordinateReferenceSystem("EPSG:4326")

layer = iface.activeLayer()
layercrs = layer.crs()
trans = QgsCoordinateTransform(layercrs, epsg4326, QgsProject.instance())
iter = layer.getFeatures()
f = next(iter)
if f.geometry().isMultipart():
    poly = f.geometry().asMultiPolygon()[0]
else:
    poly = f.geometry().asPolygon()

gp = geod.Polygon()

for p in poly[0]:
    p = trans.transform(p)
    gp.AddPoint(p.y(), p.x())
    
num, perim, area = gp.Compute()

print( "num   = {}".format(num))
print( "perim = {}".format(perim/1000))
print( "area  = {}".format(area/1000000))



More information about the QGIS-Developer mailing list