Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixes #4 create cli interface for meshcode_to_polygon #8

Merged
merged 1 commit into from
Jun 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions plateauutils/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
from shapely.geometry import Point
from plateauutils.mesh_geocorder.geo_to_mesh import (
point_to_meshcode as _point_to_meshcode,
meshcode_to_polygon as _meshcode_to_polygon,
MeshException,
MeshCodeException,
)


Expand Down Expand Up @@ -37,6 +39,17 @@ def point_to_meshcode(longitude, latitude, mesh):
click.echo("Error: {}".format(e))


@mesh_geocorder.command()
@click.argument("meshcode", required=True, type=str)
def meshcode_to_polygon(meshcode):
"""Convert a meshcode to a polygon"""
try:
polygon = _meshcode_to_polygon(meshcode)
click.echo(polygon.wkt)
except MeshCodeException as e:
click.echo("Error: {}".format(e))


def main():
cli()

Expand Down
2 changes: 2 additions & 0 deletions plateauutils/mesh_geocorder/geo_to_mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ def meshcode_to_polygon(mesh_code: str) -> Polygon:
raise MeshCodeException("Mesh code must be 4 or more digits")
if len(mesh_code) > 10:
raise MeshCodeException("Mesh code must be 10 or less digits")
if len(mesh_code) not in [4, 6, 8, 9, 10]:
raise MeshCodeException("Mesh code must be 4, 6, 8, 9 or 10 digits")

left_x = 0
right_x = 0
Expand Down
4 changes: 4 additions & 0 deletions plateauutils/mesh_geocorder/tests/test_geo_to_mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ def test_invalid_mesh_code_to_polygon():
meshcode_to_polygon("5339454715")
assert str(e.value) == "4th mesh must be 1 to 4"

with pytest.raises(MeshCodeException) as e:
meshcode_to_polygon("55394")
assert str(e.value) == "Mesh code must be 4, 6, 8, 9 or 10 digits"


def test_meshcode_to_polygon():
"""メッシュコードからポリゴンを生成するテスト"""
Expand Down
19 changes: 18 additions & 1 deletion plateauutils/tests/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from click.testing import CliRunner
from plateauutils.cli import point_to_meshcode
from plateauutils.cli import point_to_meshcode, meshcode_to_polygon


def test_point_to_meshcode():
Expand All @@ -14,3 +14,20 @@ def test_invalid_point_to_meshcode():
result = runner.invoke(point_to_meshcode, ["139.71475", "35.70078", "5/1"])
assert result.exit_code == 0
assert result.output == "Error: Mesh must be one of 1, 2, 2/1, 3, 4/1\n"


def test_meshcode_to_polygon():
runner = CliRunner()
result = runner.invoke(meshcode_to_polygon, ["533945"])
assert result.exit_code == 0
assert (
result.output
== "POLYGON ((139.625 35.66666666666667, 139.75 35.66666666666667, 139.75 35.75000000000001, 139.625 35.75000000000001, 139.625 35.66666666666667))\n"
)


def test_invalid_meshcode_to_polygon():
runner = CliRunner()
result = runner.invoke(meshcode_to_polygon, ["53394547141"])
assert result.exit_code == 0
assert result.output == "Error: Mesh code must be 10 or less digits\n"