Entities¶
This section introduces various kinds of Entities supported by Cesium.js.
Cartesian¶
Cesium.js handles coordinates using Cartesian class. Cartesian may represent following 2 types of coordinates
- Pair of numerics, like
x,y,z - Geolocation (degrees), like
longitude,latitude,height
>>> import cesiumpy
>>> cesiumpy.Cartesian2(10, 20)
Cartesian2(10, 20)
>>> cesiumpy.Cartesian3(10, 20, 30)
Cartesian3(10, 20, 30)
>>> cesiumpy.Cartesian3.fromDegrees(-110, 40, 0)
Cartesian3.fromDegrees(-110, 40, 0)
Basically you don’t have to use the Cartesian classes because cesiumpy automatically converts python’s list and tuple to Cartesian based on it’s dimension.
Point¶
You can create the Point entity as below. position keyword can accepts 3 elements of list or tuple consists from longitude, latitude and height. position will be converted to Cartesian3 automatically.
You can specify the color and size of the point via color and pixelSize keywords. Refer to the following document to see the details of each options.
>>> p = cesiumpy.Point(position=[-110, 40, 0])
>>> p
Point(-110, 40, 0)
>>> p.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), point : {color : Cesium.Color.WHITE, pixelSize : 10}}'
>>> p = cesiumpy.Point(position=[-110, 40, 0], color=cesiumpy.color.BLUE, pixelSize=20)
>>> p
Point(-110, 40, 0)
>>> p.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), point : {color : Cesium.Color.BLUE, pixelSize : 20}}'
The color constants are defined in cesiumpy.color, also you can specify it by name (str).
>>> p = cesiumpy.Point(position=[-110, 40, 0], color=cesiumpy.color.RED)
>>> p.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), point : {color : Cesium.Color.RED, pixelSize : 10}}'
>>> p = cesiumpy.Point(position=[-110, 40, 0], color='blue')
>>> p.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), point : {color : Cesium.Color.BLUE, pixelSize : 10}}'
Label¶
Label represents text displayed on the map. Refer to the following document to see the details of each options.
>>> l = cesiumpy.Label(position=[-110, 40, 0], text='xxx')
>>> l
Label(-110, 40, 0)
>>> l.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), label : {text : "xxx"}}'
>>> l = cesiumpy.Label(position=[-110, 40, 0], text='xxx', fillColor='red')
>>> l.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), label : {text : "xxx", fillColor : Cesium.Color.RED}}'
Box¶
You can create the Box entity specifying its position and dimensions (size of each dimensions). Refer to the following document to see the details of each options.
>>> b = cesiumpy.Box(position=[-110, 40, 0], dimensions=(40e4, 30e4, 50e4))
>>> b
Box(-110, 40, 0)
>>> b.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), box : {dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0)}}'
>>> b = cesiumpy.Box(position=[-110, 40, 0], dimensions=(10, 20, 30), material='blue')
>>> b.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), box : {dimensions : new Cesium.Cartesian3(10, 20, 30), material : Cesium.Color.BLUE}}'
Ellipse¶
Ellipse can be created by specifying its position, semiMinorAxis and semiMajorAxis. Refer to the following document to see the details of each options.
>>> e = cesiumpy.Ellipse(position=[-110, 40, 0], semiMinorAxis=25e4,
... semiMajorAxis=40e4)
>>> e
Ellipse(-110, 40, 0)
>>> e.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), ellipse : {semiMinorAxis : 250000.0, semiMajorAxis : 400000.0}}'
>>> e = cesiumpy.Ellipse(position=[-110, 40, 0], semiMinorAxis=100,
... semiMajorAxis=200, material='green')
>>> e.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), ellipse : {semiMinorAxis : 100, semiMajorAxis : 200, material : Cesium.Color.GREEN}}'
Cylinder¶
Cylinder can be created by its position and length. Note that its position must be specified with the center of the Cylinder. If you want to put the cylinder on the ground, height should be 100 if cylinder’s length is 200. Refer to the following document to see the details of each options.
>>> c = cesiumpy.Cylinder(position=[-110, 40, 100], length=200,
... topRadius=100, bottomRadius=100)
>>> c
Cylinder(-110, 40, 100)
>>> c.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 100), cylinder : {length : 200, topRadius : 100, bottomRadius : 100}}'
>>> c = cesiumpy.Cylinder(position=[-110, 40, 250], length=500,
... topRadius=100, bottomRadius=100,
... material=cesiumpy.color.ORANGE)
>>> c.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 250), cylinder : {length : 500, topRadius : 100, bottomRadius : 100, material : Cesium.Color.ORANGE}}'
Polygon¶
Polygon can be created by positions kw which specifies list of positions (longitude, latitude ...). The last position will be automatically connected to the first position. Refer to the following document to see the details of each options.
>>> p = cesiumpy.Polygon(hierarchy=[-90, 40, -95, 40, -95, 45, -90, 40])
>>> p
Polygon([-90, 40, -95, 40, -95, 45, -90, 40])
>>> p.script
u'{polygon : {hierarchy : Cesium.Cartesian3.fromDegreesArray([-90, 40, -95, 40, -95, 45, -90, 40])}}'
Rectangle¶
Rectangle can be created 4 elements of list or tuple, which represents south west longitude, south latitude, east longitude and north latitude. Refer to the following document to see the details of each options.
>>> r = cesiumpy.Rectangle(coordinates=(-85, 40, -80, 45))
>>> r
Rectangle(west=-85, south=40, east=-80, north=45)
>>> r.script
u'{rectangle : {coordinates : Cesium.Rectangle.fromDegrees(-85, 40, -80, 45)}}'
Ellipsoid¶
Refer to the following document to see the details of each options.
>>> e = cesiumpy.Ellipsoid(position=(-70, 40, 0), radii=(20e4, 20e4, 30e4))
>>> e
Ellipsoid(-70, 40, 0)
>>> e.script
u'{position : Cesium.Cartesian3.fromDegrees(-70, 40, 0), ellipsoid : {radii : new Cesium.Cartesian3(200000.0, 200000.0, 300000.0)}}'
Wall¶
Refer to the following document to see the details of each options.
>>> w = cesiumpy.Wall(positions=[-60, 40, -65, 40, -65, 45, -60, 45],
... maximumHeights=10e4, minimumHeights=0)
>>> w
Wall([-60, 40, -65, 40, -65, 45, -60, 45])
>>> w.script
u'{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]}}'
Corridor¶
Refer to the following document to see the details of each options.
>>> c = cesiumpy.Corridor(positions=[-120, 30, -90, 35, -60, 30], width=2e5)
>>> c
Corridor([-120, 30, -90, 35, -60, 30])
>>> c.script
u'{corridor : {positions : Cesium.Cartesian3.fromDegreesArray([-120, 30, -90, 35, -60, 30]), width : 200000.0}}'
Polyline¶
Refer to the following document to see the details of each options.
p = cesiumpy.Polyline(positions=[-120, 25, -90, 30, -60, 25], width=0.5)
>>> p
Polyline([-120, 25, -90, 30, -60, 25])
>>> p.script
u'{polyline : {positions : Cesium.Cartesian3.fromDegreesArray([-120, 25, -90, 30, -60, 25]), width : 0.5}}'
PolylineVolume¶
Refer to the following document to see the details of each options.
>>> p = cesiumpy.PolylineVolume(positions=[-120, 20, -90, 25, -60, 20],
... shape=[-5e4, -5e4, 5e4, -5e4, 5e4, 5e4, -5e4, 5e4])
>>> p
PolylineVolume([-120, 20, -90, 25, -60, 20])
>>> p.script
u'{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)]}}'
Billboard¶
Billboard can dispaly a image on the map. Currently it supports to draw pins. You can pass Pin instance to the Billboard via image keyword.Refer to the following document to see the details of each options.
>>> p = cesiumpy.Pin()
>>> b = cesiumpy.Billboard(position=(-110, 40, 0), image=p)
>>> b
Billboard(-110, 40, 0)
>>> b.script
u'{position : Cesium.Cartesian3.fromDegrees(-110, 40, 0), billboard : {image : new Cesium.PinBuilder().fromColor(Cesium.Color.ROYALBLUE, 48)}}'
You can change how Pin looks as below. Also, Pin can have label text to be displayed.
>>> v = cesiumpy.Viewer(**options)
>>> pin1 = cesiumpy.Pin()
>>> bill1 = cesiumpy.Billboard(position=[-120, 40, 0], image=pin1)
>>> v.entities.add(bill1)
>>> pin2 = cesiumpy.Pin(cesiumpy.color.RED)
>>> bill2 = cesiumpy.Billboard(position=[-100, 40, 0], image=pin2)
>>> v.entities.add(bill2)
>>> pin3 = cesiumpy.Pin.fromText('!', color=cesiumpy.color.GREEN)
>>> bill3 = cesiumpy.Billboard(position=[-80, 40, 0], image=pin3)
>>> v.entities.add(bill3)
>>> v
Material¶
You can use image file path via material keyword. The entity will be filled with the
specified image.
v = cesiumpy.Viewer()
e = cesiumpy.Ellipse(position=(-120.0, 40.0, 0), semiMinorAxis=40e4,
semiMajorAxis=40e4, material='data/cesium_logo.png')
v.entities.add(e)
v