Пример #1
0
    def test_simplify(self):
        geom = wkbelement_from_geojson(
            json.loads(
                '{"type": "LineString", "coordinates": ' +
                '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}'),
            3857)
        route = Route(activities=['hiking'],
                      geometry=DocumentGeometry(geom=None, geom_detail=geom))
        self.session.add(route)
        self.session.flush()

        # check that the line was simplified on insertion
        simplified_geom = route.geometry
        self.session.refresh(simplified_geom)
        geojson = json.loads(
            geojson_from_wkbelement(simplified_geom.geom_detail))
        self.assertEqual(len(geojson['coordinates']), 2)

        # check that the line was simplified after an update
        route.geometry.geom_detail = wkbelement_from_geojson(
            json.loads(
                '{"type": "LineString", "coordinates": ' +
                '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}'),
            3857)

        self.session.flush()
        simplified_geom = route.geometry
        self.session.refresh(simplified_geom)
        geojson = json.loads(
            geojson_from_wkbelement(simplified_geom.geom_detail))
        self.assertEqual(len(geojson['coordinates']), 2)
        self.assertCoodinateEquals([635901, 5723600],
                                   geojson['coordinates'][0])
Пример #2
0
    def test_simplify(self):
        geom = wkbelement_from_geojson(
            '{"type": "LineString", "coordinates": ' +
            '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}', 3857)
        route = Route(
            activities=['hiking'],
            geometry=DocumentGeometry(geom=None, geom_detail=geom))
        self.session.add(route)
        self.session.flush()

        # check that the line was simplified on insertion
        simplified_geom = route.geometry
        self.session.refresh(simplified_geom)
        geojson = json.loads(
            geojson_from_wkbelement(simplified_geom.geom_detail))
        self.assertEqual(len(geojson['coordinates']), 2)

        # check that the line was simplified after an update
        route.geometry.geom_detail = wkbelement_from_geojson(
            '{"type": "LineString", "coordinates": ' +
            '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}', 3857)

        self.session.flush()
        simplified_geom = route.geometry
        self.session.refresh(simplified_geom)
        geojson = json.loads(
            geojson_from_wkbelement(simplified_geom.geom_detail))
        self.assertEqual(len(geojson['coordinates']), 2)
        self.assertCoodinateEquals(
            [635901, 5723600], geojson['coordinates'][0])
Пример #3
0
    def test_save_and_load(self):
        fake_doc = Document()
        self.session.add(fake_doc)
        self.session.flush()

        geom = wkbelement_from_geojson(
            '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857)
        geometry = DocumentGeometry(
            document_id=fake_doc.document_id, geom=geom)
        self.session.add(geometry)
        self.session.flush()
        self.session.expire(geometry)

        geom_loaded = geometry.geom
        geom_str = geojson_from_wkbelement(geom_loaded)

        geom_geojson = json.loads(geom_str)
        self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
Пример #4
0
    def test_save_and_load(self):
        fake_doc = Document()
        self.session.add(fake_doc)
        self.session.flush()

        geom = wkbelement_from_geojson(
            '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857)
        geometry = DocumentGeometry(document_id=fake_doc.document_id,
                                    geom=geom)
        self.session.add(geometry)
        self.session.flush()
        self.session.expire(geometry)

        geom_loaded = geometry.geom
        geom_str = geojson_from_wkbelement(geom_loaded)

        geom_geojson = json.loads(geom_str)
        self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
Пример #5
0
def serialize(data):
    """
    Colanders `serialize` method is not intended for JSON serialization (it
    turns everything into a string and keeps colander.null).
    https://github.com/tisdall/cornice/blob/c18b873/cornice/schemas.py
    Returns the most agnostic version of specified data.
    (remove colander notions, datetimes in ISO, ...)
    """
    if isinstance(data, str):
        return str(data)
    if isinstance(data, collections.Mapping):
        return dict(list(map(serialize, iter(data.items()))))
    if isinstance(data, collections.abc.Iterable):
        return type(data)(list(map(serialize, data)))
    if isinstance(data, (datetime.date, datetime.datetime)):
        return data.isoformat()
    if isinstance(data, WKBElement):
        return geojson_from_wkbelement(data)
    if data is null:
        return None

    return data
Пример #6
0
def serialize(data):
    """
    Colanders `serialize` method is not intended for JSON serialization (it
    turns everything into a string and keeps colander.null).
    https://github.com/tisdall/cornice/blob/c18b873/cornice/schemas.py
    Returns the most agnostic version of specified data.
    (remove colander notions, datetimes in ISO, ...)
    """
    if isinstance(data, str):
        return str(data)
    if isinstance(data, collections.Mapping):
        return dict(list(map(serialize, iter(data.items()))))
    if isinstance(data, collections.Iterable):
        return type(data)(list(map(serialize, data)))
    if isinstance(data, (datetime.date, datetime.datetime)):
        return data.isoformat()
    if isinstance(data, WKBElement):
        return geojson_from_wkbelement(data)
    if data is null:
        return None

    return data