Skip to content

Commit

Permalink
Add tests for PhotoOverlay and Region classes
Browse files Browse the repository at this point in the history
  • Loading branch information
cleder committed Jan 14, 2024
1 parent 6945580 commit 3c19073
Show file tree
Hide file tree
Showing 2 changed files with 178 additions and 0 deletions.
103 changes: 103 additions & 0 deletions tests/overlays_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

"""Test the kml classes."""

from pygeoif import geometry as geo

from fastkml import enums
from fastkml import geometry
from fastkml import links
from fastkml import overlays
from fastkml import views
Expand Down Expand Up @@ -213,6 +217,105 @@ def test_latlonbox_nswer(self) -> None:


class TestPhotoOverlay(StdLibrary):
def test_create_photo_overlay_with_all_optional_parameters(self) -> None:
"""Create a PhotoOverlay object with all optional parameters."""
photo_overlay = overlays.PhotoOverlay(
id="photo_overlay_1",
name="Photo Overlay",
visibility=True,
description="This is a photo overlay",
icon=links.Icon(href="https://example.com/photo.jpg"),
view=views.LookAt(
longitude=-122.0822035425683,
latitude=37.42228990140251,
altitude=0,
heading=0,
tilt=0,
range=1000,
altitude_mode=AltitudeMode.clamp_to_ground,
),
point=geometry.Point(
id="point_1",
geometry=geo.Point(-122.0822035425683, 37.42228990140251, 0),
),
shape=enums.Shape.rectangle,
rotation=0,
view_volume=overlays.ViewVolume(
left_fov=-60,
right_fov=60,
bottom_fov=-45,
top_fov=45,
near=1,
),
image_pyramid=overlays.ImagePyramid(
tile_size=256,
max_width=2048,
max_height=2048,
grid_origin=enums.GridOrigin.lower_left,
),
)
assert photo_overlay.id == "photo_overlay_1"
assert photo_overlay.name == "Photo Overlay"
assert photo_overlay.visibility
assert photo_overlay.description == "This is a photo overlay"
assert photo_overlay.shape == enums.Shape.rectangle
assert photo_overlay.rotation == 0

def test_read_photo_overlay(self) -> None:
"""Read a PhotoOverlay object from a KML file."""
doc = (
'<kml:PhotoOverlay xmlns:kml="http://www.opengis.net/kml/2.2" '
'id="photo_overlay_1"><kml:name>Photo Overlay</kml:name>'
"<kml:visibility>1</kml:visibility>"
"<kml:description>This is a photo overlay</kml:description>"
"<kml:LookAt><kml:longitude>-122.0822035425683</kml:longitude>"
"<kml:latitude>37.42228990140251</kml:latitude>"
"<kml:altitude>0</kml:altitude><kml:heading>0</kml:heading>"
"<kml:tilt>0</kml:tilt><kml:altitudeMode>clampToGround</kml:altitudeMode>"
"<kml:range>1000</kml:range></kml:LookAt>"
"<kml:Icon><kml:href>https://example.com/photo.jpg</kml:href></kml:Icon>"
"<kml:rotation>0</kml:rotation>"
"<kml:ViewVolume><kml:leftFov>-60</kml:leftFov>"
"<kml:rightFov>60</kml:rightFov><kml:bottomFov>-45</kml:bottomFov>"
"<kml:topFov>45</kml:topFov><kml:near>1</kml:near>"
"</kml:ViewVolume><kml:ImagePyramid><kml:tileSize>256</kml:tileSize>"
"<kml:maxWidth>2048</kml:maxWidth><kml:maxHeight>2048</kml:maxHeight>"
"<kml:gridOrigin>lowerLeft</kml:gridOrigin></kml:ImagePyramid>"
'<kml:Point id="point_1">'
"<kml:coordinates>-122.082204,37.422290,0.000000</kml:coordinates>"
"</kml:Point><kml:shape>rectangle</kml:shape></kml:PhotoOverlay>"
)

p_overlay = overlays.PhotoOverlay.class_from_string(doc)

assert p_overlay.id == "photo_overlay_1"
assert p_overlay.name == "Photo Overlay"
assert p_overlay.visibility
assert p_overlay.description == "This is a photo overlay"
assert p_overlay.shape == enums.Shape.rectangle
assert p_overlay.rotation == 0
assert p_overlay.view.longitude == -122.0822035425683
assert p_overlay.view.latitude == 37.42228990140251
assert p_overlay.view.altitude == 0
assert p_overlay.view.heading == 0
assert p_overlay.view.tilt == 0
assert p_overlay.view.range == 1000
assert p_overlay.view.altitude_mode == AltitudeMode.clamp_to_ground
assert p_overlay.icon.href == "https://example.com/photo.jpg"
assert p_overlay.view_volume.left_fov == -60
assert p_overlay.view_volume.right_fov == 60
assert p_overlay.view_volume.bottom_fov == -45
assert p_overlay.view_volume.top_fov == 45
assert p_overlay.view_volume.near == 1
assert p_overlay.image_pyramid.tile_size == 256
assert p_overlay.image_pyramid.max_width == 2048
assert p_overlay.image_pyramid.max_height == 2048
assert p_overlay.image_pyramid.grid_origin == enums.GridOrigin.lower_left
assert p_overlay.point.id == "point_1"
assert p_overlay.point.geometry.x == -122.082204
assert p_overlay.point.geometry.y == 37.422290
assert p_overlay.point.geometry.z == 0

def test_camera_altitude_int(self) -> None:
po = overlays.PhotoOverlay(view=views.Camera())
po.view.altitude = 123
Expand Down
75 changes: 75 additions & 0 deletions tests/views_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,81 @@ def test_look_at_read(self) -> None:
assert look_at.begin is None
assert look_at.end is None

def test_region_with_all_optional_parameters(self) -> None:
"""Region object can be initialized with all optional parameters."""
region = views.Region(
id="region1",
lat_lon_alt_box=views.LatLonAltBox(
north=37.85,
south=37.80,
east=-122.35,
west=-122.40,
min_altitude=0,
max_altitude=1000,
altitude_mode=AltitudeMode.clamp_to_ground,
),
lod=views.Lod(
min_lod_pixels=256,
max_lod_pixels=1024,
min_fade_extent=0,
max_fade_extent=512,
),
)

assert region.id == "region1"
assert region.lat_lon_alt_box.north == 37.85
assert region.lat_lon_alt_box.south == 37.80
assert region.lat_lon_alt_box.east == -122.35
assert region.lat_lon_alt_box.west == -122.40
assert region.lat_lon_alt_box.min_altitude == 0
assert region.lat_lon_alt_box.max_altitude == 1000
assert region.lat_lon_alt_box.altitude_mode == AltitudeMode.clamp_to_ground
assert region.lod.min_lod_pixels == 256
assert region.lod.max_lod_pixels == 1024
assert region.lod.min_fade_extent == 0
assert region.lod.max_fade_extent == 512
assert region

def test_region_read(self) -> None:
doc = (
'<kml:Region xmlns:kml="http://www.opengis.net/kml/2.2" '
'id="region1"><kml:LatLonAltBox><kml:north>37.85</kml:north>'
"<kml:south>37.8</kml:south><kml:east>-122.35</kml:east>"
"<kml:west>-122.4</kml:west><kml:minAltitude>0</kml:minAltitude>"
"<kml:maxAltitude>1000</kml:maxAltitude>"
"<kml:altitudeMode>clampToGround</kml:altitudeMode>"
"</kml:LatLonAltBox><kml:Lod><kml:minLodPixels>256</kml:minLodPixels>"
"<kml:maxLodPixels>1024</kml:maxLodPixels>"
"<kml:minFadeExtent>0</kml:minFadeExtent>"
"<kml:maxFadeExtent>512</kml:maxFadeExtent></kml:Lod></kml:Region>"
)

region = views.Region.class_from_string(doc)

assert region.id == "region1"
assert region.lat_lon_alt_box.north == 37.85
assert region.lat_lon_alt_box.south == 37.80
assert region.lat_lon_alt_box.east == -122.35
assert region.lat_lon_alt_box.west == -122.40
assert region.lat_lon_alt_box.min_altitude == 0
assert region.lat_lon_alt_box.max_altitude == 1000
assert region.lat_lon_alt_box.altitude_mode == AltitudeMode.clamp_to_ground
assert region.lod.min_lod_pixels == 256
assert region.lod.max_lod_pixels == 1024
assert region.lod.min_fade_extent == 0
assert region.lod.max_fade_extent == 512
assert region

def test_initialized_with_empty_lat_lon_alt_box(self) -> None:
"""Region object can be initialized with empty LatLonAltBox object."""
lat_lon_alt_box = views.LatLonAltBox()

region = views.Region(lat_lon_alt_box=lat_lon_alt_box)

assert not region
assert region.lat_lon_alt_box == lat_lon_alt_box
assert region.lod is None


class TestLxml(Lxml, TestStdLibrary):
"""Test with lxml."""

0 comments on commit 3c19073

Please sign in to comment.