From ebc81377445dd505ac894e064397d4bb29d2b3cb Mon Sep 17 00:00:00 2001 From: smellman Date: Fri, 24 Nov 2023 07:51:22 +0000 Subject: [PATCH] deploy: 4324407f6285c93a15b4b7005328b50731ea7749 --- .buildinfo | 4 + .doctrees/environment.pickle | Bin 0 -> 314143 bytes .doctrees/index.doctree | Bin 0 -> 10816 bytes .doctrees/modules.doctree | Bin 0 -> 2773 bytes .doctrees/plateauutils.citygmlfinder.doctree | Bin 0 -> 46104 bytes .doctrees/plateauutils.doctree | Bin 0 -> 2979 bytes .../plateauutils.flood_converter.doctree | Bin 0 -> 43243 bytes .doctrees/plateauutils.mesh_geocorder.doctree | Bin 0 -> 29587 bytes .doctrees/plateauutils.parser.doctree | Bin 0 -> 43635 bytes .doctrees/plateauutils.tile_list.doctree | Bin 0 -> 30571 bytes .nojekyll | 0 _sources/index.rst.txt | 74 ++ _sources/modules.rst.txt | 8 + _sources/plateauutils.citygmlfinder.rst.txt | 11 + _sources/plateauutils.flood_converter.rst.txt | 26 + _sources/plateauutils.mesh_geocorder.rst.txt | 18 + _sources/plateauutils.parser.rst.txt | 15 + _sources/plateauutils.rst.txt | 10 + _sources/plateauutils.tile_list.rst.txt | 18 + _static/alabaster.css | 703 +++++++++++++ _static/basic.css | 925 ++++++++++++++++++ _static/custom.css | 1 + _static/doctools.js | 156 +++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/language_data.js | 199 ++++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 84 ++ _static/searchtools.js | 574 +++++++++++ _static/sphinx_highlight.js | 154 +++ genindex.html | 377 +++++++ index.html | 166 ++++ modules.html | 181 ++++ objects.inv | Bin 0 -> 884 bytes plateauutils.citygmlfinder.html | 209 ++++ plateauutils.flood_converter.html | 238 +++++ plateauutils.html | 212 ++++ plateauutils.mesh_geocorder.html | 209 ++++ plateauutils.parser.html | 245 +++++ plateauutils.tile_list.html | 207 ++++ py-modindex.html | 167 ++++ search.html | 121 +++ searchindex.js | 1 + 44 files changed, 5326 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/modules.doctree create mode 100644 .doctrees/plateauutils.citygmlfinder.doctree create mode 100644 .doctrees/plateauutils.doctree create mode 100644 .doctrees/plateauutils.flood_converter.doctree create mode 100644 .doctrees/plateauutils.mesh_geocorder.doctree create mode 100644 .doctrees/plateauutils.parser.doctree create mode 100644 .doctrees/plateauutils.tile_list.doctree create mode 100644 .nojekyll create mode 100644 _sources/index.rst.txt create mode 100644 _sources/modules.rst.txt create mode 100644 _sources/plateauutils.citygmlfinder.rst.txt create mode 100644 _sources/plateauutils.flood_converter.rst.txt create mode 100644 _sources/plateauutils.mesh_geocorder.rst.txt create mode 100644 _sources/plateauutils.parser.rst.txt create mode 100644 _sources/plateauutils.rst.txt create mode 100644 _sources/plateauutils.tile_list.rst.txt create mode 100644 _static/alabaster.css create mode 100644 _static/basic.css create mode 100644 _static/custom.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 genindex.html create mode 100644 index.html create mode 100644 modules.html create mode 100644 objects.inv create mode 100644 plateauutils.citygmlfinder.html create mode 100644 plateauutils.flood_converter.html create mode 100644 plateauutils.html create mode 100644 plateauutils.mesh_geocorder.html create mode 100644 plateauutils.parser.html create mode 100644 plateauutils.tile_list.html create mode 100644 py-modindex.html create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..eea7f0b --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 5a20730a096fd05426fdb39f2fb9397f +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..da51de8f90d662792bdf921d5b5fc225e63faa41 GIT binary patch literal 314143 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 literal 0 HcmV?d00001 diff --git a/.doctrees/plateauutils.citygmlfinder.doctree b/.doctrees/plateauutils.citygmlfinder.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9c1bcd87f0eff1c7e76c72b4f3574f0cfaf962f5 GIT binary patch literal 46104 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 literal 0 HcmV?d00001 diff --git a/.doctrees/plateauutils.doctree b/.doctrees/plateauutils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b41cc15779b28448a475eb4917ee5cec84834c18 GIT binary patch literal 2979 zcmai0O>ZML81A-Bnxskku^&RT1y*R;uGl6BaX_3_fDoc02ZXroj+_}Mw(7A5+ta3p zm0+tyRPqI_k@y?jIPh=!L*VhuWSZo%m7tm zl~ChdD^YQtQfd7g|KwNy(jU9FCKpEKI;P&OK_g~dB$`V9+`E2Iw_KP(b$-jx*m5Q7 z}&Q7`&LkcqZieK)}2erfpaZGt>tnGrrE2hW1^L`6u5THpNPoO)tY;nDz{l~{fO<1Tzg6} zM8ql$gtZe8hp{Bhu-Gmg0)O%h%TBe-wZN)}RzzV`!!8^*LLV=^+n*?9rLuHk^Yo7E z1qK5UqS-|0)I-uY7>f)rOan0*m^>&YRM0{aU2w~yIbpzKb)aI9k?U%jDQzP`&ne2c z?mCQ!df9M$bjDFNOKfiDN)6XY=s2IkUH^h;iK;&SUKr-LjnMrVW^KlLf-WRk<*+^DaxH-y^cwBcQp;X6JfFe6SxT^HF8Z5!vr~^ z96SL~K?yU@nyycBtD;+xTj#)5FUiv^s_}=a76K0FX-PydxKl_9^oQQxiZVm5-c!|%QDB*^TL5g*hTl2ZVjCGNW!6Xzz2BW=7Et=Dsdl0_h z1k70sB9*~ff_`sTuy+2IV17S~$5ML+dP} zDd8f*3oNi~5%ym7h5}f{q~x?~w?XB3c(J%v$t4(GKoJ)w$8gxl5?X-96Sidl literal 0 HcmV?d00001 diff --git a/.doctrees/plateauutils.flood_converter.doctree b/.doctrees/plateauutils.flood_converter.doctree new file mode 100644 index 0000000000000000000000000000000000000000..729942ceb17e4b6552ad09f79047097a23e82d81 GIT binary patch literal 43243 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 literal 0 HcmV?d00001 diff --git a/.doctrees/plateauutils.parser.doctree b/.doctrees/plateauutils.parser.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4dae76710172954190966f8148de13c85dd32a81 GIT binary patch literal 43635 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 project. + +Source code available at `GitHub `_. + +How to develop +-------------- + +.. code:: bash + + python3.9 -m venv venv + ./venv/bin/activate + pip install -U pip + pip install -r dev-requirements.txt + pytest --cov=plateauutils --cov-report=html --cov-fail-under=90 + +How to install +-------------- + +.. code:: bash + + pip install plateauutils + +Usage +----- + +CityGML and MvtTile parsers. + +.. code:: python + + >>> from shapely.geometry import Point + >>> from plateauutils.mesh_geocorder.geo_to_mesh import point_to_meshcode + >>> point = Point(139.71475, 35.70078) + >>> mesh_code = point_to_meshcode(point, "2/1") + >>> mesh_code + '533945471' + >>> from shapely import from_wkt + >>> from plateauutils.parser.city_gml_parser import CityGMLParser + >>> target_polygon = from_wkt("POLYGON ((130.41249721501615 33.224722548534864, 130.41249721501615 33.22506264293093, 130.41621606802997 33.22506264293093, 130.41621606802997 33.224722548534864, 130.41249721501615 33.224722548534864))") + >>> parser = CityGMLParser(target_polygon) + >>> result = parser.download_and_parse("https://assets.cms.plateau.reearth.io/assets/d6/70821e-7f58-4f69-bc34-341875704e78/40203_kurume-shi_2020_citygml_3_op.zip", "/tmp") + >>> result + [{'gid': 'bldg_383f1804-aa34-4634-949f-f769e09fa92d', 'center': [130.41263587199947, 33.22489181671553], 'min_height': 3.805999994277954, 'measured_height': 9.3, 'building_structure_type': '非木造'}, {'gid': 'bldg_877dea60-35d0-4fd9-8b02-852e39c75d81', 'center': [130.41619367090038, 33.22492719812357], 'min_height': 4.454999923706055, 'measured_height': 3.0, 'building_structure_type': '非木造'},...] + >>> from plateauutils.parser.mvt_tile_parser import MvtTileParser + >>> target_polygon = from_wkt("POLYGON ((130.525689 33.323966, 130.522728 33.314069, 130.511441 33.308653, 130.501013 33.30937, 130.492516 33.318516, 130.493717 33.325831, 130.504618 33.332249, 130.512857 33.332213, 130.525689 33.323966))") + >>> parser = MvtTileParser(target_polygon) + >>> result = parser.download_and_parse("https://assets.cms.plateau.reearth.io/assets/43/53a0e1-cc14-4228-a5ef-19333a23596d/40203_kurume-shi_2020_3dtiles-mvt_3_op.zip", "/tmp") + >>> result + ['/tmp/40203_kurume-shi_2020_3dtiles-mvt_3_op/luse/15/28254/13174.mvt'] + +Flood converter. + +.. code:: python + + >>> from plateauutils.flood_converter.flood_to_3dtiles import FloodTo3dtiles + >>> f = FloodTo3dtiles() + >>> f.convert('/tmp/floodmap_depth', '/tmp/depth_3dtiles') + >>> from plateauutils.flood_converter.flood_to_png import FloodToPng + >>> p = FloodToPng('/tmp/floodmap_depth') + >>> p.parse('/tmp/depth_png') + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + modules + diff --git a/_sources/modules.rst.txt b/_sources/modules.rst.txt new file mode 100644 index 0000000..bacb14d --- /dev/null +++ b/_sources/modules.rst.txt @@ -0,0 +1,8 @@ +plateauutils +============ + +.. toctree:: + :maxdepth: 4 + + plateauutils + \ No newline at end of file diff --git a/_sources/plateauutils.citygmlfinder.rst.txt b/_sources/plateauutils.citygmlfinder.rst.txt new file mode 100644 index 0000000..620df2d --- /dev/null +++ b/_sources/plateauutils.citygmlfinder.rst.txt @@ -0,0 +1,11 @@ +plateauutils.citygmlfinder パッケージ +====================================== + +plateauutils.citygmlfinder.from_reearth_cms モジュール +------------------------------------------------------- + +.. automodule:: plateauutils.citygmlfinder.from_reearth_cms + :members: + :undoc-members: + :show-inheritance: + diff --git a/_sources/plateauutils.flood_converter.rst.txt b/_sources/plateauutils.flood_converter.rst.txt new file mode 100644 index 0000000..4dc16dc --- /dev/null +++ b/_sources/plateauutils.flood_converter.rst.txt @@ -0,0 +1,26 @@ +plateauutils.flood_converter パッケージ +=============================================================== + +plateauutils.flood_converter.flood_to_xyz モジュール +--------------------------------------------------------------- + +.. automodule:: plateauutils.flood_converter.flood_to_xyz + :members: + :undoc-members: + :show-inheritance: + +plateauutils.flood_converter.flood_to_3dtiles モジュール +--------------------------------------------------------------- + +.. automodule:: plateauutils.flood_converter.flood_to_3dtiles + :members: + :undoc-members: + :show-inheritance: + +plateauutils.flood_converter.flood_to_png モジュール +--------------------------------------------------------------- + +.. automodule:: plateauutils.flood_converter.flood_to_png + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/plateauutils.mesh_geocorder.rst.txt b/_sources/plateauutils.mesh_geocorder.rst.txt new file mode 100644 index 0000000..6d76430 --- /dev/null +++ b/_sources/plateauutils.mesh_geocorder.rst.txt @@ -0,0 +1,18 @@ +plateauutils.mesh_geocorder パッケージ +====================================== + +plateauutils.mesh_geocorder.geo_to_mesh モジュール +-------------------------------------------------- + +.. automodule:: plateauutils.mesh_geocorder.geo_to_mesh + :members: + :undoc-members: + :show-inheritance: + +plateauutils.mesh_geocorder.polygon_to_meshcode_list モジュール +--------------------------------------------------------------- + +.. automodule:: plateauutils.mesh_geocorder.polygon_to_meshcode_list + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/plateauutils.parser.rst.txt b/_sources/plateauutils.parser.rst.txt new file mode 100644 index 0000000..ac5543a --- /dev/null +++ b/_sources/plateauutils.parser.rst.txt @@ -0,0 +1,15 @@ +plateauutils.parser パッケージ +====================================== + +plateauutils.parser.city_gml_parser モジュール +-------------------------------------------------- + +.. automodule:: plateauutils.parser.city_gml_parser + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: plateauutils.parser.mvt_tile_parser + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_sources/plateauutils.rst.txt b/_sources/plateauutils.rst.txt new file mode 100644 index 0000000..33a335f --- /dev/null +++ b/_sources/plateauutils.rst.txt @@ -0,0 +1,10 @@ +plateauutils パッケージ +======================= + +.. toctree:: + + plateauutils.mesh_geocorder + plateauutils.tile_list + plateauutils.parser + plateauutils.citygmlfinder + plateauutils.flood_converter diff --git a/_sources/plateauutils.tile_list.rst.txt b/_sources/plateauutils.tile_list.rst.txt new file mode 100644 index 0000000..c3bea3d --- /dev/null +++ b/_sources/plateauutils.tile_list.rst.txt @@ -0,0 +1,18 @@ +plateauutils.tile_list パッケージ +====================================== + +plateauutils.tile_list.geo_to_tile モジュール +-------------------------------------------------- + +.. automodule:: plateauutils.tile_list.geo_to_tile + :members: + :undoc-members: + :show-inheritance: + +plateauutils.tile_list.polygon_to_tile_list モジュール +--------------------------------------------------------------- + +.. automodule:: plateauutils.tile_list.polygon_to_tile_list + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/_static/alabaster.css b/_static/alabaster.css new file mode 100644 index 0000000..517d0b2 --- /dev/null +++ b/_static/alabaster.css @@ -0,0 +1,703 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..7e4c114 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..57c7df3 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,84 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000 } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #888888 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mb { color: #990000 } /* Literal.Number.Bin */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000..0c07ceb --- /dev/null +++ b/genindex.html @@ -0,0 +1,377 @@ + + + + + + + Index — plateauutils documentation + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ A + | C + | D + | F + | M + | N + | O + | P + | S + | T + | U + | W + +
+

A

+ + +
+ +

C

+ + + +
+ +

D

+ + +
+ +

F

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + +
+ +

P

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + +
+ +

W

+ + + +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..0068e06 --- /dev/null +++ b/index.html @@ -0,0 +1,166 @@ + + + + + + + + Welcome to plateauutils’s documentation! — plateauutils documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Welcome to plateauutils’s documentation!

+

This is a collection of utilities for the Plateau project.

+

Source code available at GitHub.

+
+

How to develop

+
python3.9 -m venv venv
+./venv/bin/activate
+pip install -U pip
+pip install -r dev-requirements.txt
+pytest --cov=plateauutils --cov-report=html --cov-fail-under=90
+
+
+
+
+

How to install

+
pip install plateauutils
+
+
+
+
+

Usage

+

CityGML and MvtTile parsers.

+
>>> from shapely.geometry import Point
+>>> from plateauutils.mesh_geocorder.geo_to_mesh import point_to_meshcode
+>>> point = Point(139.71475, 35.70078)
+>>> mesh_code = point_to_meshcode(point, "2/1")
+>>> mesh_code
+'533945471'
+>>> from shapely import from_wkt
+>>> from plateauutils.parser.city_gml_parser import CityGMLParser
+>>> target_polygon = from_wkt("POLYGON ((130.41249721501615 33.224722548534864, 130.41249721501615 33.22506264293093, 130.41621606802997 33.22506264293093, 130.41621606802997 33.224722548534864, 130.41249721501615 33.224722548534864))")
+>>> parser = CityGMLParser(target_polygon)
+>>> result = parser.download_and_parse("https://assets.cms.plateau.reearth.io/assets/d6/70821e-7f58-4f69-bc34-341875704e78/40203_kurume-shi_2020_citygml_3_op.zip", "/tmp")
+>>> result
+[{'gid': 'bldg_383f1804-aa34-4634-949f-f769e09fa92d', 'center': [130.41263587199947, 33.22489181671553], 'min_height': 3.805999994277954, 'measured_height': 9.3, 'building_structure_type': '非木造'}, {'gid': 'bldg_877dea60-35d0-4fd9-8b02-852e39c75d81', 'center': [130.41619367090038, 33.22492719812357], 'min_height': 4.454999923706055, 'measured_height': 3.0, 'building_structure_type': '非木造'},...]
+>>> from plateauutils.parser.mvt_tile_parser import MvtTileParser
+>>> target_polygon = from_wkt("POLYGON ((130.525689 33.323966, 130.522728 33.314069, 130.511441 33.308653, 130.501013 33.30937, 130.492516 33.318516, 130.493717 33.325831, 130.504618 33.332249, 130.512857 33.332213, 130.525689 33.323966))")
+>>> parser = MvtTileParser(target_polygon)
+>>> result = parser.download_and_parse("https://assets.cms.plateau.reearth.io/assets/43/53a0e1-cc14-4228-a5ef-19333a23596d/40203_kurume-shi_2020_3dtiles-mvt_3_op.zip", "/tmp")
+>>> result
+['/tmp/40203_kurume-shi_2020_3dtiles-mvt_3_op/luse/15/28254/13174.mvt']
+
+
+

Flood converter.

+
>>> from plateauutils.flood_converter.flood_to_3dtiles import FloodTo3dtiles
+>>> f = FloodTo3dtiles()
+>>> f.convert('/tmp/floodmap_depth', '/tmp/depth_3dtiles')
+>>> from plateauutils.flood_converter.flood_to_png import FloodToPng
+>>> p = FloodToPng('/tmp/floodmap_depth')
+>>> p.parse('/tmp/depth_png')
+
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/modules.html b/modules.html new file mode 100644 index 0000000..00fad5a --- /dev/null +++ b/modules.html @@ -0,0 +1,181 @@ + + + + + + + + plateauutils — plateauutils documentation + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..aa8ce9d610f918363dd2513a9172a1d47993e0c8 GIT binary patch literal 884 zcmV-)1B?74AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGk#Y+-a| zVRdzMX>4-}BOq2~a&u{KZaN?eBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?AZc?T zV{dJ6a%FRKWn>_Ab7^j8AbMuZrd;rKzDzIigq>8pj);gXo>=HVKfHP zO<+V?7C@0INjXucBL0Go{furM`Ze{BloTafl118yL@%;=Jl@kCkGz920wsodE)ya^ zl*l4Z$ugk`bFkzr4LQb;%T*YqBFKu%l%bs9;BAoE*R5nqUK_>fn_xQ0PDg;x>^+ag zhsOwKGGSCB@osQ&l=^&}yk8Nez0jdFP-&LFV!2{y zWNb!b-*Hrk+N-&t`G{Ye0y4-2_8B#xD0e(jVxJz}O2)Bw0DuU2jg|jE83GVk?n36- z8}Oiiyn!Bz@4gSFLexj*tD*VWoi=5hgPCHn3S-P7#&!Kr|1?QU?J?`DafZxpAI#L_ ziXnVjyU+)HF6}%d{fLxbWs);e#D-@p;6rg4OQ@_znmabE@}Y?cNg|||1hK)u+)ON3 zoi;bsEA*bUG5zdE1D4AyceE2{cmWat}|w+JuW$WZl>p&8rvw$gX*X}?WyrN$p; zH}f5#ck7yf7g+{~JTf$=?B)TN<9+O~t5!BLBFZiVYPWEbu zMOvw$afeC7QXELu0{;8)O9V4Qf?Pjxm`n}!!-9G(se8RCBJ^VQ1n0Es^?YtG)*Y-O#+}L&xVWsx8 z8ZHGlv#NqNR^w9dn{eCSUotlH?IU5CJA~}h^++Di3w01_JDmlFJX*CE8kt#hYv$)L K#*_d35uHnor==_a literal 0 HcmV?d00001 diff --git a/plateauutils.citygmlfinder.html b/plateauutils.citygmlfinder.html new file mode 100644 index 0000000..34adbb7 --- /dev/null +++ b/plateauutils.citygmlfinder.html @@ -0,0 +1,209 @@ + + + + + + + + plateauutils.citygmlfinder パッケージ — plateauutils documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

plateauutils.citygmlfinder パッケージ

+
+

plateauutils.citygmlfinder.from_reearth_cms モジュール

+
+
+exception plateauutils.citygmlfinder.from_reearth_cms.NoArgsException
+

Bases: Exception

+
+ +
+
+exception plateauutils.citygmlfinder.from_reearth_cms.NotFoundException
+

Bases: Exception

+
+ +
+
+plateauutils.citygmlfinder.from_reearth_cms.private_query(endpoint: str | None = None, access_token: str | None = None, project: str | None = None, model: str | None = None, prefecture: str | None = None, city_name: str | None = None)
+

Re:EarthのプライベートAPIを利用して都道府県、市町村名からCityGMLを取得する

+
+

Parameters

+
+
endpointstr

APIのエンドポイント

+
+
access_tokenstr

APIのアクセストークン

+
+
projectstr

プロジェクトのIDもしくはエイリアス

+
+
modelstr

モデルのIDもしくはエイリアス

+
+
prefecturestr

都道府県

+
+
city_namestr

市町村

+
+
+
+
+

Returns

+
+
str

CityGMLのパス

+
+
+
+
+ +
+
+plateauutils.citygmlfinder.from_reearth_cms.public_query(endpoint: str | None = None, prefecture: str | None = None, city_name: str | None = None) str
+

Re:EarthのパブリックAPIを利用して都道府県、市町村名からCityGMLを取得する

+
+

Parameters

+
+
endpointstr

APIのエンドポイント

+
+
prefecturestr

都道府県

+
+
city_namestr

市町村

+
+
+
+
+

Returns

+
+
str

CityGMLのパス

+
+
+
+
+ +
+
+plateauutils.citygmlfinder.from_reearth_cms.upload_to_reearth(endpoint: str | None = None, access_token: str | None = None, project: str | None = None, filepath: str | None = None)
+

Re:EarthのプライベートAPIを利用してプロジェクトにファイルをアップロードする

+
+

Parameters

+
+
endpointstr

APIのエンドポイント

+
+
access_tokenstr

APIのアクセストークン

+
+
projectstr

プロジェクトのID

+
+
filepathstr

ローカルコンピュータ上のファイルパス

+
+
+
+
+

Returns

+
+
boolean

アップロードの成否

+
+
+
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/plateauutils.flood_converter.html b/plateauutils.flood_converter.html new file mode 100644 index 0000000..b400aa9 --- /dev/null +++ b/plateauutils.flood_converter.html @@ -0,0 +1,238 @@ + + + + + + + + plateauutils.flood_converter パッケージ — plateauutils documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

plateauutils.flood_converter パッケージ

+
+

plateauutils.flood_converter.flood_to_xyz モジュール

+
+
+class plateauutils.flood_converter.flood_to_xyz.FloodToXyz(path: str = '')
+

Bases: NumpyTileParser

+

洪水浸水域をxyzに変換するクラス

+
+

Parameters

+
+
pathstr

npzファイルのベースパス

+
+
+
+
+parse()
+

洪水浸水域をxyzに変換するメソッド

+
+ +
+
+ +
+
+

plateauutils.flood_converter.flood_to_3dtiles モジュール

+
+
+class plateauutils.flood_converter.flood_to_3dtiles.FloodTo3dtiles
+

Bases: object

+

洪水浸水域を3dtilesに変換するクラス

+
+
+convert(path: str = '', output_dir: str = '')
+

洪水浸水域を3dtilesに変換するメソッド

+
+

Parameters

+
+
pathstr

npzファイルのベースパス

+
+
output_dirstr

3dtilesの出力先

+
+
+
+
+ +
+ +
+
+

plateauutils.flood_converter.flood_to_png モジュール

+
+
+class plateauutils.flood_converter.flood_to_png.FloodToPng(path: str = '')
+

Bases: NumpyTileParser

+

洪水浸水域をpngに変換するクラス

+
+

Parameters

+
+
pathstr

npzファイルのベースパス

+
+
+
+
+parse(output_dir: str = '')
+

洪水浸水域をpngに変換するメソッド

+
+

Parameters

+
+
output_dirstr

pngの出力先

+
+
+
+
+ +
+
+ +
+
+class plateauutils.flood_converter.flood_to_png.PngWriter(directory, zoom)
+

Bases: Writer

+
+ +
+
+class plateauutils.flood_converter.flood_to_png.Store(zoom)
+

Bases: object

+

タイルの座標及び標高を保持するクラス

+
+
+add(x, y, classification)
+

タイルの座標及び標高を格納するメソッド

+
+ +
+ +
+
+class plateauutils.flood_converter.flood_to_png.Writer(directory, zoom)
+

Bases: object

+

storeの内容を書き出す基底クラス

+

出力する形式に応じて _write メソッドを実装する

+
+

Parameters

+
+
directorystr

出力先ディレクトリ

+
+
zoomint

ズームレベル

+
+
+
+
+setStore(store)
+

storeをセットするメソッド

+
+ +
+
+write()
+

storeの内容を書き出すメソッド

+
+ +
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/plateauutils.html b/plateauutils.html new file mode 100644 index 0000000..898f739 --- /dev/null +++ b/plateauutils.html @@ -0,0 +1,212 @@ + + + + + + + + plateauutils パッケージ — plateauutils documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

plateauutils パッケージ

+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/plateauutils.mesh_geocorder.html b/plateauutils.mesh_geocorder.html new file mode 100644 index 0000000..0d767e7 --- /dev/null +++ b/plateauutils.mesh_geocorder.html @@ -0,0 +1,209 @@ + + + + + + + + plateauutils.mesh_geocorder パッケージ — plateauutils documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

plateauutils.mesh_geocorder パッケージ

+
+

plateauutils.mesh_geocorder.geo_to_mesh モジュール

+
+
+exception plateauutils.mesh_geocorder.geo_to_mesh.MeshCodeException
+

Bases: Exception

+
+ +
+
+exception plateauutils.mesh_geocorder.geo_to_mesh.MeshException
+

Bases: Exception

+
+ +
+
+plateauutils.mesh_geocorder.geo_to_mesh.meshcode_to_polygon(mesh_code: str) Polygon
+

メッシュコードをポリゴンに変換して返す

+
+

Parameters

+
+
mesh_codestr

メッシュコード

+
+
+
+
+

Returns

+
+
shapely.geometry.Polygon

メッシュコードに対応するポリゴン

+
+
+
+
+ +
+
+plateauutils.mesh_geocorder.geo_to_mesh.point_to_meshcode(point: Point, mesh: str = '2') str
+

緯度経度をメッシュコードに変換して返す

+
+

Parameters

+
+
pointshapely.geometry.Point

緯度経度を示すPointオブジェクト

+
+
meshstr, optional

メッシュの種類, by default “2”

+
+
+
+
+

Returns

+
+
str

メッシュコード

+
+
+
+
+ +
+
+

plateauutils.mesh_geocorder.polygon_to_meshcode_list モジュール

+
+
+class plateauutils.mesh_geocorder.polygon_to_meshcode_list.PolygonToMeshCodeList(polygon, mesh='2')
+

Bases: PolygonToList

+

Polygonからメッシュコードのリストを返すクラス

+
+

Parameters

+
+
polygonshapely.geometry.Polygon

対象となるポリゴン

+
+
meshstr

メッシュコードの粒度

+
+
+
+
+output() list
+

メッシュコードのリストを出力する

+
+

Returns

+
+
list

メッシュコードのリスト

+
+
+
+
+ +
+
+split()
+

対象となるポリゴンを分割してメッシュコードのリストを作成する

+
+ +
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/plateauutils.parser.html b/plateauutils.parser.html new file mode 100644 index 0000000..d642fb2 --- /dev/null +++ b/plateauutils.parser.html @@ -0,0 +1,245 @@ + + + + + + + + plateauutils.parser パッケージ — plateauutils documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

plateauutils.parser パッケージ

+
+

plateauutils.parser.city_gml_parser モジュール

+
+
+class plateauutils.parser.city_gml_parser.CityGMLParser(polygon: Polygon | None = None)
+

Bases: PlateauParser

+

CityGMLファイルをパースするクラス

+
+

Parameters

+
+
polygonshapely.geometry.Polygon

対象となるポリゴン

+
+
+
+
+download_and_parse(url: str = '', target_dir: str = '') list
+

CityGMLファイルをダウンロードして、情報を返すメソッド

+
+

Parameters

+
+
urlstr

CityGMLファイル(zip)のURL

+
+
target_dirstr

ファイルを展開する先のパス

+
+
+
+
+

Returns

+
+
list

パースした情報のリスト、以下の情報を含む

+
    +
  • gid: gml:id

  • +
  • center: 中心座標

  • +
  • min_height: 最小高さ

  • +
  • measured_height: 測定高さ

  • +
  • building_structure_type: 建物構造種別(コード)

  • +
+
+
+
+
+ +
+
+parse(target_path: str = '') list
+

CityGMLファイルをパースして、情報を返すメソッド

+
+

Parameters

+
+
target_pathstr

CityGMLファイル(zip)のパス

+
+
+
+
+

Returns

+
+
list

パースした情報のリスト、以下の情報を含む

+
    +
  • gid: gml:id

  • +
  • center: 中心座標

  • +
  • min_height: 最小高さ

  • +
  • measured_height: 測定高さ

  • +
  • building_structure_type: 建物構造種別(コード)

  • +
+
+
+
+
+ +
+
+ +
+
+class plateauutils.parser.mvt_tile_parser.MvtTileParser(polygon: Polygon | None = None, zoom: int = 15)
+

Bases: PlateauParser

+

MVTタイルをパースするクラス

+
+

Parameters

+
+
polygonshapely.geometry.Polygon

対象となるポリゴン

+
+
zoomint

対象とするズームレベル

+
+
+
+
+download_and_parse(url: str = '', target_dir: str = '') list
+

MVTタイルをダウンロードして、タイルのリストを返すメソッド

+
+

Parameters

+
+
urlstr

MVTタイル(zip)のURL

+
+
target_dirstr

ファイルを展開する先のパス

+
+
+
+
+

Returns

+
+
list

タイルのパスのリスト

+
+
+
+
+ +
+
+parse(target_path: str = '') list
+

MVTタイルをパースして、リストを返すメソッド

+
+

Parameters

+
+
target_pathstr

MVTタイル(zip)のパス

+
+
+
+
+

Returns

+
+
list

タイルのパスのリスト

+
+
+
+
+ +
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/plateauutils.tile_list.html b/plateauutils.tile_list.html new file mode 100644 index 0000000..c6013b0 --- /dev/null +++ b/plateauutils.tile_list.html @@ -0,0 +1,207 @@ + + + + + + + + plateauutils.tile_list パッケージ — plateauutils documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

plateauutils.tile_list パッケージ

+
+

plateauutils.tile_list.geo_to_tile モジュール

+
+
+exception plateauutils.tile_list.geo_to_tile.TileRangeException
+

Bases: Exception

+
+ +
+
+plateauutils.tile_list.geo_to_tile.point_to_tile(point: Point, zoom: int, ext: str = '.mvt') str
+

緯度経度をタイルに変換して返す

+
+

Parameters

+
+
pointshapely.geometry.Point

緯度経度を示すPointオブジェクト

+
+
zoomint

ズームレベル

+
+
extstr, optional

タイルの拡張子, by default “.mvt”

+
+
+
+
+

Returns

+
+
str

タイルのパス

+
+
+
+
+ +
+
+plateauutils.tile_list.geo_to_tile.tile_to_polygon(tile_path: str) Polygon
+

タイルのパスをポリゴンに変換して返す

+
+

Parameters

+
+
tile_pathstr

タイルのパス

+
+
+
+
+

Returns

+
+
shapely.geometry.Polygon

タイルのパスに対応するポリゴン

+
+
+
+
+ +
+
+

plateauutils.tile_list.polygon_to_tile_list モジュール

+
+
+class plateauutils.tile_list.polygon_to_tile_list.PolygonToTileList(polygon: Polygon, zoom: int, ext: str = '.mvt')
+

Bases: PolygonToList

+

Polygonからタイルのリストを返すクラス

+
+

Parameters

+
+
polygonshapely.geometry.Point

対象となるポリゴン

+
+
zoomint

ズームレベル

+
+
extstr, optional

タイルの拡張子, by default “.mvt”

+
+
+
+
+output() list
+

タイルのリストを出力する

+
+

Returns

+
+
list

タイルのリスト

+
+
+
+
+ +
+
+split()
+

対象となるポリゴンを分割してタイルのリストを作成する

+
+ +
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 0000000..cd94f91 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,167 @@ + + + + + + + Python Module Index — plateauutils documentation + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 0000000..182060c --- /dev/null +++ b/search.html @@ -0,0 +1,121 @@ + + + + + + + Search — plateauutils documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..088326a --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["index", "modules", "plateauutils", "plateauutils.citygmlfinder", "plateauutils.flood_converter", "plateauutils.mesh_geocorder", "plateauutils.parser", "plateauutils.tile_list"], "filenames": ["index.rst", "modules.rst", "plateauutils.rst", "plateauutils.citygmlfinder.rst", "plateauutils.flood_converter.rst", "plateauutils.mesh_geocorder.rst", "plateauutils.parser.rst", "plateauutils.tile_list.rst"], "titles": ["Welcome to plateauutils\u2019s documentation!", "plateauutils", "plateauutils \u30d1\u30c3\u30b1\u30fc\u30b8", "plateauutils.citygmlfinder \u30d1\u30c3\u30b1\u30fc\u30b8", "plateauutils.flood_converter \u30d1\u30c3\u30b1\u30fc\u30b8", "plateauutils.mesh_geocorder \u30d1\u30c3\u30b1\u30fc\u30b8", "plateauutils.parser \u30d1\u30c3\u30b1\u30fc\u30b8", "plateauutils.tile_list \u30d1\u30c3\u30b1\u30fc\u30b8"], "terms": {"thi": 0, "i": 0, "collect": 0, "util": 0, "plateau": 0, "project": [0, 3], "sourc": 0, "code": 0, "avail": 0, "github": 0, "python3": 0, "9": 0, "m": 0, "venv": 0, "bin": 0, "activ": 0, "pip": 0, "u": 0, "r": 0, "dev": 0, "requir": 0, "txt": 0, "pytest": 0, "cov": 0, "report": 0, "html": 0, "fail": 0, "under": 0, "90": 0, "citygml": 0, "mvttile": 0, "parser": [0, 1, 2], "from": 0, "shape": [0, 5, 6, 7], "geometri": [0, 5, 6, 7], "import": 0, "point": [0, 5, 7], "mesh_geocord": [0, 1, 2], "geo_to_mesh": [0, 1, 2], "point_to_meshcod": [0, 1, 2, 5], "139": 0, "71475": 0, "35": 0, "70078": 0, "mesh_cod": [0, 5], "2": [0, 5], "1": 0, "533945471": 0, "from_wkt": 0, "city_gml_pars": [0, 1, 2], "citygmlpars": [0, 1, 2, 6], "target_polygon": 0, "polygon": [0, 5, 6, 7], "130": 0, "41249721501615": 0, "33": 0, "224722548534864": 0, "22506264293093": 0, "41621606802997": 0, "result": 0, "download_and_pars": [0, 2, 6], "http": 0, "asset": 0, "cm": 0, "reearth": 0, "io": 0, "d6": 0, "70821e": 0, "7f58": 0, "4f69": 0, "bc34": 0, "341875704e78": 0, "40203_kurum": 0, "shi_2020_citygml_3_op": 0, "zip": [0, 6], "tmp": 0, "gid": [0, 6], "bldg_383f1804": 0, "aa34": 0, "4634": 0, "949f": 0, "f769e09fa92d": 0, "center": [0, 6], "41263587199947": 0, "22489181671553": 0, "min_height": [0, 6], "3": 0, "805999994277954": 0, "measured_height": [0, 6], "building_structure_typ": [0, 6], "\u975e\u6728\u9020": 0, "bldg_877dea60": 0, "35d0": 0, "4fd9": 0, "8b02": 0, "852e39c75d81": 0, "41619367090038": 0, "22492719812357": 0, "4": 0, "454999923706055": 0, "0": 0, "mvt_tile_pars": [0, 6], "mvttilepars": [0, 1, 2, 6], "525689": 0, "323966": 0, "522728": 0, "314069": 0, "511441": 0, "308653": 0, "501013": 0, "30937": 0, "492516": 0, "318516": 0, "493717": 0, "325831": 0, "504618": 0, "332249": 0, "512857": 0, "332213": 0, "43": 0, "53a0e1": 0, "cc14": 0, "4228": 0, "a5ef": 0, "19333a23596d": 0, "shi_2020_3dtil": 0, "mvt_3_op": 0, "luse": 0, "15": [0, 6], "28254": 0, "13174": 0, "mvt": [0, 7], "flood": 0, "convert": [0, 2, 4], "flood_convert": [0, 1, 2], "flood_to_3dtil": [0, 1, 2], "floodto3dtil": [0, 1, 2, 4], "f": 0, "floodmap_depth": 0, "depth_3dtil": 0, "flood_to_png": [0, 1, 2], "floodtopng": [0, 1, 2, 4], "p": 0, "pars": [0, 2, 4, 6], "depth_png": 0, "\u30d1\u30c3\u30b1\u30fc\u30b8": [0, 1], "\u30e2\u30b8\u30e5\u30fc\u30eb": [1, 2], "meshcodeexcept": [1, 2, 5], "meshexcept": [1, 2, 5], "meshcode_to_polygon": [1, 2, 5], "polygon_to_meshcode_list": [1, 2], "polygontomeshcodelist": [1, 2, 5], "tile_list": [1, 2], "geo_to_til": [1, 2], "tilerangeexcept": [1, 2, 7], "point_to_til": [1, 2, 7], "tile_to_polygon": [1, 2, 7], "polygon_to_tile_list": [1, 2], "polygontotilelist": [1, 2, 7], "citygmlfind": [1, 2], "from_reearth_cm": [1, 2], "noargsexcept": [1, 2, 3], "notfoundexcept": [1, 2, 3], "private_queri": [1, 2, 3], "public_queri": [1, 2, 3], "upload_to_reearth": [1, 2, 3], "flood_to_xyz": [1, 2], "floodtoxyz": [1, 2, 4], "pngwriter": [1, 2, 4], "store": [1, 2, 4], "writer": [1, 2, 4], "output": [2, 5, 7], "split": [2, 5, 7], "add": [2, 4], "setstor": [2, 4], "write": [2, 4], "except": [3, 5, 7], "base": [3, 4, 5, 6, 7], "endpoint": 3, "str": [3, 4, 5, 6, 7], "none": [3, 6], "access_token": 3, "model": 3, "prefectur": 3, "city_nam": 3, "re": 3, "earth\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8api\u3092\u5229\u7528\u3057\u3066\u90fd\u9053\u5e9c\u770c": 3, "\u5e02\u753a\u6751\u540d\u304b\u3089citygml\u3092\u53d6\u5f97\u3059\u308b": 3, "api\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8": 3, "api\u306e\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3": 3, "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eid\u3082\u3057\u304f\u306f\u30a8\u30a4\u30ea\u30a2\u30b9": 3, "\u30e2\u30c7\u30eb\u306eid\u3082\u3057\u304f\u306f\u30a8\u30a4\u30ea\u30a2\u30b9": 3, "\u90fd\u9053\u5e9c\u770c": 3, "\u5e02\u753a\u6751": 3, "citygml\u306e\u30d1\u30b9": 3, "earth\u306e\u30d1\u30d6\u30ea\u30c3\u30afapi\u3092\u5229\u7528\u3057\u3066\u90fd\u9053\u5e9c\u770c": 3, "filepath": 3, "earth\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8api\u3092\u5229\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b": 3, "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eid": 3, "\u30ed\u30fc\u30ab\u30eb\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9": 3, "boolean": 3, "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u6210\u5426": 3, "class": [4, 5, 6, 7], "path": 4, "numpytilepars": 4, "\u6d2a\u6c34\u6d78\u6c34\u57df\u3092xyz\u306b\u5909\u63db\u3059\u308b\u30af\u30e9\u30b9": 4, "npz\u30d5\u30a1\u30a4\u30eb\u306e\u30d9\u30fc\u30b9\u30d1\u30b9": 4, "\u6d2a\u6c34\u6d78\u6c34\u57df\u3092xyz\u306b\u5909\u63db\u3059\u308b\u30e1\u30bd\u30c3\u30c9": 4, "object": 4, "\u6d2a\u6c34\u6d78\u6c34\u57df\u30923dtiles\u306b\u5909\u63db\u3059\u308b\u30af\u30e9\u30b9": 4, "output_dir": 4, "\u6d2a\u6c34\u6d78\u6c34\u57df\u30923dtiles\u306b\u5909\u63db\u3059\u308b\u30e1\u30bd\u30c3\u30c9": 4, "3dtiles\u306e\u51fa\u529b\u5148": 4, "\u6d2a\u6c34\u6d78\u6c34\u57df\u3092png\u306b\u5909\u63db\u3059\u308b\u30af\u30e9\u30b9": 4, "\u6d2a\u6c34\u6d78\u6c34\u57df\u3092png\u306b\u5909\u63db\u3059\u308b\u30e1\u30bd\u30c3\u30c9": 4, "png\u306e\u51fa\u529b\u5148": 4, "directori": 4, "zoom": [4, 6, 7], "\u30bf\u30a4\u30eb\u306e\u5ea7\u6a19\u53ca\u3073\u6a19\u9ad8\u3092\u4fdd\u6301\u3059\u308b\u30af\u30e9\u30b9": 4, "x": 4, "y": 4, "classif": 4, "\u30bf\u30a4\u30eb\u306e\u5ea7\u6a19\u53ca\u3073\u6a19\u9ad8\u3092\u683c\u7d0d\u3059\u308b\u30e1\u30bd\u30c3\u30c9": 4, "store\u306e\u5185\u5bb9\u3092\u66f8\u304d\u51fa\u3059\u57fa\u5e95\u30af\u30e9\u30b9": 4, "\u51fa\u529b\u3059\u308b\u5f62\u5f0f\u306b\u5fdc\u3058\u3066": 4, "_write": 4, "\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u88c5\u3059\u308b": 4, "\u51fa\u529b\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": 4, "int": [4, 6, 7], "\u30ba\u30fc\u30e0\u30ec\u30d9\u30eb": [4, 7], "store\u3092\u30bb\u30c3\u30c8\u3059\u308b\u30e1\u30bd\u30c3\u30c9": 4, "store\u306e\u5185\u5bb9\u3092\u66f8\u304d\u51fa\u3059\u30e1\u30bd\u30c3\u30c9": 4, "\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u3092\u30dd\u30ea\u30b4\u30f3\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059": 5, "\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9": 5, "\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306b\u5bfe\u5fdc\u3059\u308b\u30dd\u30ea\u30b4\u30f3": 5, "mesh": 5, "\u7def\u5ea6\u7d4c\u5ea6\u3092\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059": 5, "\u7def\u5ea6\u7d4c\u5ea6\u3092\u793a\u3059point\u30aa\u30d6\u30b8\u30a7\u30af\u30c8": [5, 7], "option": [5, 7], "\u30e1\u30c3\u30b7\u30e5\u306e\u7a2e\u985e": 5, "default": [5, 7], "polygontolist": [5, 7], "polygon\u304b\u3089\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\u30af\u30e9\u30b9": 5, "\u5bfe\u8c61\u3068\u306a\u308b\u30dd\u30ea\u30b4\u30f3": [5, 6, 7], "\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306e\u7c92\u5ea6": 5, "list": [5, 6, 7], "\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306e\u30ea\u30b9\u30c8\u3092\u51fa\u529b\u3059\u308b": 5, "\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306e\u30ea\u30b9\u30c8": 5, "\u5bfe\u8c61\u3068\u306a\u308b\u30dd\u30ea\u30b4\u30f3\u3092\u5206\u5272\u3057\u3066\u30e1\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306e\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u3059\u308b": 5, "plateaupars": 6, "citygml\u30d5\u30a1\u30a4\u30eb\u3092\u30d1\u30fc\u30b9\u3059\u308b\u30af\u30e9\u30b9": 6, "url": 6, "target_dir": 6, "citygml\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066": 6, "\u60c5\u5831\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9": 6, "citygml\u30d5\u30a1\u30a4\u30eb": 6, "\u306eurl": 6, "\u30d5\u30a1\u30a4\u30eb\u3092\u5c55\u958b\u3059\u308b\u5148\u306e\u30d1\u30b9": 6, "\u30d1\u30fc\u30b9\u3057\u305f\u60c5\u5831\u306e\u30ea\u30b9\u30c8": 6, "\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u542b\u3080": 6, "gml": 6, "id": 6, "\u4e2d\u5fc3\u5ea7\u6a19": 6, "\u6700\u5c0f\u9ad8\u3055": 6, "\u6e2c\u5b9a\u9ad8\u3055": 6, "\u5efa\u7269\u69cb\u9020\u7a2e\u5225": 6, "\u30b3\u30fc\u30c9": 6, "target_path": 6, "citygml\u30d5\u30a1\u30a4\u30eb\u3092\u30d1\u30fc\u30b9\u3057\u3066": 6, "\u306e\u30d1\u30b9": 6, "mvt\u30bf\u30a4\u30eb\u3092\u30d1\u30fc\u30b9\u3059\u308b\u30af\u30e9\u30b9": 6, "\u5bfe\u8c61\u3068\u3059\u308b\u30ba\u30fc\u30e0\u30ec\u30d9\u30eb": 6, "mvt\u30bf\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066": 6, "\u30bf\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9": 6, "mvt\u30bf\u30a4\u30eb": 6, "\u30bf\u30a4\u30eb\u306e\u30d1\u30b9\u306e\u30ea\u30b9\u30c8": 6, "mvt\u30bf\u30a4\u30eb\u3092\u30d1\u30fc\u30b9\u3057\u3066": 6, "\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9": 6, "ext": 7, "\u7def\u5ea6\u7d4c\u5ea6\u3092\u30bf\u30a4\u30eb\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059": 7, "\u30bf\u30a4\u30eb\u306e\u62e1\u5f35\u5b50": 7, "\u30bf\u30a4\u30eb\u306e\u30d1\u30b9": 7, "tile_path": 7, "\u30bf\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u30dd\u30ea\u30b4\u30f3\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059": 7, "\u30bf\u30a4\u30eb\u306e\u30d1\u30b9\u306b\u5bfe\u5fdc\u3059\u308b\u30dd\u30ea\u30b4\u30f3": 7, "polygon\u304b\u3089\u30bf\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\u30af\u30e9\u30b9": 7, "\u30bf\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u3092\u51fa\u529b\u3059\u308b": 7, "\u30bf\u30a4\u30eb\u306e\u30ea\u30b9\u30c8": 7, "\u5bfe\u8c61\u3068\u306a\u308b\u30dd\u30ea\u30b4\u30f3\u3092\u5206\u5272\u3057\u3066\u30bf\u30a4\u30eb\u306e\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u3059\u308b": 7}, "objects": {"plateauutils.citygmlfinder": [[3, 0, 0, "-", "from_reearth_cms"]], "plateauutils.citygmlfinder.from_reearth_cms": [[3, 1, 1, "", "NoArgsException"], [3, 1, 1, "", "NotFoundException"], [3, 2, 1, "", "private_query"], [3, 2, 1, "", "public_query"], [3, 2, 1, "", "upload_to_reearth"]], "plateauutils.flood_converter": [[4, 0, 0, "-", "flood_to_3dtiles"], [4, 0, 0, "-", "flood_to_png"], [4, 0, 0, "-", "flood_to_xyz"]], "plateauutils.flood_converter.flood_to_3dtiles": [[4, 3, 1, "", "FloodTo3dtiles"]], "plateauutils.flood_converter.flood_to_3dtiles.FloodTo3dtiles": [[4, 4, 1, "", "convert"]], "plateauutils.flood_converter.flood_to_png": [[4, 3, 1, "", "FloodToPng"], [4, 3, 1, "", "PngWriter"], [4, 3, 1, "", "Store"], [4, 3, 1, "", "Writer"]], "plateauutils.flood_converter.flood_to_png.FloodToPng": [[4, 4, 1, "", "parse"]], "plateauutils.flood_converter.flood_to_png.Store": [[4, 4, 1, "", "add"]], "plateauutils.flood_converter.flood_to_png.Writer": [[4, 4, 1, "", "setStore"], [4, 4, 1, "", "write"]], "plateauutils.flood_converter.flood_to_xyz": [[4, 3, 1, "", "FloodToXyz"]], "plateauutils.flood_converter.flood_to_xyz.FloodToXyz": [[4, 4, 1, "", "parse"]], "plateauutils.mesh_geocorder": [[5, 0, 0, "-", "geo_to_mesh"], [5, 0, 0, "-", "polygon_to_meshcode_list"]], "plateauutils.mesh_geocorder.geo_to_mesh": [[5, 1, 1, "", "MeshCodeException"], [5, 1, 1, "", "MeshException"], [5, 2, 1, "", "meshcode_to_polygon"], [5, 2, 1, "", "point_to_meshcode"]], "plateauutils.mesh_geocorder.polygon_to_meshcode_list": [[5, 3, 1, "", "PolygonToMeshCodeList"]], "plateauutils.mesh_geocorder.polygon_to_meshcode_list.PolygonToMeshCodeList": [[5, 4, 1, "", "output"], [5, 4, 1, "", "split"]], "plateauutils.parser": [[6, 0, 0, "-", "city_gml_parser"], [6, 0, 0, "-", "mvt_tile_parser"]], "plateauutils.parser.city_gml_parser": [[6, 3, 1, "", "CityGMLParser"]], "plateauutils.parser.city_gml_parser.CityGMLParser": [[6, 4, 1, "", "download_and_parse"], [6, 4, 1, "", "parse"]], "plateauutils.parser.mvt_tile_parser": [[6, 3, 1, "", "MvtTileParser"]], "plateauutils.parser.mvt_tile_parser.MvtTileParser": [[6, 4, 1, "", "download_and_parse"], [6, 4, 1, "", "parse"]], "plateauutils.tile_list": [[7, 0, 0, "-", "geo_to_tile"], [7, 0, 0, "-", "polygon_to_tile_list"]], "plateauutils.tile_list.geo_to_tile": [[7, 1, 1, "", "TileRangeException"], [7, 2, 1, "", "point_to_tile"], [7, 2, 1, "", "tile_to_polygon"]], "plateauutils.tile_list.polygon_to_tile_list": [[7, 3, 1, "", "PolygonToTileList"]], "plateauutils.tile_list.polygon_to_tile_list.PolygonToTileList": [[7, 4, 1, "", "output"], [7, 4, 1, "", "split"]]}, "objtypes": {"0": "py:module", "1": "py:exception", "2": "py:function", "3": "py:class", "4": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "exception", "Python exception"], "2": ["py", "function", "Python function"], "3": ["py", "class", "Python class"], "4": ["py", "method", "Python method"]}, "titleterms": {"welcom": 0, "plateauutil": [0, 1, 2, 3, 4, 5, 6, 7], "": 0, "document": 0, "how": 0, "develop": 0, "instal": 0, "usag": 0, "content": 0, "\u30d1\u30c3\u30b1\u30fc\u30b8": [2, 3, 4, 5, 6, 7], "citygmlfind": 3, "from_reearth_cm": 3, "\u30e2\u30b8\u30e5\u30fc\u30eb": [3, 4, 5, 6, 7], "paramet": [3, 4, 5, 6, 7], "return": [3, 5, 6, 7], "flood_convert": 4, "flood_to_xyz": 4, "flood_to_3dtil": 4, "flood_to_png": 4, "mesh_geocord": 5, "geo_to_mesh": 5, "polygon_to_meshcode_list": 5, "parser": 6, "city_gml_pars": 6, "tile_list": 7, "geo_to_til": 7, "polygon_to_tile_list": 7}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to plateauutils\u2019s documentation!": [[0, "welcome-to-plateauutils-s-documentation"]], "How to develop": [[0, "how-to-develop"]], "How to install": [[0, "how-to-install"]], "Usage": [[0, "usage"]], "Contents:": [[0, null]], "plateauutils": [[1, "plateauutils"]], "plateauutils \u30d1\u30c3\u30b1\u30fc\u30b8": [[2, "plateauutils"]], "plateauutils.citygmlfinder \u30d1\u30c3\u30b1\u30fc\u30b8": [[3, "plateauutils-citygmlfinder"]], "plateauutils.citygmlfinder.from_reearth_cms \u30e2\u30b8\u30e5\u30fc\u30eb": [[3, "module-plateauutils.citygmlfinder.from_reearth_cms"]], "Parameters": [[3, "parameters"], [3, "id1"], [3, "id3"], [4, "parameters"], [4, "id1"], [4, "id2"], [4, "id3"], [4, "id4"], [5, "parameters"], [5, "id1"], [5, "id3"], [6, "parameters"], [6, "id1"], [6, "id2"], [6, "id4"], [6, "id5"], [6, "id7"], [7, "parameters"], [7, "id1"], [7, "id3"]], "Returns": [[3, "returns"], [3, "id2"], [3, "id4"], [5, "returns"], [5, "id2"], [5, "id4"], [6, "returns"], [6, "id3"], [6, "id6"], [6, "id8"], [7, "returns"], [7, "id2"], [7, "id4"]], "plateauutils.flood_converter \u30d1\u30c3\u30b1\u30fc\u30b8": [[4, "plateauutils-flood-converter"]], "plateauutils.flood_converter.flood_to_xyz \u30e2\u30b8\u30e5\u30fc\u30eb": [[4, "module-plateauutils.flood_converter.flood_to_xyz"]], "plateauutils.flood_converter.flood_to_3dtiles \u30e2\u30b8\u30e5\u30fc\u30eb": [[4, "module-plateauutils.flood_converter.flood_to_3dtiles"]], "plateauutils.flood_converter.flood_to_png \u30e2\u30b8\u30e5\u30fc\u30eb": [[4, "module-plateauutils.flood_converter.flood_to_png"]], "plateauutils.mesh_geocorder \u30d1\u30c3\u30b1\u30fc\u30b8": [[5, "plateauutils-mesh-geocorder"]], "plateauutils.mesh_geocorder.geo_to_mesh \u30e2\u30b8\u30e5\u30fc\u30eb": [[5, "module-plateauutils.mesh_geocorder.geo_to_mesh"]], "plateauutils.mesh_geocorder.polygon_to_meshcode_list \u30e2\u30b8\u30e5\u30fc\u30eb": [[5, "module-plateauutils.mesh_geocorder.polygon_to_meshcode_list"]], "plateauutils.parser \u30d1\u30c3\u30b1\u30fc\u30b8": [[6, "plateauutils-parser"]], "plateauutils.parser.city_gml_parser \u30e2\u30b8\u30e5\u30fc\u30eb": [[6, "module-plateauutils.parser.city_gml_parser"]], "plateauutils.tile_list \u30d1\u30c3\u30b1\u30fc\u30b8": [[7, "plateauutils-tile-list"]], "plateauutils.tile_list.geo_to_tile \u30e2\u30b8\u30e5\u30fc\u30eb": [[7, "module-plateauutils.tile_list.geo_to_tile"]], "plateauutils.tile_list.polygon_to_tile_list \u30e2\u30b8\u30e5\u30fc\u30eb": [[7, "module-plateauutils.tile_list.polygon_to_tile_list"]]}, "indexentries": {"noargsexception": [[3, "plateauutils.citygmlfinder.from_reearth_cms.NoArgsException"]], "notfoundexception": [[3, "plateauutils.citygmlfinder.from_reearth_cms.NotFoundException"]], "module": [[3, "module-plateauutils.citygmlfinder.from_reearth_cms"], [4, "module-plateauutils.flood_converter.flood_to_3dtiles"], [4, "module-plateauutils.flood_converter.flood_to_png"], [4, "module-plateauutils.flood_converter.flood_to_xyz"], [5, "module-plateauutils.mesh_geocorder.geo_to_mesh"], [5, "module-plateauutils.mesh_geocorder.polygon_to_meshcode_list"], [6, "module-plateauutils.parser.city_gml_parser"], [6, "module-plateauutils.parser.mvt_tile_parser"], [7, "module-plateauutils.tile_list.geo_to_tile"], [7, "module-plateauutils.tile_list.polygon_to_tile_list"]], "plateauutils.citygmlfinder.from_reearth_cms": [[3, "module-plateauutils.citygmlfinder.from_reearth_cms"]], "private_query() (in module plateauutils.citygmlfinder.from_reearth_cms)": [[3, "plateauutils.citygmlfinder.from_reearth_cms.private_query"]], "public_query() (in module plateauutils.citygmlfinder.from_reearth_cms)": [[3, "plateauutils.citygmlfinder.from_reearth_cms.public_query"]], "upload_to_reearth() (in module plateauutils.citygmlfinder.from_reearth_cms)": [[3, "plateauutils.citygmlfinder.from_reearth_cms.upload_to_reearth"]], "floodto3dtiles (class in plateauutils.flood_converter.flood_to_3dtiles)": [[4, "plateauutils.flood_converter.flood_to_3dtiles.FloodTo3dtiles"]], "floodtopng (class in plateauutils.flood_converter.flood_to_png)": [[4, "plateauutils.flood_converter.flood_to_png.FloodToPng"]], "floodtoxyz (class in plateauutils.flood_converter.flood_to_xyz)": [[4, "plateauutils.flood_converter.flood_to_xyz.FloodToXyz"]], "pngwriter (class in plateauutils.flood_converter.flood_to_png)": [[4, "plateauutils.flood_converter.flood_to_png.PngWriter"]], "store (class in plateauutils.flood_converter.flood_to_png)": [[4, "plateauutils.flood_converter.flood_to_png.Store"]], "writer (class in plateauutils.flood_converter.flood_to_png)": [[4, "plateauutils.flood_converter.flood_to_png.Writer"]], "add() (plateauutils.flood_converter.flood_to_png.store method)": [[4, "plateauutils.flood_converter.flood_to_png.Store.add"]], "convert() (plateauutils.flood_converter.flood_to_3dtiles.floodto3dtiles method)": [[4, "plateauutils.flood_converter.flood_to_3dtiles.FloodTo3dtiles.convert"]], "parse() (plateauutils.flood_converter.flood_to_png.floodtopng method)": [[4, "plateauutils.flood_converter.flood_to_png.FloodToPng.parse"]], "parse() (plateauutils.flood_converter.flood_to_xyz.floodtoxyz method)": [[4, "plateauutils.flood_converter.flood_to_xyz.FloodToXyz.parse"]], "plateauutils.flood_converter.flood_to_3dtiles": [[4, "module-plateauutils.flood_converter.flood_to_3dtiles"]], "plateauutils.flood_converter.flood_to_png": [[4, "module-plateauutils.flood_converter.flood_to_png"]], "plateauutils.flood_converter.flood_to_xyz": [[4, "module-plateauutils.flood_converter.flood_to_xyz"]], "setstore() (plateauutils.flood_converter.flood_to_png.writer method)": [[4, "plateauutils.flood_converter.flood_to_png.Writer.setStore"]], "write() (plateauutils.flood_converter.flood_to_png.writer method)": [[4, "plateauutils.flood_converter.flood_to_png.Writer.write"]], "meshcodeexception": [[5, "plateauutils.mesh_geocorder.geo_to_mesh.MeshCodeException"]], "meshexception": [[5, "plateauutils.mesh_geocorder.geo_to_mesh.MeshException"]], "polygontomeshcodelist (class in plateauutils.mesh_geocorder.polygon_to_meshcode_list)": [[5, "plateauutils.mesh_geocorder.polygon_to_meshcode_list.PolygonToMeshCodeList"]], "meshcode_to_polygon() (in module plateauutils.mesh_geocorder.geo_to_mesh)": [[5, "plateauutils.mesh_geocorder.geo_to_mesh.meshcode_to_polygon"]], "output() (plateauutils.mesh_geocorder.polygon_to_meshcode_list.polygontomeshcodelist method)": [[5, "plateauutils.mesh_geocorder.polygon_to_meshcode_list.PolygonToMeshCodeList.output"]], "plateauutils.mesh_geocorder.geo_to_mesh": [[5, "module-plateauutils.mesh_geocorder.geo_to_mesh"]], "plateauutils.mesh_geocorder.polygon_to_meshcode_list": [[5, "module-plateauutils.mesh_geocorder.polygon_to_meshcode_list"]], "point_to_meshcode() (in module plateauutils.mesh_geocorder.geo_to_mesh)": [[5, "plateauutils.mesh_geocorder.geo_to_mesh.point_to_meshcode"]], "split() (plateauutils.mesh_geocorder.polygon_to_meshcode_list.polygontomeshcodelist method)": [[5, "plateauutils.mesh_geocorder.polygon_to_meshcode_list.PolygonToMeshCodeList.split"]], "citygmlparser (class in plateauutils.parser.city_gml_parser)": [[6, "plateauutils.parser.city_gml_parser.CityGMLParser"]], "mvttileparser (class in plateauutils.parser.mvt_tile_parser)": [[6, "plateauutils.parser.mvt_tile_parser.MvtTileParser"]], "download_and_parse() (plateauutils.parser.city_gml_parser.citygmlparser method)": [[6, "plateauutils.parser.city_gml_parser.CityGMLParser.download_and_parse"]], "download_and_parse() (plateauutils.parser.mvt_tile_parser.mvttileparser method)": [[6, "plateauutils.parser.mvt_tile_parser.MvtTileParser.download_and_parse"]], "parse() (plateauutils.parser.city_gml_parser.citygmlparser method)": [[6, "plateauutils.parser.city_gml_parser.CityGMLParser.parse"]], "parse() (plateauutils.parser.mvt_tile_parser.mvttileparser method)": [[6, "plateauutils.parser.mvt_tile_parser.MvtTileParser.parse"]], "plateauutils.parser.city_gml_parser": [[6, "module-plateauutils.parser.city_gml_parser"]], "plateauutils.parser.mvt_tile_parser": [[6, "module-plateauutils.parser.mvt_tile_parser"]], "polygontotilelist (class in plateauutils.tile_list.polygon_to_tile_list)": [[7, "plateauutils.tile_list.polygon_to_tile_list.PolygonToTileList"]], "tilerangeexception": [[7, "plateauutils.tile_list.geo_to_tile.TileRangeException"]], "output() (plateauutils.tile_list.polygon_to_tile_list.polygontotilelist method)": [[7, "plateauutils.tile_list.polygon_to_tile_list.PolygonToTileList.output"]], "plateauutils.tile_list.geo_to_tile": [[7, "module-plateauutils.tile_list.geo_to_tile"]], "plateauutils.tile_list.polygon_to_tile_list": [[7, "module-plateauutils.tile_list.polygon_to_tile_list"]], "point_to_tile() (in module plateauutils.tile_list.geo_to_tile)": [[7, "plateauutils.tile_list.geo_to_tile.point_to_tile"]], "split() (plateauutils.tile_list.polygon_to_tile_list.polygontotilelist method)": [[7, "plateauutils.tile_list.polygon_to_tile_list.PolygonToTileList.split"]], "tile_to_polygon() (in module plateauutils.tile_list.geo_to_tile)": [[7, "plateauutils.tile_list.geo_to_tile.tile_to_polygon"]]}}) \ No newline at end of file