Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 0f7b652
Author: satoshi komatsu <[email protected]>
Date:   Thu May 30 17:33:09 2024 +0900

    minecraft-sinkの実装 (#528)

    <!-- Close or Related Issues -->
     minecraft-sinkを実装しました。以下の理由によりイシューは閉じません。
    -  出力時に複数のLODがでてしまう不具合があり。(#532)
    - コマンド引数のオプションの未実装。
    - テスト未実装
    <!-- Please describe the motivation behind this PR and the changes it
    introduces. -->
    <!-- 何のために、どのような変更をしますか? -->

    - `.mca`ファイルを出力するsinkを実装
    - 出力時は`region`フォルダが作成され、その中に複数の`.mca`を生成
    -
    変換時の座標系は`ExtendedTransverseMercatorProjection`で横メルカトル座標系に変換し、citygmlの全体の中心がマインクラフトのワールドの中心に来るように設定
    -
    ブロックの高さはcitygmlのそのままの高さにしているため、標高が高すぎる建物等は現状変換しても表示されない(マイクラのブロックの設置可能高さは
    `-64` ~ `319`)
    - ブロックの種類は地物型の種類によって分けるように実装。また、ボクセライザー側でRGBのカラー情報を受け取るように修正。

    | 地物型 | ブロック | RGB |

    |--------------------------------------|---------------------------------------|-----------------|
    | bldg:Building | minecraft:iron_block | 220, 220, 220 |
    | tran:Road | minecraft:gray_wool | 62, 68, 71 |
    | tran:Railway | minecraft:granite | 149, 103, 85 |
    | tran:Track | minecraft:stone_bricks | 122, 121, 122 |
    | tran:Square | minecraft:smooth_stone | 158, 158, 158 |
    | uro:Waterway | minecraft:cyan_stained_glass | 75, 127, 153 |
    | luse:LandUse | minecraft:coarse_dirt | 119, 85, 59 |
    | frn:CityFurniture | minecraft:quartz_block | 235, 229, 222 |
    | veg:PlantCover | minecraft:moss_block | 89, 109, 45 |
    | veg:SolitaryVegetationObject | minecraft:oak_leaves | 0, 255, 0 |
    | wtr:WaterBody | minecraft:water | 0, 0, 255 |
    | dem:ReliefFeature | minecraft:stone | 125, 125, 125 |
    | brid:Bridge | minecraft:polished_andesite | 132, 134, 133 |
    | tun:Tunnel | minecraft:cobblestone | 127, 127, 127 |
    | urf:UseDistrict | minecraft:green_stained_glass | 102, 127, 50 |
    | urf:FirePreventionDistrict | minecraft:red_stained_glass | 53, 50, 50
    |
    | urf:SedimentDisasterProneArea | minecraft:yellow_stained_glass | 229,
    229, 50 |
    | urf:Zone | minecraft:magenta_stained_glass | 178, 75, 215 |
    | その他未定義の地物型 | minecraft:white_wool | 255, 255, 255 |
    <!-- If manual testing is required, please describe the procedure. -->
    <!-- 手動での動作確認が必要なら、そのやり方を記述してください。-->

    下記のコマンドで出力されます
    ```
    <input_path_gml> --sink minecraft --output <output_path>
    ```

    `region`フォルダが出力されるので、これをマインクラフトの既存のワールドデータにある`region`ディレクトリと置き換えてワールドに入れば確認できます。(<output_path>の部分を直接マインクラフトのワールドデータのディレクトリに指定しても良い)

    建築物
    bldg:Building
    minecraft:iron_block
    ![2024-05-26_21 22
    37](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/d492cdac-516b-41a8-94bd-c8b08906c563)

    道路
    tran:Road
    minecraft:gray_wool
    ![2024-05-26_21 42
    48](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/deb78cd6-d309-4bc4-aa9d-49dbf56acaa1)

    鉄道
    tran:Railway
    minecraft:granite

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/2c080d31-e59b-419c-bc37-6f93a12d859f)

    歩道
    tran:Track
    minecraft:stone_bricks
    ![2024-05-26_21 44
    21](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/8273b23c-b294-4354-bec8-4ba36e8520e1)

    広場
    tran:Square
    minecraft:smooth_stone

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/70fdfad9-b7a3-4005-8e5d-c255c89cccfc)

    航路
    uro:Waterway
    minecraft:cyan_stained_glass

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/bb3079ae-38a4-48d4-aa42-e1ba6c204505)

    土地利用
    luse:LandUse
    minecraft:coarse_dirt

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/4bb4a87f-473d-4551-86a2-90160c7c5e9e)

    用途地域
    urf:UseDistrict
    green_stained_glass

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/48f2639e-d2d9-4f84-bb09-84858e02f53f)

    防火地域又は準防火地域
    urf:FirePreventionDistrict
    green_stained_glass

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/46374d5a-9eec-409f-976c-8af6cb5e06d0)

    土砂災害警戒区域
    minecraft:yellow_stained_glass
    urf:SedimentDisasterProneArea

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/6025b013-1650-43d6-a94b-5bfc37c910b8)

    都市設備
    frn:CityFurniture
    minecraft:quartz_block

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/1f518c3d-99e2-45a4-85a2-a9601d23938c)

    植被
    veg:PlantCover
    minecraft:moss_block

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/0be6c713-99f7-4e33-bf66-136ced416473)

    単独木
    veg:SolitaryVegetationObject
    minecraft:oak_leaves

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/bdc387c3-9ac3-45e2-ad84-2535f690ed23)

    洪水浸水想定区域、津波浸水想定、高潮浸水想定区域、内水浸水想定区域、海、潮汐水域、水路、河川/小川、湖、滝、湿地・沼地、浸水域、貯水池、不明
    wtr:WaterBody
    minecraft:water

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/72388d29-481e-4230-b662-dbef68052694)

    地形
    dem:ReliefFeature
    minecraft:stone

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/1caea87a-10e1-4142-b20f-ccf72f2b739c)

    橋梁
    brid:Bridge
    minecraft:polished_andesite

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/99005f31-e306-42e6-bb59-78f1926e6a92)

    トンネル
    tun:Tunnel
    minecraft:cobblestone

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/4a3b2259-2df7-45e5-9ee7-6ba77045184d)

    区域
    urf:Zone
    minecraft:magenta_stained_glass

    ![image](https://github.com/MIERUNE/plateau-gis-converter/assets/84182110/ce73aeea-f4f4-40d1-abe5-dcc22ca3da5e)

    ---------

    Co-authored-by: nokonoko1203 <[email protected]>
    Co-authored-by: Taku Fukada <[email protected]>

commit 0c6addf
Author: Taku Fukada <[email protected]>
Date:   Wed May 29 15:49:36 2024 +0900

    Publish nusamai-geometry as 'flatgeom' on crates.io. (#546)

    Close: #536

    Publish nusamai-geometry as
    [flatgeom](https://crates.io/crates/flatgeom) on crates.io

commit 720b2f0
Author: Taku Fukada <[email protected]>
Date:   Wed May 29 15:38:17 2024 +0900

    Fix: DisasterRiskAttributeProperty for backward compatibility (#547)

    PLATEAU 4.0において `uro:BuildingHighTideRiskAttribute`(建築物で使用) と
    `uro:HighTideRiskAttribute` (その他の地物で使用)が1つの `uro:HighTideRiskAttribute`
    に統一されたため #524 で対応したが、後方互換性のために `uro:BuildingHighTideRiskAttribute`
    要素も拾うような対処はしていなかった。対応する。

commit 1cd36a8
Author: Taku Fukada <[email protected]>
Date:   Tue May 28 23:57:00 2024 +0900

    hotfix: Shapefile 用のフィールド名辞書を更新する (#545)

    PLATEAU 4.0 対応 (#524) により、出現するフィールド名の種類が増えたが、Shapefile
    用の属性名変換辞書を辞書を更新していなかった。また、11文字以上のフィールド名が含まれていると panic する実装になっていた。

    - これらを修正する。
    - 上記の問題をテストで検出できるようにするため、パイプライン全体を最後に join
    する際のエラーを捕捉するようにする。現在はパイプライン内のスレッドが panic してもテストが通ることがある。

commit 9f6c373
Author: Taku Fukada <[email protected]>
Date:   Tue May 28 10:30:43 2024 +0900

    外部ソートを独自の実装に切り替える (#531)

    Close #302

    外部ソートライブラリを、独自に実装した
    [kv-extsort](https://github.com/MIERUNE/kv-extsort-rs) に変更する。
    [ext-sort](https://crates.io/crates/ext-sort) は必要なくなる。

    - ソート中でも処理をキャンセルできるようになる。
    - パフォーマンスがいくらか向上する。
    - 信頼性は低下する、かもしれない → kv-extsort側の品質を上げていく

    Not required / 不要
  • Loading branch information
nokonoko1203 committed May 31, 2024
1 parent bcd5390 commit 194ebd3
Show file tree
Hide file tree
Showing 72 changed files with 1,191 additions and 2,452 deletions.
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,12 @@ PLATEAU の標準仕様に準拠した CityGML 2.0 形式の3D都市モデルは
- アプリケーション:
- [`app`](./app/) &mdash; Tauri による GUI 実装
- [`nusamai`](./nusamai/) &mdash; アプリケーションバックエンドおよびコマンドライン版の実装
- 基盤・ユーティリティ:
- [`nusamai-geometry`](./nusamai-geometry/) &mdash; ジオメトリ型
- [`nusamai-projection`](./nusamai-projection/) &mdash; 投影法変換
- データソース:
- [`nusamai-citygml`](./nusamai-plateau/citygml/) &mdash; CityGML パーサ実装支援ライブラリ
- [`macros`](./nusamai-plateau/citygml/macros/) &mdash; パーサ導出用の proc macros
- [`nusamai-plateau`](./nusamai-plateau/) &mdash; PLATEAU 用の CityGML モデルおよびパーサ
- 変換先形式のための支援ライブラリ(本プロジェクトのユースケースと癒着しないように構成)
- 基盤・ユーティリティ(本プロジェクトのユースケースと癒着しないように構成):
- [`nusamai-projection`](./nusamai-projection/) &mdash; 投影法変換
- [`nusamai-mvt`](./nusamai-mvt/) &mdash; Mapbox Vector Tiles (MVT)
- [`nusamai-gpkg`](./nusamai-gpkg/) &mdash; GeoPackage
- [`nusamai-gltf`](./nusamai-gltf/) &mdash; glTF
Expand All @@ -109,9 +107,10 @@ PLATEAU の標準仕様に準拠した CityGML 2.0 形式の3D都市モデルは

### 7.1. 外部リポジトリ

- [MIERUNE/cesiumtiles-rs](https://github.com/MIERUNE/cesiumtiles-rs) &mdash; 3D TilesのJSONモデルなど
- [MIERUNE/flatgeom-rs](https://github.com/MIERUNE/flatgeom-rs) &mdash; シリアライズ/デシリアライズの効率を優先したジオメトリ型
- [MIERUNE/earcut-rs](https://github.com/MIERUNE/earcut-rs) &mdash; ポリゴン三角形化アルゴリズムのRust移植
- [MIERUNE/japan-geoid](https://github.com/MIERUNE/japan-geoid) &mdash; 日本のジオイドモデル (JGD2011 → WGS 84 の変換)
- [MIERUNE/cesiumtiles-rs](https://github.com/MIERUNE/cesiumtiles-rs) &mdash; 3D TilesのJSONモデルなど

## 8. ライセンス

Expand Down
2 changes: 1 addition & 1 deletion app/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
tauri = { version = "1.6.1", features = [ "shell-open", "fs-read-dir", "dialog-all"] }
nusamai = { path = "../../nusamai" }
nusamai-geometry = { path = "../../nusamai-geometry" }
flatgeom = "0.0"
nusamai-geojson = { path = "../../nusamai-geojson" }
nusamai-plateau = { path = "../../nusamai-plateau" }
nusamai-citygml = {path = "../../nusamai-citygml" }
Expand Down
6 changes: 5 additions & 1 deletion app/src-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,11 @@ fn run_conversion(
.unwrap();

// Wait for the pipeline to finish
handle.join();
if let Err(msg) = handle.join() {
return Err(Error::ConversionFailed(format!(
"Pipeline thread panicked: {msg}"
)));
}

Check warning on line 267 in app/src-tauri/src/main.rs

View check run for this annotation

Codecov / codecov/patch

app/src-tauri/src/main.rs#L263-L267

Added lines #L263 - L267 were not covered by tests

// Return error if an error occurred in the pipeline
if let Some(err) = first_error {
Expand Down
7 changes: 7 additions & 0 deletions demo/mvt/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# mvt demo

```bash
RUST_LOG=debug cargo run --package nusamai --release -- ~/path/to/99999_hoge-shi_city_2023_citygml_1_op/udx/{bldg,tran,brid,frn,veg}/*_6697_op.gml --sink mvt --output mvt
python3 -m http.server
# open http://localhost:8000/
```
5 changes: 3 additions & 2 deletions demo/mvt/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,12 @@
},
{
id: "tran:Road",
type: "fill",
type: "fill-extrusion",
source: "plateau",
"source-layer": "tran:Road",
paint: {
"fill-color": "#aa4444",
"fill-extrusion-color": "#aa4444",
"fill-extrusion-height": 0.01,
},
},
],
Expand Down
4 changes: 2 additions & 2 deletions nusamai-citygml/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ edition = "2021"

[features]
default = ["serde"]
serde = ["dep:serde", "serde_json", "nusamai-geometry/serde"]
serde = ["dep:serde", "serde_json", "flatgeom/serde"]

[dependencies]
ahash = "0.8.11"
chrono = { version = "0.4.35", features = ["serde"], default-features = false }
indexmap = { version = "2.2.6", features = ["serde"] }
log = "0.4.21"
macros = { path = "./macros" }
nusamai-geometry = { path = "../nusamai-geometry", features = ["serde"]}
flatgeom = "0.0"
nusamai-projection = { path = "../nusamai-projection"}
quick-xml = "0.31"
serde = { version = "1.0", features = ["derive"], optional = true }
Expand Down
2 changes: 1 addition & 1 deletion nusamai-citygml/src/geometry.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use nusamai_geometry::{MultiLineString, MultiPoint, MultiPolygon};
use flatgeom::{MultiLineString, MultiPoint, MultiPolygon};
use nusamai_projection::crs::*;

use crate::LocalId;
Expand Down
2 changes: 1 addition & 1 deletion nusamai-czml/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ edition = "2021"
chrono = { version = "0.4.35", features = ["serde"] }
serde = { version = "1.0.197", features = ["derive"] }
serde_json = { version = "1.0.115", features = ["float_roundtrip"] }
nusamai-geometry = { path = "../nusamai-geometry" }
flatgeom= "0.0"

[dev-dependencies]
glob = "0.3.1"
2 changes: 1 addition & 1 deletion nusamai-czml/src/conversion.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use nusamai_geometry::{MultiPolygon, Polygon};
use flatgeom::{MultiPolygon, Polygon};

use crate::{
models::CzmlPolygon, PositionList, PositionListOfLists, PositionListOfListsProperties,
Expand Down
2 changes: 1 addition & 1 deletion nusamai-geojson/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ edition = "2021"

[dependencies]
geojson = "0.24.1"
nusamai-geometry = { path = "../nusamai-geometry" }
flatgeom= "0.0"
serde_json = { version = "1.0.115", features = ["indexmap"] }
28 changes: 14 additions & 14 deletions nusamai-geojson/src/conversion.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use nusamai_geometry::{
use flatgeom::{
Coord, LineString, LineString3, MultiLineString, MultiLineString3, MultiPoint, MultiPoint3,
MultiPolygon, Polygon,
};

/// Create a GeoJSON Polygon from `nusamai_geometry::MultiPolygon`.
/// Create a GeoJSON Polygon from `flatgeom::MultiPolygon`.
pub fn polygon_to_value<const D: usize>(poly: &Polygon<[f64; D]>) -> geojson::Value {
polygon_to_value_with_mapping(poly, |c| c.to_vec())
}
Expand All @@ -13,7 +13,7 @@ pub fn indexed_polygon_to_value(vertices: &[[f64; 3]], poly_idx: &Polygon<u32>)
polygon_to_value_with_mapping(poly_idx, |idx| vertices[idx as usize].to_vec())
}

/// Create a GeoJSON Polygon from `nusamai_geometry::Polygon` with a mapping function.
/// Create a GeoJSON Polygon from `flatgeom::Polygon` with a mapping function.
pub fn polygon_to_value_with_mapping<T: Coord>(
poly: &Polygon<T>,
mapping: impl Fn(T) -> Vec<f64>,
Expand All @@ -29,7 +29,7 @@ pub fn polygon_to_value_with_mapping<T: Coord>(
geojson::Value::Polygon(coords)
}

/// Create a GeoJSON MultiPolygon from `nusamai_geometry::MultiPolygon`.
/// Create a GeoJSON MultiPolygon from `flatgeom::MultiPolygon`.
pub fn multipolygon_to_value<const D: usize>(mpoly: &MultiPolygon<[f64; D]>) -> geojson::Value {
multipolygon_to_value_with_mapping(mpoly, |c| c.to_vec())
}
Expand All @@ -42,7 +42,7 @@ pub fn indexed_multipolygon_to_value(
multipolygon_to_value_with_mapping(mpoly_idx, |idx| vertices[idx as usize].to_vec())
}

/// Create a GeoJSON MultiPolygon from `nusamai_geometry::MultiPolygon` with a mapping function.
/// Create a GeoJSON MultiPolygon from `flatgeom::MultiPolygon` with a mapping function.
pub fn multipolygon_to_value_with_mapping<T: Coord>(
mpoly: &MultiPolygon<T>,
mapping: impl Fn(T) -> Vec<f64>,
Expand All @@ -62,7 +62,7 @@ pub fn multipolygon_to_value_with_mapping<T: Coord>(
geojson::Value::MultiPolygon(coords)
}

/// Create a GeoJSON LineString from `nusamai_geometry::LineString`.
/// Create a GeoJSON LineString from `flatgeom::LineString`.
pub fn linestring_to_value(ls: &LineString3) -> geojson::Value {
linestring_to_value_with_mapping(ls, |c| c.to_vec())
}
Expand All @@ -75,7 +75,7 @@ pub fn indexed_linestring_to_value(
linestring_to_value_with_mapping(ls_idx, |idx| vertices[idx as usize].to_vec())
}

/// Create a GeoJSON LineString from `nusamai_geometry::LineString` with a mapping function.
/// Create a GeoJSON LineString from `flatgeom::LineString` with a mapping function.
pub fn linestring_to_value_with_mapping<T: Coord>(
ls: &LineString<T>,
mapping: impl Fn(T) -> Vec<f64>,
Expand All @@ -84,7 +84,7 @@ pub fn linestring_to_value_with_mapping<T: Coord>(
geojson::Value::LineString(coords)
}

/// Create a GeoJSON MultiLineString from `nusamai_geometry::MultiLineString`.
/// Create a GeoJSON MultiLineString from `flatgeom::MultiLineString`.
pub fn multilinestring_to_value(mls: &MultiLineString3) -> geojson::Value {
multilinestring_to_value_with_mapping(mls, |c| c.to_vec())
}
Expand All @@ -97,7 +97,7 @@ pub fn indexed_multilinestring_to_value(
multilinestring_to_value_with_mapping(mls_idx, |idx| vertices[idx as usize].to_vec())
}

/// Create a GeoJSON MultiLineString from `nusamai_geometry::MultiLineString` with a mapping function.
/// Create a GeoJSON MultiLineString from `flatgeom::MultiLineString` with a mapping function.
pub fn multilinestring_to_value_with_mapping<T: Coord>(
mls: &MultiLineString<T>,
mapping: impl Fn(T) -> Vec<f64>,
Expand All @@ -114,7 +114,7 @@ pub fn multilinestring_to_value_with_mapping<T: Coord>(
geojson::Value::MultiLineString(coords)
}

/// Create a GeoJSON Point from `nusamai_geometry::Point`.
/// Create a GeoJSON Point from `flatgeom::Point`.
pub fn point_to_value(point: &[f64; 3]) -> geojson::Value {
point_to_value_with_mapping(*point, |c| c.to_vec())
}
Expand All @@ -124,15 +124,15 @@ pub fn indexed_point_to_value(vertices: &[[f64; 3]], point_idx: u32) -> geojson:
point_to_value_with_mapping(point_idx, |idx| vertices[idx as usize].to_vec())
}

/// Create a GeoJSON Point from `nusamai_geometry::Point` with a mapping function.
/// Create a GeoJSON Point from `flatgeom::Point` with a mapping function.
pub fn point_to_value_with_mapping<T: Coord>(
point: T,
mapping: impl Fn(T) -> Vec<f64>,
) -> geojson::Value {
geojson::Value::Point(mapping(point))
}

/// Create a GeoJSON MultiPoint from `nusamai_geometry::Point`.
/// Create a GeoJSON MultiPoint from `flatgeom::Point`.
pub fn multipoint_to_value(mpoint: &MultiPoint3) -> geojson::Value {
multipoint_to_value_with_mapping(mpoint, |c| c.to_vec())
}
Expand All @@ -145,7 +145,7 @@ pub fn indexed_multipoint_to_value(
multipoint_to_value_with_mapping(mpoint_idx, |idx| vertices[idx as usize].to_vec())
}

/// Create a GeoJSON MultiPoint from `nusamai_geometry::MultiPoint` with a mapping function.
/// Create a GeoJSON MultiPoint from `flatgeom::MultiPoint` with a mapping function.
pub fn multipoint_to_value_with_mapping<T: Coord>(
mpoint: &MultiPoint<T>,
mapping: impl Fn(T) -> Vec<f64>,
Expand All @@ -159,7 +159,7 @@ pub fn multipoint_to_value_with_mapping<T: Coord>(

#[cfg(test)]
mod tests {
use nusamai_geometry::{MultiPolygon3, Polygon3};
use flatgeom::{MultiPolygon3, Polygon3};

use super::*;

Expand Down
16 changes: 0 additions & 16 deletions nusamai-geometry/Cargo.toml

This file was deleted.

35 changes: 0 additions & 35 deletions nusamai-geometry/README.md

This file was deleted.

Binary file removed nusamai-geometry/docs/01_linestring.png
Binary file not shown.
Binary file removed nusamai-geometry/docs/02_polygon.png
Binary file not shown.
Binary file removed nusamai-geometry/docs/03_polygon_with_a_hole.png
Binary file not shown.
Binary file not shown.
Binary file removed nusamai-geometry/docs/05_multipolygon.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed nusamai-geometry/docs/nusamai-geometry.key
Binary file not shown.
Loading

0 comments on commit 194ebd3

Please sign in to comment.