Exemplo n.º 1
0
def getoscdiff(timebase, cat1, cat2, cat3):

    timenow = int(time.time())
    epochts = int(time.mktime(settings.REPLICATE_EPOCH.timetuple()))

    if timebase == "minute":
        pageStep = 60000000
    if timebase == "hour":
        pageStep = 60000000 * 60
    if timebase == "day":
        pageStep = 60000000 * 60 * 24

    pageStep2 = pageStep / 1000
    pageStep3 = pageStep2 / 1000

    pageStartTimestamp = int(cat1) * pageStep + int(cat2) * pageStep2 + int(
        cat3) * pageStep3 + epochts
    elapsedInPage = timenow - pageStartTimestamp
    if elapsedInPage < 0:
        return HttpResponseNotFound("Page does not exist")

    t = p.GetTransaction("ACCESS SHARE")
    osmData = pgmap.OsmData()
    t.GetReplicateDiff(pageStartTimestamp - pageStep3, pageStartTimestamp,
                       osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return sio.getvalue()
Exemplo n.º 2
0
def object_history(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetObjectsHistoryById(objType, [int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 3
0
def ways_for_node(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetWaysForNodes([int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 4
0
def relations_for_obj(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetRelationsForObjs(objType.encode("UTF-8"), [int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 5
0
    def __init__(self, bbox):
        self.sio = io.BytesIO()
        self.enc = pgmap.PyOsmXmlEncode(self.sio, common.xmlAttribs)

        #Don't let transaction object go out of scope while query is running
        self.t = p.GetTransaction("ACCESS SHARE")
        self.mapQuery = self.t.GetQueryMgr()
        if self.mapQuery.Start(bbox, self.enc) < 0:
            raise RuntimeError("Map query failed to start")
        self.complete = False
Exemplo n.º 6
0
def object_version(request, objType, objId, objVer):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    idVerPair = pgmap.pairi64i64(int(objId), int(objVer))
    t.GetObjectsByIdVer(objType, [idVerPair], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 7
0
def get_affected_from_upload(request):

    t = p.GetTransaction("ACCESS SHARE")

    affectedData = pgmap.OsmData()
    t.GetAffectedObjects(request.data, affectedData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio)
    affectedData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 8
0
def object_history(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetObjectsHistoryById(objType, [int(objId)], osmData)

    if len(osmData.nodes) + len(osmData.ways) + len(osmData.relations) == 0:
        return HttpResponseNotFound("{} {} not found".format(objType, objId))

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 9
0
def get_affected(request, objType, objIds):

    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetObjectsById(objType, list(map(int, objIds.split(","))), osmData)

    affectedData = pgmap.OsmData()
    t.GetAffectedObjects(osmData, affectedData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    affectedData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 10
0
def ways_for_node(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    #Check reference object exists
    osmData = pgmap.OsmData()
    t.GetObjectsById(objType, pgmap.seti64([int(objId)]), osmData)

    # From the 0.6 spec: "There is no error if the element does not exist."

    osmData = pgmap.OsmData()
    t.GetWaysForNodes([int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 11
0
def index(request, objType):
    if objType not in request.GET:
        return HttpResponseBadRequest("Incorrect arguments in URL")

    try:
        objIds = map(int, request.GET[objType].split(","))
    except ValueError as err:
        return HttpResponseBadRequest(err)

    t = p.GetTransaction("ACCESS SHARE")
    osmData = pgmap.OsmData()
    t.GetObjectsById(objType[:-1], list(objIds), osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 12
0
def historic_map(request):
    bbox = request.GET.get('bbox', None)
    if bbox is None:
        return HttpResponseBadRequest("bbox must be specified as an argument",
                                      content_type="text/plain")

    dt = request.GET.get('datetime', None)
    print(dt)
    if dt is None:
        return HttpResponseBadRequest(
            "datetime must be specified as an argument",
            content_type="text/plain")
    dt2 = int(round(common.get_utc_posix_timestamp(parse_datetime(dt))))

    bbox = list(map(float, bbox.split(",")))
    if len(bbox) != 4:
        return HttpResponseBadRequest("Invalid bbox",
                                      content_type="text/plain")

    #left,bottom,right,top
    dLon = bbox[2] - bbox[0]
    dLat = bbox[3] - bbox[1]
    area = dLon * dLat
    if area > settings.AREA_MAXIMUM:
        err = "The maximum bbox size is {}, and your request was too large. Either request a smaller area, or use planet.osm".format(
            settings.AREA_MAXIMUM)
        response = HttpResponseBadRequest(err, content_type="text/plain")
        response["Error"] = err
        return response

    t = p.GetTransaction("ACCESS SHARE")

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    ret = t.GetHistoricMapQuery(bbox, dt2, enc)

    t.Commit()

    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 13
0
def full_obj(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetFullObjectById(objType, int(objId), osmData)

    if len(osmData.nodes) + len(osmData.ways) + len(osmData.relations) == 0:

        # No live version found. Check to see if this ever existed.
        t.GetObjectsHistoryById(objType, [int(objId)], osmData)

        if len(osmData.nodes) + len(osmData.ways) + len(
                osmData.relations) == 0:
            return HttpResponseNotFound("{} {} not found".format(
                objType, objId))
        else:
            # The object once existed, therefore it was deleted.
            return HttpResponse("Gone", status=410, content_type="text/plain")

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 14
0
def element(request, objType, objId):

    if request.method == 'GET':
        osmData = pgmap.OsmData()
        t = p.GetTransaction("ACCESS SHARE")
        t.GetObjectsById(objType.encode("UTF-8"), pgmap.seti64([int(objId)]),
                         osmData)

        if len(osmData.nodes) + len(osmData.ways) + len(
                osmData.relations) == 0:
            return HttpResponseNotFound("{} {} not found".format(
                objType, objId))

        sio = io.BytesIO()
        enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
        osmData.StreamTo(enc)
        return HttpResponse(sio.getvalue(), content_type='text/xml')

    if request.method in ['PUT', 'DELETE']:
        t = p.GetTransaction("EXCLUSIVE")
        action = None
        if request.method == "PUT": action = "modify"
        if request.method == "DELETE": action = "delete"

        obj = None
        if objType == "node": obj = request.data.nodes[0]
        if objType == "way": obj = request.data.ways[0]
        if objType == "relation": obj = request.data.relations[0]

        if obj.objId != objId:
            return HttpResponseBadRequest("Object has wrong ID")

        ret = upload_single_object(action, request, obj, objType, t)
        if ret != True:
            return ret

        return HttpResponse("", content_type='text/plain')
Exemplo n.º 15
0
    settings = ReadConfig("config.cfg")

    p = pgmap.PgMap(
        "dbname={} user={} password='******' hostaddr={} port=5432".format(
            settings["dbname"], settings["dbuser"], settings["dbpass"],
            settings["dbhost"]), settings["dbtableprefix"],
        settings["dbtabletestprefix"])
    print("Connected to database", p.Ready())

    t = p.GetTransaction(b"ACCESS SHARE")

    if 0:
        sio = io.BytesIO()
        #enc = pgmap.PyO5mEncode(sio)
        enc = pgmap.PyOsmXmlEncode(sio)

        print(
            t.MapQuery((-1.1473846, 50.7360206, -0.9901428, 50.8649113), 0,
                       enc))

        data = sio.getvalue()
        print(len(data), "bytes")

    if 1:
        osmData = pgmap.OsmData()
        objectIds = [1000594005591, 1000595178493, 1000594446551]
        t.GetObjectsById("node", pgmap.seti64(objectIds), osmData)
        print(len(osmData.nodes))
        for i in range(len(osmData.nodes)):
            node = osmData.nodes[i]