From b8ca3c52ae9ecf84acafc6fb1d5649949bb904a4 Mon Sep 17 00:00:00 2001 From: smellman Date: Mon, 18 Dec 2023 20:16:20 +0000 Subject: [PATCH] deploy: 32fc1b0ff88479a641207f89b53a70cdaa2b6c42 --- .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..b4755a3ab0ea83a255b25957545ad437b3f1e8f5 GIT binary patch literal 314143 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 literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd36e8ebc46cc6f852c157c41f53818b66850129 GIT binary patch literal 10816 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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..7195d750d8e25096fcd62e905369c25e615546aa GIT binary patch literal 43243 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 literal 0 HcmV?d00001 diff --git a/.doctrees/plateauutils.mesh_geocorder.doctree b/.doctrees/plateauutils.mesh_geocorder.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0f03ed1bef26ac68fd633230265e1702b61cdb23 GIT binary patch literal 29587 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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..8f938c5 --- /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..450d808 --- /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\u5c5e\u6027\u3092\u4fdd\u6301\u3059\u308b\u30af\u30e9\u30b9": 4, "x": 4, "y": 4, "classif": 4, "\u30bf\u30a4\u30eb\u306e\u5ea7\u6a19\u53ca\u3073\u5c5e\u6027\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