def test_add_entities_with_properties(self): viewer = cesiumpy.Viewer(divid="viewertest") box = cesiumpy.Box(dimensions=(40e4, 30e4, 50e4), position=[-120, 40, 0]) viewer.entities.add(box, material=cesiumpy.color.RED) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-120.0, 40.0, 0.0), box : {dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0), material : Cesium.Color.RED}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(result, exp) viewer = cesiumpy.Viewer(divid="viewertest") box1 = cesiumpy.Box(dimensions=(40e4, 30e4, 50e4), position=[-120, 40, 0]) box2 = cesiumpy.Box(dimensions=(50e4, 60e4, 70e4), position=[-100, 80, 0]) viewer.entities.add([box1, box2], material=cesiumpy.color.RED) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-120.0, 40.0, 0.0), box : {dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0), material : Cesium.Color.RED}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-100.0, 80.0, 0.0), box : {dimensions : new Cesium.Cartesian3(500000.0, 600000.0, 700000.0), material : Cesium.Color.RED}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(result, exp)
def test_add_scripts(self): viewer = cesiumpy.Viewer(divid="viewertest") viewer.scripts.add('console.log("xxx");') result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); console.log("xxx"); </script>""" self.assertEqual(result, exp) viewer = cesiumpy.Viewer(divid="viewertest") viewer.scripts.add(['console.log("xxx");', 'console.log("yyy");']) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); console.log("xxx"); console.log("yyy"); </script>""" self.assertEqual(result, exp) msg = "item must be" with nose.tools.assert_raises_regexp(ValueError, msg): viewer.scripts.add(1)
def test_scatter_array_interface(self): _skip_if_no_numpy() import numpy as np class ExtendedArray(object): def __init__(self, values): self.values = values def __array__(self): return np.array(self.values) v = cesiumpy.Viewer(divid='viewertest') res = v.plot.scatter(ExtendedArray([130, 140, 150]), ExtendedArray([30, 40, 50])) self.assertIsInstance(v, cesiumpy.Viewer) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 30.0, 0.0), point : {pixelSize : 10.0, color : Cesium.Color.WHITE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 40.0, 0.0), point : {pixelSize : 10.0, color : Cesium.Color.WHITE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 50.0, 0.0), point : {pixelSize : 10.0, color : Cesium.Color.WHITE}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(res.to_html(), exp) # entities must be added to original instance self.assertEqual(v.to_html(), exp)
def test_model(self): viewer = cesiumpy.Viewer(divid="viewertest") m = cesiumpy.Model('xxx.gltf', modelMatrix=(-100, 40, 0), scale=200) viewer.scene.primitives.add(m) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.scene.primitives.add(Cesium.Model.fromGltf({url : "xxx.gltf", modelMatrix : Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 0.0)), scale : 200.0})); </script>""" self.assertEqual(result, exp)
def test_czml_viewer(self): v = cesiumpy.Viewer(divid='viewertest') d = cesiumpy.CzmlDataSource('data/simple.czml') v.dataSources.add(d) result = v.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.dataSources.add(Cesium.CzmlDataSource.load("data/simple.czml")); </script>""" self.assertEqual(result, exp)
def setUp(self): self.options = dict(animation=True, baseLayerPicker=False, fullscreenButton=False, geocoder=False, homeButton=False, infoBox=False, sceneModePicker=True, selectionIndicator=False, navigationHelpButton=False, timeline=False, navigationInstructionsInitiallyVisible=False) self.viewer = cesiumpy.Viewer(divid='viewertest', **self.options)
def test_pin_label_list(self): v = cesiumpy.Viewer(divid='viewertest') v.plot.pin([130, 140, 150], [30, 40, 50], text=['!', '?', 'XXX']) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 30.0, 0.0), billboard : {image : new Cesium.PinBuilder().fromText("!", Cesium.Color.ROYALBLUE, 48.0)}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 40.0, 0.0), billboard : {image : new Cesium.PinBuilder().fromText("?", Cesium.Color.ROYALBLUE, 48.0)}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 50.0, 0.0), billboard : {image : new Cesium.PinBuilder().fromText("XXX", Cesium.Color.ROYALBLUE, 48.0)}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_scatter_errors(self): v = cesiumpy.Viewer(divid='viewertest') msg = "y must be list-likes: 0" with nose.tools.assert_raises_regexp(ValueError, msg): v.plot.scatter([130, 140, 150], 0) msg = "y length must be 3: " with nose.tools.assert_raises_regexp(ValueError, msg): v.plot.scatter([130, 140, 150], [30, 40]) msg = "size length must be 3: " with nose.tools.assert_raises_regexp(ValueError, msg): v.plot.scatter([130, 140, 150], [30, 40, 50], size=[1, 2])
def test_scatter_xy_size_list(self): v = cesiumpy.Viewer(divid='viewertest') v.plot.scatter([130, 140, 150], [30, 40, 50], size=[20, 30, 40]) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 30.0, 0.0), point : {pixelSize : 20.0, color : Cesium.Color.WHITE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 40.0, 0.0), point : {pixelSize : 30.0, color : Cesium.Color.WHITE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 50.0, 0.0), point : {pixelSize : 40.0, color : Cesium.Color.WHITE}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_viewer(self): _skip_if_no_shapely() v = cesiumpy.Viewer(divid='viewertest') v.entities.add(cesiumpy.countries.abw) res = v.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({polygon : {hierarchy : Cesium.Cartesian3.fromDegreesArray([-69.882233, 12.41111, -69.946945, 12.436666, -70.056122, 12.534443, -70.059448, 12.538055, -70.060287, 12.544167, -70.063339, 12.621666, -70.063065, 12.628611, -70.058899, 12.631109, -70.053345, 12.629721, -70.035278, 12.61972, -70.031113, 12.616943, -69.932236, 12.528055, -69.896957, 12.480833, -69.891403, 12.472221, -69.885559, 12.457777, -69.873901, 12.421944, -69.873337, 12.415833, -69.876114, 12.411665, -69.882233, 12.41111])}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(res, exp)
def test_bar_size_scalar(self): v = cesiumpy.Viewer(divid='viewertest') v.plot.bar([130, 140, 150], [30, 40, 50], [10e5, 20e5, 30e5], size=1e5) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 30.0, 500000.0), cylinder : {length : 1000000.0, topRadius : 100000.0, bottomRadius : 100000.0}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 40.0, 1000000.0), cylinder : {length : 2000000.0, topRadius : 100000.0, bottomRadius : 100000.0}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 50.0, 1500000.0), cylinder : {length : 3000000.0, topRadius : 100000.0, bottomRadius : 100000.0}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_label_size_scalar(self): v = cesiumpy.Viewer(divid='viewertest') v.plot.label(['A', 'B', 'C'], [130, 140, 150], [30, 40, 50], size=2) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 30.0, 0.0), label : {text : "A", scale : 2.0}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 40.0, 0.0), label : {text : "B", scale : 2.0}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 50.0, 0.0), label : {text : "C", scale : 2.0}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_viewer(self): url = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer' imageryProvider = cesiumpy.ArcGisMapServerImageryProvider(url=url) v = cesiumpy.Viewer(divid='viewertest', imageryProvider=imageryProvider) result = v.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest", {baseLayerPicker : false, imageryProvider : new Cesium.ArcGisMapServerImageryProvider({url : "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"})}); </script>""" self.assertEqual(result, exp)
def test_scatter_pandas(self): _skip_if_no_pandas() import pandas as pd df = pd.DataFrame({ 'lon': [130, 140, 150], 'lat': [50, 60, 70], 'r': [10, 20, 30], 'c': ['r', 'g', 'b'] }) # we can't use size column v = cesiumpy.Viewer(divid='viewertest') v.plot.scatter(x=df.lon, y=df.lat, size=df.r) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 50.0, 0.0), point : {pixelSize : 10.0, color : Cesium.Color.WHITE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 60.0, 0.0), point : {pixelSize : 20.0, color : Cesium.Color.WHITE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 70.0, 0.0), point : {pixelSize : 30.0, color : Cesium.Color.WHITE}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp) v = cesiumpy.Viewer(divid='viewertest') v.plot.scatter(x=df.lon, y=df.lat, size=df.r, color=df.c) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 50.0, 0.0), point : {pixelSize : 10.0, color : Cesium.Color.RED}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 60.0, 0.0), point : {pixelSize : 20.0, color : Cesium.Color.GREEN}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 70.0, 0.0), point : {pixelSize : 30.0, color : Cesium.Color.BLUE}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_viewer(self): url = '//assets.agi.com/stk-terrain/world' terrainProvider = cesiumpy.CesiumTerrainProvider(url=url, requestWaterMask=True) v = cesiumpy.Viewer(divid='viewertest', terrainProvider=terrainProvider) result = v.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest", {baseLayerPicker : false, terrainProvider : new Cesium.CesiumTerrainProvider({url : "//assets.agi.com/stk-terrain/world", requestWaterMask : true})}); </script>""" self.assertEqual(result, exp)
def test_geojson_viewer(self): ds = cesiumpy.GeoJsonDataSource('./test.geojson', markerSymbol='?') viewer = cesiumpy.Viewer(divid='viewertest') viewer.dataSources.add(ds) viewer.camera.flyTo((-105.01621, 39.57422, 1000)) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.dataSources.add(Cesium.GeoJsonDataSource.load("./test.geojson", {markerSymbol : "?"})); widget.camera.flyTo({destination : Cesium.Cartesian3.fromDegrees(-105.01621, 39.57422, 1000.0)}); </script>""" self.assertEqual(result, exp)
def test_viewer(self): viewer = cesiumpy.Viewer(divid='viewertest') viewer.camera.flyTo((135, 30, 145, 45)) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.camera.flyTo({destination : Cesium.Rectangle.fromDegrees(135.0, 30.0, 145.0, 45.0)}); </script>""" self.assertEqual(result, exp) # add entity (doesn't change camera position) cyl = cesiumpy.Cylinder(position=(120, 35, 5000), length=10000, topRadius=10000, bottomRadius=20000, material='red') viewer.entities.add(cyl) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(120.0, 35.0, 5000.0), cylinder : {length : 10000.0, topRadius : 10000.0, bottomRadius : 20000.0, material : Cesium.Color.RED}}); widget.camera.flyTo({destination : Cesium.Rectangle.fromDegrees(135.0, 30.0, 145.0, 45.0)}); </script>""" self.assertEqual(result, exp) # we can pass entity with position to camera viewer.camera.flyTo(cyl) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(120.0, 35.0, 5000.0), cylinder : {length : 10000.0, topRadius : 10000.0, bottomRadius : 20000.0, material : Cesium.Color.RED}}); widget.camera.flyTo({destination : Cesium.Cartesian3.fromDegrees(120.0, 35.0, 5000.0)}); </script>""" self.assertEqual(result, exp)
def test_geocode_defaultheight(self): import geopy try: viewer = cesiumpy.Viewer(divid='viewertest') viewer.camera.flyTo(u'Los Angeles') result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.camera.flyTo({destination : Cesium.Cartesian3.fromDegrees(-118.2436849, 34.0522342, 100000.0)}); </script>""" self.assertEqual(result, exp) except geopy.exc.GeocoderQuotaExceeded: raise nose.SkipTest("exceeded geocoder quota")
def test_viewer(self): try: viewer = cesiumpy.Viewer(divid='viewertest') cyl = cesiumpy.Cylinder(position='Los Angeles', length=30000, topRadius=10000, bottomRadius=10000, material='AQUA') viewer.entities.add(cyl) viewer.camera.flyTo('Los Angeles') result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-118.2436849, 34.0522342, 0.0), cylinder : {length : 30000.0, topRadius : 10000.0, bottomRadius : 10000.0, material : Cesium.Color.AQUA}}); widget.camera.flyTo({destination : Cesium.Cartesian3.fromDegrees(-118.2436849, 34.0522342, 100000.0)}); </script>""" self.assertEqual(result, exp) except geopy.exc.GeocoderQuotaExceeded: raise nose.SkipTest("exceeded geocoder quota")
def test_contour_xyz(self): _skip_if_no_matplotlib() import numpy as np import matplotlib.mlab as mlab delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) # difference of Gaussians Z = 10.0 * (Z2 - Z1) viewer = cesiumpy.Viewer() viewer.plot.contour(X, Y, Z) self.assertEqual(len(viewer.entities), 7) self.assertTrue( all(isinstance(x, cesiumpy.Polyline) for x in viewer.entities)) self.assertEqual(viewer.entities[0].material, cesiumpy.color.Color(0.0, 0.0, 0.5, 1.0))
def test_add_cylinder(self): viewer = cesiumpy.Viewer(divid='viewertest', **self.options) cyl = cesiumpy.Cylinder(position=(-110, 50, 2000000), length=4000000, topRadius=100000, bottomRadius=100000, material=cesiumpy.color.AQUA, name='x') viewer.entities.add(cyl) result = viewer.to_html() # entity name must come first exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest", {animation : true, baseLayerPicker : false, fullscreenButton : false, geocoder : false, homeButton : false, infoBox : false, sceneModePicker : true, selectionIndicator : false, timeline : false, navigationHelpButton : false, navigationInstructionsInitiallyVisible : false}); widget.entities.add({name : "x", position : Cesium.Cartesian3.fromDegrees(-110.0, 50.0, 2000000.0), cylinder : {length : 4000000.0, topRadius : 100000.0, bottomRadius : 100000.0, material : Cesium.Color.AQUA}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(result, exp)
def test_bar_pandas(self): _skip_if_no_pandas() import pandas as pd df = pd.DataFrame({ 'lon': [130, 140, 150], 'lat': [50, 60, 70], 'h': [1e5, 2e5, 3e5], 'c': ['r', 'g', 'b'] }) v = cesiumpy.Viewer(divid='viewertest') v.plot.bar(x=df.lon, y=df.lat, z=df.h, color=df.c) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 50.0, 50000.0), cylinder : {length : 100000.0, topRadius : 10000.0, bottomRadius : 10000.0, material : Cesium.Color.RED}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 60.0, 100000.0), cylinder : {length : 200000.0, topRadius : 10000.0, bottomRadius : 10000.0, material : Cesium.Color.GREEN}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 70.0, 150000.0), cylinder : {length : 300000.0, topRadius : 10000.0, bottomRadius : 10000.0, material : Cesium.Color.BLUE}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_label_pandas(self): _skip_if_no_pandas() import pandas as pd df = pd.DataFrame({ 'lon': [130, 140, 150], 'lat': [50, 60, 70], 's': [1, 2, 3], 'label': ['a', 'b', 'c'], 'c': ['r', 'g', 'b'] }) v = cesiumpy.Viewer(divid='viewertest') v.plot.label(df.label, x=df.lon, y=df.lat, size=df.s, color=df.c) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 50.0, 0.0), label : {text : "a", fillColor : Cesium.Color.RED, scale : 1.0}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 60.0, 0.0), label : {text : "b", fillColor : Cesium.Color.GREEN, scale : 2.0}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 70.0, 0.0), label : {text : "c", fillColor : Cesium.Color.BLUE, scale : 3.0}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_pin_pandas(self): _skip_if_no_pandas() import pandas as pd df = pd.DataFrame({ 'lon': [130, 140, 150], 'lat': [50, 60, 70], 's': [10, 20, 30], 'label': ['a', 'b', 'c'], 'c': ['r', 'g', 'b'] }) v = cesiumpy.Viewer(divid='viewertest') v.plot.pin(x=df.lon, y=df.lat, size=df.s, color=df.c, text=df.label) exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest"); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(130.0, 50.0, 0.0), billboard : {image : new Cesium.PinBuilder().fromText("a", Cesium.Color.RED, 10.0)}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(140.0, 60.0, 0.0), billboard : {image : new Cesium.PinBuilder().fromText("b", Cesium.Color.GREEN, 20.0)}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(150.0, 70.0, 0.0), billboard : {image : new Cesium.PinBuilder().fromText("c", Cesium.Color.BLUE, 30.0)}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(v.to_html(), exp)
def test_add_polygon(self): viewer = cesiumpy.Viewer(divid="viewertest", **self.options) pol = cesiumpy.Polygon([ -109.080842, 45.002073, -105.91517, 45.002073, -104.058488, 44.996596, -104.053011, 43.002989, -104.053011, 41.003906, -105.728954, 40.998429, -107.919731, 41.003906, -109.04798, 40.998429, -111.047063, 40.998429, -111.047063, 42.000709, -111.047063, 44.476286, -111.05254, 45.002073 ], material=cesiumpy.color.RED, name='x') viewer.entities.add(pol) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest", {animation : true, baseLayerPicker : false, fullscreenButton : false, geocoder : false, homeButton : false, infoBox : false, sceneModePicker : true, selectionIndicator : false, timeline : false, navigationHelpButton : false, navigationInstructionsInitiallyVisible : false}); widget.entities.add({name : "x", polygon : {hierarchy : Cesium.Cartesian3.fromDegreesArray([-109.080842, 45.002073, -105.91517, 45.002073, -104.058488, 44.996596, -104.053011, 43.002989, -104.053011, 41.003906, -105.728954, 40.998429, -107.919731, 41.003906, -109.04798, 40.998429, -111.047063, 40.998429, -111.047063, 42.000709, -111.047063, 44.476286, -111.05254, 45.002073]), material : Cesium.Color.RED}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(result, exp)
import cesiumpy v = cesiumpy.CesiumWidget() v = cesiumpy.Viewer() b = cesiumpy.Box(dimensions=(40e4, 30e4, 50e4), material=cesiumpy.color.RED, position=[-120, 40, 0]) v.entities.add(b)#print
def test_add_entities(self): viewer = cesiumpy.Viewer(divid="viewertest", **self.options) box = cesiumpy.Box(dimensions=(40e4, 30e4, 50e4), material=cesiumpy.color.RED, position=[-120, 40, 0]) viewer.entities.add(box) ellipse = cesiumpy.Ellipse(semiMinorAxis=25e4, semiMajorAxis=40e4, material=cesiumpy.color.BLUE, position=[-110, 40, 0]) viewer.entities.add(ellipse) cyl = cesiumpy.Cylinder(position=[-100, 40, 50e4], length=100e4, topRadius=10e4, bottomRadius=10e4, material=cesiumpy.color.AQUA) viewer.entities.add(cyl) pol = cesiumpy.Polygon([-90, 40, -95, 40, -95, 45, -90, 40], material=cesiumpy.color.ORANGE) viewer.entities.add(pol) rect = cesiumpy.Rectangle(coordinates=(-85, 40, -80, 45), material=cesiumpy.color.GREEN) viewer.entities.add(rect) ellipsoid = cesiumpy.Ellipsoid(position=(-70, 40, 0), radii=(20e4, 20e4, 30e4), material=cesiumpy.color.GREEN) viewer.entities.add(ellipsoid) wall = cesiumpy.Wall(positions=[-60, 40, -65, 40, -65, 45, -60, 45], maximumHeights=[10e4] * 4, minimumHeights=[0] * 4, material=cesiumpy.color.RED) viewer.entities.add(wall) corridor = cesiumpy.Corridor(positions=[-120, 30, -90, 35, -60, 30], width=2e5, material=cesiumpy.color.RED) viewer.entities.add(corridor) polyline = cesiumpy.Polyline(positions=[-120, 25, -90, 30, -60, 25], width=0.5, material=cesiumpy.color.BLUE) viewer.entities.add(polyline) polylinevolume = cesiumpy.PolylineVolume( positions=[-120, 20, -90, 25, -60, 20], shape=[ cesiumpy.Cartesian2(-50000, -50000), cesiumpy.Cartesian2(50000, -50000), cesiumpy.Cartesian2(50000, 50000), cesiumpy.Cartesian2(-50000, 50000) ], material=cesiumpy.color.GREEN) viewer.entities.add(polylinevolume) result = viewer.to_html() exp = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest", {animation : true, baseLayerPicker : false, fullscreenButton : false, geocoder : false, homeButton : false, infoBox : false, sceneModePicker : true, selectionIndicator : false, timeline : false, navigationHelpButton : false, navigationInstructionsInitiallyVisible : false}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-120.0, 40.0, 0.0), box : {dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0), material : Cesium.Color.RED}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-110.0, 40.0, 0.0), ellipse : {semiMinorAxis : 250000.0, semiMajorAxis : 400000.0, material : Cesium.Color.BLUE}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 500000.0), cylinder : {length : 1000000.0, topRadius : 100000.0, bottomRadius : 100000.0, material : Cesium.Color.AQUA}}); widget.entities.add({polygon : {hierarchy : Cesium.Cartesian3.fromDegreesArray([-90, 40, -95, 40, -95, 45, -90, 40]), material : Cesium.Color.ORANGE}}); widget.entities.add({rectangle : {coordinates : Cesium.Rectangle.fromDegrees(-85.0, 40.0, -80.0, 45.0), material : Cesium.Color.GREEN}}); widget.entities.add({position : Cesium.Cartesian3.fromDegrees(-70.0, 40.0, 0.0), ellipsoid : {radii : new Cesium.Cartesian3(200000.0, 200000.0, 300000.0), material : Cesium.Color.GREEN}}); widget.entities.add({wall : {positions : Cesium.Cartesian3.fromDegreesArray([-60, 40, -65, 40, -65, 45, -60, 45]), maximumHeights : [100000.0, 100000.0, 100000.0, 100000.0], minimumHeights : [0, 0, 0, 0], material : Cesium.Color.RED}}); widget.entities.add({corridor : {positions : Cesium.Cartesian3.fromDegreesArray([-120, 30, -90, 35, -60, 30]), width : 200000.0, material : Cesium.Color.RED}}); widget.entities.add({polyline : {positions : Cesium.Cartesian3.fromDegreesArray([-120, 25, -90, 30, -60, 25]), width : 0.5, material : Cesium.Color.BLUE}}); widget.entities.add({polylineVolume : {positions : Cesium.Cartesian3.fromDegreesArray([-120, 20, -90, 25, -60, 20]), shape : [new Cesium.Cartesian2(-50000.0, -50000.0), new Cesium.Cartesian2(50000.0, -50000.0), new Cesium.Cartesian2(50000.0, 50000.0), new Cesium.Cartesian2(-50000.0, 50000.0)], material : Cesium.Color.GREEN}}); widget.zoomTo(widget.entities); </script>""" self.assertEqual(result, exp) # clear entities viewer.entities.clear() result = viewer.to_html() exp_clear = """<script src="https://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script> <link rel="stylesheet" href="https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" type="text/css"> <div id="viewertest" style="width:100%; height:100%;"><div> <script type="text/javascript"> var widget = new Cesium.Viewer("viewertest", {animation : true, baseLayerPicker : false, fullscreenButton : false, geocoder : false, homeButton : false, infoBox : false, sceneModePicker : true, selectionIndicator : false, timeline : false, navigationHelpButton : false, navigationInstructionsInitiallyVisible : false}); </script>""" self.assertEqual(result, exp_clear) # add multiple objects at once viewer = cesiumpy.Viewer(divid="viewertest", **self.options) objs = [ box, ellipse, cyl, pol, rect, ellipsoid, wall, corridor, polyline, polylinevolume ] viewer.entities.add(objs) result = viewer.to_html() self.assertEqual(result, exp) viewer.entities.clear() result = viewer.to_html() self.assertEqual(result, exp_clear)