Path: blob/main/tests/plugins/test_timestamped_geo_json.py
1601 views
"""1Test TimestampedGeoJson2-----------------------34"""56import numpy as np78import folium9from folium import plugins10from folium.template import Template11from folium.utilities import normalize121314def test_timestamped_geo_json():15coordinates = [16[17[18[lon - 8 * np.sin(theta), -47 + 6 * np.cos(theta)]19for theta in np.linspace(0, 2 * np.pi, 25)20],21[22[lon - 4 * np.sin(theta), -47 + 3 * np.cos(theta)]23for theta in np.linspace(0, 2 * np.pi, 25)24],25]26for lon in np.linspace(-150, 150, 7)27]28data = {29"type": "FeatureCollection",30"features": [31{32"type": "Feature",33"geometry": {34"type": "Point",35"coordinates": [0, 0],36},37"properties": {"times": [1435708800000 + 12 * 86400000]},38},39{40"type": "Feature",41"geometry": {42"type": "MultiPoint",43"coordinates": [[lon, -25] for lon in np.linspace(-150, 150, 49)],44},45"properties": {46"times": [471435708800000 + i * 86400000 for i in np.linspace(0, 25, 49)48]49},50},51{52"type": "Feature",53"geometry": {54"type": "LineString",55"coordinates": [[lon, 25] for lon in np.linspace(-150, 150, 25)],56},57"properties": {58"times": [591435708800000 + i * 86400000 for i in np.linspace(0, 25, 25)60],61"style": {"color": "red"},62},63},64{65"type": "Feature",66"geometry": {67"type": "MultiLineString",68"coordinates": [69[70[lon - 4 * np.sin(theta), 47 + 3 * np.cos(theta)]71for theta in np.linspace(0, 2 * np.pi, 25)72]73for lon in np.linspace(-150, 150, 13)74],75},76"properties": {77"times": [781435708800000 + i * 86400000 for i in np.linspace(0, 25, 13)79]80},81},82{83"type": "Feature",84"geometry": {85"type": "MultiPolygon",86"coordinates": coordinates,87},88"properties": {89"times": [901435708800000 + i * 86400000 for i in np.linspace(0, 25, 7)91]92},93},94],95}9697m = folium.Map([47, 3], zoom_start=1)98tgj = plugins.TimestampedGeoJson(data).add_to(m)99100out = normalize(m._parent.render())101102# Verify the imports.103assert (104'<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>'105in out106)107assert (108'<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>'109in out110)111assert (112'<script src="https://cdn.jsdelivr.net/npm/[email protected]/iso8601.min.js"></script>'113in out114)115assert (116'<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.timedimension.min.js"></script>' # noqa117in out118) # noqa119assert (120'<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/default.min.css"/>'121in out122) # noqa123assert (124'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.timedimension.control.css"/>' # noqa125in out126) # noqa127assert (128'<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>'129in out130)131132# Verify that the script is okay.133tmpl = Template(134"""135L.Control.TimeDimensionCustom = L.Control.TimeDimension.extend({136_getDisplayDateFormat: function(date){137var newdate = new moment(date);138console.log(newdate)139return newdate.format("{{this.date_options}}");140}141});142{{this._parent.get_name()}}.timeDimension = L.timeDimension(143{144period: {{ this.period|tojson }},145}146);147var timeDimensionControl = new L.Control.TimeDimensionCustom(148{{ this.options|tojavascript }}149);150{{this._parent.get_name()}}.addControl(this.timeDimensionControl);151152var geoJsonLayer = L.geoJson({{this.data}}, {153pointToLayer: function (feature, latLng) {154if (feature.properties.icon == 'marker') {155if(feature.properties.iconstyle){156return new L.Marker(latLng, {157icon: L.icon(feature.properties.iconstyle)});158}159//else160return new L.Marker(latLng);161}162if (feature.properties.icon == 'circle') {163if (feature.properties.iconstyle) {164return new L.circleMarker(latLng, feature.properties.iconstyle)165};166//else167return new L.circleMarker(latLng);168}169//else170171return new L.Marker(latLng);172},173style: function (feature) {174return feature.properties.style;175},176onEachFeature: function(feature, layer) {177if (feature.properties.popup) {178layer.bindPopup(feature.properties.popup);179}180if (feature.properties.tooltip) {181layer.bindTooltip(feature.properties.tooltip);182}183}184})185186var {{this.get_name()}} = L.timeDimension.layer.geoJson(187geoJsonLayer,188{189updateTimeDimension: true,190addlastPoint: {{ this.add_last_point|tojson }},191duration: {{ this.duration }},192}193).addTo({{this._parent.get_name()}});194"""195) # noqa196expected = normalize(tmpl.render(this=tgj))197assert expected in out198199bounds = m.get_bounds()200assert bounds == [[-53.0, -158.0], [50.0, 158.0]], bounds201202203