Beispiel #1
0
def makeArea(gridLoc, pointList, refname=None):
    " Make a Reference Area with a unique ReferenceID"
    from com.vividsolutions.jts.geom import GeometryFactory, LinearRing, Coordinate, Polygon
    from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData
    CoordinateType = ReferenceData.CoordinateType
    geomFactory = GeometryFactory()
    import jep
    size = len(pointList)
    if pointList[0] != pointList[size - 1]:  # closing the loop
        pointList.append(pointList[0])
    pointArray = jep.jarray(len(pointList), Coordinate)
    for i in range(len(pointList)):
        pointArray[i] = pointList[i]
    lr = geomFactory.createLinearRing(pointArray)
    poly = geomFactory.createPolygon(lr, jep.jarray(0, LinearRing))
    polyArray = jep.jarray(1, Polygon)
    polyArray[0] = poly
    region = geomFactory.createMultiPolygon(polyArray)
    if refname is None:
        refname = "Ref" + getTime()
    refId = ReferenceID(refname)
    refData = ReferenceData(gridLoc, refId, region, CoordinateType.LATLON)
    # randerso: I don't think this is necessary
    # refData.convertToAWIPS()
    return refData
Beispiel #2
0
    def append_to_errors(self, errorsList, check):
        """Clean errors list from duplicate errors and ids that must be
           ignored
        """
        if errorsList[0][0] == "":
            #osmId == "", this tool doesn't give id of OSM objects
            check.errors = [Error(check, e) for e in errorsList]
        else:
            if check.ignoreIds != []:
                #remove OSM objects that the user wants to ignore
                check.errors = [Error(check, e) for e in errorsList if e[0] not in check.ignoreIds]

                #remove duplicate ids
                #check.errors = dict((e.osmId, e) for e in check.errors).values()
            else:
                #copy all errors and remove duplicate ids
                #check.errors = dict((e[0], Error(e)) for e in errorsList).values()
                check.errors = [Error(check, e) for e in errorsList]

            #Remove from the list of errors those that have been reviewed yet
            #while clicking the "Next" button
            check.errors = [e for e in check.errors if e.osmId not in check.reviewedIds]

        #print "\n- errors of selected check in current zone:", [e.osmId for e in check.errors]

        #Randomize the errors so that different users don't start
        #correcting the same errors
        Collections.shuffle(check.errors)

        #Filter errors in favourite zone
        if self.app.favouriteZoneStatus and self.app.favZone.zType != "rectangle":
            #not rectangular favourite area, use jts
            from com.vividsolutions.jts.geom import Coordinate, GeometryFactory
            polygon = self.app.favZone.wktGeom
            errorsInPolygon = []
            for error in check.errors:
                (lat, lon) = error.coords
                point = GeometryFactory().createPoint(Coordinate(lon, lat))
                if polygon.contains(point):
                    if error not in errorsInPolygon:
                        errorsInPolygon.append(error)
            check.errors = errorsInPolygon

        #Apply limits from preferences
        #max number of errors
        limits = []
        if self.app.maxErrorsNumber != "":
            limits.append(self.app.maxErrorsNumber)
        try:
            if self.tool.prefs["limit"] != "":
                limits.append(int(self.tool.prefs["limit"]))
        except:
            pass
        if limits != []:
            check.errors = check.errors[:min(limits)]

        #Reset index of current error
        check.currentErrorIndex = -1
        check.toDo = len(check.errors)
Beispiel #3
0
 def getEnvelope(self):
     env = None
     jenv = self.jobj.getEnvelope()
     if jenv:
         import shapely
         from com.vividsolutions.jts.geom import GeometryFactory
         env = shapely.wkt.loads(
             GeometryFactory().toGeometry(jenv).toText())
     return env
Beispiel #4
0
def createOTPGraphTables():
    otp = OtpsEntryPoint.fromArgs(
        ["--graphs", "/Users/gijspeters/otp/amsterdam", "--autoScan"])
    router = otp.getRouter()
    req = otp.createRequest()
    req.setDateTime(MONDAY.year, MONDAY.month, MONDAY.day, 12, 0, 0)
    req.setMaxTimeSec(14400)
    req.setOrigin(52.37, 4.889)
    sspt = router.plan(req)
    spt = sspt.spt
    vertices = spt.getVertices().toArray()
    con = Verbinding()
    con.createTable(dbtables.HEDGES)
    con.createTable(dbtables.HVERTICES)

    try:
        monitor = VoortgangRegel(len(vertices), VoortgangRegel.MODUS_NUM,
                                 'Vertices geschreven')
        for vertex in vertices:
            dbvertex = (vertex.getIndex(), vertex.getLabel(),
                        WKBWriter().bytesToHex(WKBWriter().write(
                            GeometryFactory(PrecisionModel(),
                                            4326).createPoint(
                                                vertex.getCoordinate()))))
            sql = "INSERT INTO hvertices (vertex_id, label, geom) VALUES (%d, '%s', '%s')" % dbvertex
            con.exe(sql)
            monitor.plusEen()
        con.commit()
        sql = "SELECT vertex_id, id FROM hvertices"
        hvertices = dict(con.selectAll(sql))
        monitor = VoortgangRegel(len(vertices), VoortgangRegel.MODUS_NUM,
                                 'Edges geschreven van vertices')
        for vertex in vertices:
            edges = vertex.getOutgoing().toArray()
            for edge in edges:
                naam = edge.getName()
                if naam == None:
                    naam = ''
                else:
                    naam = naam.replace("'", "")
                try:
                    geom = WKBWriter().bytesToHex(WKBWriter().write(
                        edge.getGeometry()))
                    hedge = (edge.getId(), naam, hvertices[vertex.getIndex()],
                             hvertices[edge.getToVertex().getIndex()], geom,
                             edge.getDistance())
                    sql = "INSERT INTO hedges (edge_id, label, from_id, to_id, geom, distance) VALUES (%d, '%s', %d, %d, '%s', %f)" % hedge
                except:
                    hedge = (edge.getId(), naam, hvertices[vertex.getIndex()],
                             hvertices.get(edge.getToVertex().getIndex(),
                                           -1), edge.getDistance())
                    sql = "INSERT INTO hedges (edge_id, label, from_id, to_id, distance) VALUES (%d, '%s', %d, %d, %f)" % hedge
                con.exe(sql)
            monitor.plusEen()
        con.commit()
    finally:
        con.sluit()
Beispiel #5
0
 def finalDraw(self, event):
     p = event.coords
     width = abs(p[0].x - p[1].x)
     height = abs(p[0].y - p[1].y)
     geo = GeometryFactory()
     shapeFac = GeometricShapeFactory(geo)
     lowLeft = Coordinate()
     lowLeft.x = min(p[0].x, p[1].x)
     lowLeft.y = min(p[0].y, p[1].y)
     shapeFac.setBase(lowLeft)
     shapeFac.setWidth(width)
     shapeFac.setHeight(height)
     shapeFac.setNumPoints(48)
     pa = shapeFac.createCircle().coordinates
     p.clear()
     for pt in pa:
         p.add(pt)
     panel = event.wc.layerViewPanel
     statMsg = "[" + panel.format(width) + ", " + panel.format(height) + "]"
     event.statusMessage = statMsg
Beispiel #6
0
 def read_area_from_osm_ways(self, mode, dataset):
     """Read way in favourite area editing layer and convert them to
        WKT
     """
     converter = JTSConverter(False)
     lines = [converter.convert(way) for way in dataset.ways]
     polygonizer = Polygonizer()
     polygonizer.add(lines)
     polygons = polygonizer.getPolygons()
     multipolygon = GeometryFactory().createMultiPolygon(list(polygons))
     multipolygonWKT = WKTWriter().write(multipolygon)
     if multipolygonWKT == "MULTIPOLYGON EMPTY":
         if mode == "polygon":
             msg = self.app.strings.getString("empty_ways_polygon_msg")
         else:
             msg = self.app.strings.getString("empty_ways_boundaries_msg")
         JOptionPane.showMessageDialog(self,
             msg,
             self.app.strings.getString("Warning"),
             JOptionPane.WARNING_MESSAGE)
         return
     return multipolygonWKT
Beispiel #7
0
"""
The :mod:`geom` module provides geometry classes and utilities for the construction and manipulation of geometry objects.
"""

from com.vividsolutions.jts.geom import GeometryFactory
from com.vividsolutions.jts.geom import Geometry as _Geometry
from com.vividsolutions.jts.geom.prep import PreparedGeometryFactory
from com.vividsolutions.jts.simplify import DouglasPeuckerSimplifier as DP

_factory = GeometryFactory()
_prepfactory = PreparedGeometryFactory()

Geometry = _Geometry
"""
Base class for all geometry classes.
"""


def prepare(g):
    """
  Constructs a prepared geometry. Prepared geometries make repeated spatial 
  operations (such as intersection) more efficient.

  *g* is the :class:`Geometry <geoscript.geom.Geometry>` to prepare.

  >>> from geoscript.geom import readWKT
  >>> prep = prepare(readWKT('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))'))
  >>> prep.intersects(readWKT('POLYGON ((4 4, 6 4, 6 6, 4 6, 4 4))'))
  True
  """
    return _prepfactory.create(g)
Beispiel #8
0
 def setUp(self):
     self.gf = GeometryFactory()
Beispiel #9
0
 def getVertexGeom(self):
     return WKBWriter().bytesToHex(WKBWriter().write(
         GeometryFactory(PrecisionModel(), 4326).createPoint(
             self.srcstate.getVertex().getCoordinate())))