docstr: Create a circle visual from a geojson data source
docstr_tok: ["Create","a","circle","visual","from","a","geojson","data","source"]
code: def create_html(self, filename=None):
      """Create a circle visual from a geojson data source"""
  
      if isinstance(self.style, str):
          style = "'{}'".format(self.style)
      else:
          style = self.style
  
      options = dict(
          gl_js_version=GL_JS_VERSION,
          accessToken=self.access_token,
          div_id=self.div_id,
          style=style,
          center=list(self.center),
          zoom=self.zoom,
          geojson_data=json.dumps(self.data, ensure_ascii=False),
          belowLayer=self.below_layer,
          opacity=self.opacity,
          minzoom=self.min_zoom,
          maxzoom=self.max_zoom,
          pitch=self.pitch,
          bearing=self.bearing,
          boxZoomOn=json.dumps(self.box_zoom_on),
          doubleClickZoomOn=json.dumps(self.double_click_zoom_on),
          scrollZoomOn=json.dumps(self.scroll_zoom_on),
          touchZoomOn=json.dumps(self.touch_zoom_on),
          popupOpensOnHover=self.popup_open_action == "hover",
          includeSnapshotLinks=self.add_snapshot_links,
          preserveDrawingBuffer=json.dumps(self.add_snapshot_links),
          showScale=self.scale,
          scaleUnits=self.scale_unit_system,
          scaleBorderColor=self.scale_border_color,
          scalePosition=self.scale_position,
          scaleFillColor=self.scale_background_color,
          scaleTextColor=self.scale_text_color,
      )
  
      if self.legend:
          if all(
              [
                  self.legend,
                  self.legend_gradient,
                  self.legend_function == "radius",
              ]
          ):
              raise LegendError(
                  " ".join(
                      [
                          "Gradient legend format not compatible with a variable radius legend.",
                          'Please either change `legend_gradient` to False or `legend_function` to "color".',
                      ]
                  )
              )
  
          options.update(
              showLegend=self.legend,
              legendLayout=self.legend_layout,
              legendFunction=self.legend_function,
              legendStyle=self.legend_style,  # reserve for custom CSS
              legendGradient=json.dumps(self.legend_gradient),
              legendFill=self.legend_fill,
              legendHeaderFill=self.legend_header_fill,
              legendTextColor=self.legend_text_color,
              legendNumericPrecision=json.dumps(
                  self.legend_text_numeric_precision
              ),
              legendTitleHaloColor=self.legend_title_halo_color,
              legendKeyShape=self.legend_key_shape,
              legendKeyBordersOn=json.dumps(self.legend_key_borders_on),
          )
  
      if self.vector_source:
          options.update(
              vectorUrl=self.vector_url,
              vectorLayer=self.vector_layer_name,
              vectorJoinDataProperty=self.vector_join_property,
              joinData=json.dumps(False),
              dataJoinProperty=self.data_join_property,
              enableDataJoin=not self.disable_data_join,
          )
          data = geojson_to_dict_list(self.data)
          if bool(data):
              options.update(
                  joinData=json.dumps(data, ensure_ascii=False)
              )
  
      if self.label_property is None:
          options.update(labelProperty=None)
      else:
          options.update(labelProperty="{" + self.label_property + "}")
  
      options.update(
          labelColor=self.label_color,
          labelSize=self.label_size,
          labelHaloColor=self.label_halo_color,
          labelHaloWidth=self.label_halo_width,
      )
  
      self.add_unique_template_variables(options)
  
      if filename:
          html = templates.format(self.template, **options)
          with codecs.open(filename, "w", "utf-8-sig") as f:
              f.write(html)
          return None
      else:
          return templates.format(self.template, **options)
  
imports: import codecs
  import json
  import os
  from IPython.core.display import HTML, display
  import numpy
  import requests
  from mapboxgl.errors import TokenError, LegendError
  from mapboxgl.utils import color_map, numeric_map, img_encode, geojson_to_dict_list
  from mapboxgl import templates
label_desc: Use image node_id 5 for calling the MapViz obj's underlying member method code with example usage: obj.create_html(filename) and returns: None, templates