Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
c21ad6f
feat(build): add public API surface freeze gate
wf9a5m75 Aug 10, 2026
e158587
chore: bump js-sdk-core (Step 1: capability declaration and diagnostics)
wf9a5m75 Aug 10, 2026
6e6de92
chore: bump core and 8 providers (Step 2: one zoom converter in the c…
wf9a5m75 Aug 10, 2026
55a481b
chore: bump core and 13 providers (Step 3: MapViewState base)
wf9a5m75 Aug 10, 2026
23415c1
chore: bump core and 13 providers (Step 4: Capable facade defaults)
wf9a5m75 Aug 10, 2026
6ce3f75
chore: bump core and react bindings (Step 5: projection requirement)
wf9a5m75 Aug 10, 2026
92a2743
chore: bump core and 5 providers (Step 6: click cascade in the core)
wf9a5m75 Aug 10, 2026
eee9398
chore: bump 7 providers (Step 6: taps go through the core cascade)
wf9a5m75 Aug 10, 2026
b6b713c
chore: bump 6 providers (Step 6: all 13 web providers on the core cas…
wf9a5m75 Aug 10, 2026
b7e7523
chore: bump core and 5 providers (Step 7: marker event controller in …
wf9a5m75 Aug 10, 2026
f738d69
feat: react-for-template — 動く最小のドライバーと authoring guide
wf9a5m75 Aug 10, 2026
96a1030
chore: 雛形の適合テストをバージョン管理から外さない
wf9a5m75 Aug 10, 2026
0f026fc
refactor: react-for-template を android/ios の雛形と同じ構成にそろえる
wf9a5m75 Aug 10, 2026
598c235
feat(sample): Tilt ページを android / ios / react で揃える
wf9a5m75 Aug 11, 2026
523ea0d
refactor(sample): GeoJSON レイヤーの吹き出しで N02 の属性名を日本語+英語で出す
wf9a5m75 Aug 11, 2026
543595d
refactor(sample): 路線名・運営会社の英語表記を geojson に持たせ、端末の言語で切り替える
wf9a5m75 Aug 11, 2026
d72946f
chore: 出典表示を地図の下辺に付ける変更のポインタ更新
wf9a5m75 Aug 11, 2026
e17494e
fix(examples): tilt スライダーを ±89 にして android / iOS と揃える
wf9a5m75 Aug 11, 2026
a3caf3a
feat(examples): Mappls プロバイダを登録
wf9a5m75 Aug 11, 2026
03780b0
fix(examples): Mappls の map-design 候補を実在スタイルに絞る (Default / StandardDay)
wf9a5m75 Aug 11, 2026
96bfbb9
chore: react-for-googlemaps のポインタを更新(2D の registerOverlayController 漏…
wf9a5m75 Aug 11, 2026
b95f660
chore: GL 系 5 プロバイダのポインタを更新(スタイル再読込中のラスタ削除の保留キュー)
wf9a5m75 Aug 11, 2026
19045c9
feat(examples): サンプル精度を android / ios と揃える
wf9a5m75 Aug 12, 2026
8d218bc
feat(example): hide tilt camera diagram on portrait phones
wf9a5m75 Aug 12, 2026
e6903db
feat(example): align marker animation sample with android/ios
wf9a5m75 Aug 12, 2026
6ab0b57
fix(example): route post-office cluster content to the google-3d sing…
wf9a5m75 Aug 12, 2026
3f141f9
feat(example): rebuild styled bubble sample with color swatches and s…
wf9a5m75 Aug 12, 2026
241f424
docs(example): update info-bubble-styled code sample for the new page
wf9a5m75 Aug 12, 2026
04a7ea6
chore: refresh map SDK dependencies to latest minors
wf9a5m75 Aug 12, 2026
60c255e
feat(kml): add react-kml package (web) ported from android-kml
wf9a5m75 Aug 12, 2026
c8ef912
fix(kml): hit polygon interiors even when a pixel tolerance is passed
wf9a5m75 Aug 13, 2026
30f8d80
fix(rn): align reactnative-for-* with the refactored android-sdk
wf9a5m75 Aug 13, 2026
d495408
feat(rn): wire state.uiSettings through to the native maps
wf9a5m75 Aug 13, 2026
117de5a
refactor(rn): base holders on MapViewHolderBase, declare projection c…
wf9a5m75 Aug 13, 2026
31024c4
fix(example): use OsmBright on the RN UI Settings page
wf9a5m75 Aug 13, 2026
fdd15d5
refactor(rn): collapse the cloned bridge controllers into one shared …
wf9a5m75 Aug 13, 2026
51bd27c
refactor(rn): collapse the cloned views into NativeMapViewHost
wf9a5m75 Aug 13, 2026
35aa554
refactor(rn): de-duplicate the Android bridge helpers
wf9a5m75 Aug 13, 2026
431732d
refactor(rn): make the bridge command set compiler-checked
wf9a5m75 Aug 13, 2026
64343dd
chore: bump RN iOS packages onto the shared map view base
wf9a5m75 Aug 13, 2026
758f02f
chore: bump js-sdk-react (iOS first-paint and tap fixes)
wf9a5m75 Aug 13, 2026
3a9ce33
refactor(android): RN ラッパーを共通基底へ寄せる(2,615 行 → 505 行)
wf9a5m75 Aug 13, 2026
e351934
chore: bump js-sdk-react (Android child re-measure on layout)
wf9a5m75 Aug 13, 2026
8cfdc56
feat(example): RN サンプルを横向きに対応させる
wf9a5m75 Aug 14, 2026
d6c892b
refactor(ios): RN の ObjC ViewManager を共通化(1,000 行 → 234 行)
wf9a5m75 Aug 14, 2026
9efdb89
feat: reactnative-for-template を追加する
wf9a5m75 Aug 14, 2026
96e62dc
feat: reactnative-for-longdo を追加する(android / iOS 両方で検証済み)
wf9a5m75 Aug 14, 2026
7c21f65
fix: Longdo の投影を JS ではなくネイティブのコアから取る
wf9a5m75 Aug 14, 2026
38f004a
test(example): 実機用の XCUITest ターゲットを足す
wf9a5m75 Aug 14, 2026
9c93a17
fix(test): 座標タップの基準を app から window へ変える
wf9a5m75 Aug 14, 2026
d10721a
test(example): InfoBubble が地図のパンに追従するかの実機テストを足す
wf9a5m75 Aug 15, 2026
dc5860f
chore: js-sdk-react を更新(JS 側の画面投影を削除)
wf9a5m75 Aug 15, 2026
9566898
chore: react-for-tomtom を更新(RN 向け state サブパス)
wf9a5m75 Aug 15, 2026
4a100c6
feat: reactnative-for-tomtom を足す(未検証)
wf9a5m75 Aug 15, 2026
b067b16
Revert "feat: reactnative-for-tomtom を足す(未検証)"
wf9a5m75 Aug 15, 2026
88fbf7e
chore: react-for-maptiler を更新(RN 向け state サブパス)
wf9a5m75 Aug 15, 2026
6431255
chore: 0.2.0
wf9a5m75 Aug 16, 2026
02d03b4
fix: scripts/*.mjs が .gitignore の *.mjs に飲まれて追跡されていなかった
wf9a5m75 Aug 16, 2026
cfd9368
fix: react-for-mapkit が build:packages に無く、中身の無いパッケージが publish されていた
wf9a5m75 Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
53 changes: 53 additions & 0 deletions .github/workflows/api-surface.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
name: Public API Surface

# 公開 API サーフェスの凍結ゲート。
#
# ドライバー層の共通化中、アプリ開発者向け API を変えていないことを機械的に保証する。
# 意図した変更なら `node scripts/api-surface.mjs dump <package>` でベースラインを
# 更新してコミットすること。android-sdk の lint.yml の apiCheck ステップ、
# ios-sdk の api-surface.yml に対応する。
#
# 読むのは各パッケージの `dist/index.d.ts`。`/** @internal */` が付いた宣言は
# 記録から除かれる(= ドライバー実装点は自由に変えてよい)。

on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review]
branches:
- main
workflow_dispatch:
inputs:
packages:
description: "空白区切りのパッケージ名。空なら全パッケージ。"
required: false
default: ""

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
api-surface:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
name: Check public API surface

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
token: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Install
run: npm ci

- name: Check
env:
PACKAGES: ${{ github.event.inputs.packages }}
run: node scripts/api-surface.mjs check ${PACKAGES:-}
20 changes: 16 additions & 4 deletions .github/workflows/deploy-basic-example.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,10 +6,21 @@ name: Deploy basic example
# FIREBASE_SERVICE_ACCOUNT - JSON key of a service account for the
# `mapconductor` Firebase project with the
# "Firebase Hosting Admin" role
# VITE_GOOGLE_MAPS_API_KEY - Google Maps JavaScript API key
# VITE_ARCGIS_API_KEY - ArcGIS Location Platform API key
# VITE_MAPBOX_ACCESS_TOKEN - Mapbox access token
# VITE_HERE_API_KEY - HERE platform API key
# VITE_GOOGLE_MAPS_API_KEY - Google Maps JavaScript API key
# VITE_ARCGIS_API_KEY - ArcGIS Location Platform API key
# VITE_MAPBOX_ACCESS_TOKEN - Mapbox access token
# VITE_HERE_API_KEY - HERE platform API key
# VITE_MAPKIT_TOKEN - Apple MapKit JS JWT
# VITE_AZURE_MAPS_SUBSCRIOTION_KEY - Azure Maps subscription key (typo is the
# committed spelling; examples/basic reads
# this exact name)
# VITE_TOMTOM_API_KEY - TomTom Maps SDK key
# VITE_MAPTILER - MapTiler Cloud key
# VITE_LONGDO - Longdo Map key
# VITE_MAPPLS_API_KEY - Mappls (MapmyIndia) REST/Map SDK key
#
# The list must stay in sync with examples/basic/.env; a missing entry does not
# fail the build, it just ships a bundle where that one provider is blank.
# The VITE_* values are embedded into the static bundle at build time.

on:
Expand DownExpand Up@@ -69,6 +80,7 @@ jobs:
VITE_TOMTOM_API_KEY: ${{ secrets.VITE_TOMTOM_API_KEY }}
VITE_MAPTILER: ${{ secrets.VITE_MAPTILER }}
VITE_LONGDO: ${{ secrets.VITE_LONGDO }}
VITE_MAPPLS_API_KEY: ${{ secrets.VITE_MAPPLS_API_KEY }}

- name: Deploy to Firebase Hosting
uses: FirebaseExtended/action-hosting-deploy@v0
Expand Down
33 changes: 30 additions & 3 deletions .github/workflows/npm-publish.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,10 +43,37 @@ jobs:
run: npm run build:packages

# link-local-workspaces.mjs changes internal dependency specs to "*".
# Restore the committed manifests after the build so those temporary
# specs are never included in a published package.
# Restore them before publishing so no package ships a "*" dependency on
# another @mapconductor package.
#
# This used to be `git submodule foreach 'git restore -- package.json'`,
# which only covered submodules. react-for-mappls, react-kml and every
# reactnative-for-* package live directly in this repo, so their "*"
# specs survived and would have been published verbatim. None of them had
# been published before, so it never shipped - but react-for-mappls and
# react-kml publish for the first time in 0.2.0.
- name: Restore package manifests for publishing
run: git submodule foreach --recursive 'git restore --source=HEAD -- package.json'
run: node scripts/unlink-local-workspaces.mjs

# Nothing may reach the registry depending on "*". Fail loudly rather
# than publish an unpinned graph.
- name: Assert no wildcard internal dependencies
shell: bash
run: |
set -euo pipefail
if grep -rn '"@mapconductor/[a-z0-9-]*": "\*"' --include=package.json . \
| grep -v node_modules | grep -vE '(^|\./)examples/'; then
echo "::error::internal dependency left as \"*\" outside examples/"
exit 1
fi
echo "no wildcard internal dependencies outside examples/"

# Inspect the actual tarballs before anything is uploaded: version,
# license, internal dep pins, and that each one really contains dist/.
# react-for-mapkit@0.1.3 shipped with no code because it was missing from
# build:packages, and npm published it without complaint.
- name: Preflight publishable packages
run: node scripts/preflight-publish.mjs

- name: Preview npm packages
shell: bash
Expand Down
12 changes: 11 additions & 1 deletion .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,9 +50,14 @@ dist/*
*.mts
*.map
*.mjs
# 雛形の適合テストはバージョン管理する(外部の作者がコピーする出発点なので)。
!react-for-template/test/*.mjs
!examples/basic/server.mjs
!examples/basic/scripts/generate-static.mjs
!scripts/link-local-workspaces.mjs
# scripts/ はソースしか置かないので丸ごと追跡する。1 本ずつ negation を足す運用だと
# 足し忘れたスクリプトが `git add -A` で無言のまま無視され、CI のチェックアウトにだけ
# 存在しない状態になる(unlink-local-workspaces.mjs で実際に踏んだ)。
!scripts/*.mjs
*.cjs
!eslint.config.cjs
dist/*.d.ts
Expand All@@ -68,3 +73,8 @@ qiita.md
# Firebase CLI cache
.firebase/
firebase-debug.log
smoke-shots/

# RN example build output (xcodebuild -derivedDataPath / Kotlin daemon state)
examples/reactnative-basic/ios/build_*/
examples/reactnative-basic/android/.kotlin/
18 changes: 15 additions & 3 deletions .gitmodules
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,9 +16,9 @@
[submodule "reactnative-for-maplibre"]
path = reactnative-for-maplibre
url = git@github.com:mapconductor/reactnative-for-maplibre.git
[submodule "react-geojson-layer"]
path = react-geojson-layer
url = git@github.com:mapconductor/react-geojson-layer.git
[submodule "react-geojson"]
path = react-geojson
url = git@github.com:mapconductor/react-geojson.git
[submodule "react-heatmap"]
path = react-heatmap
url = git@github.com:mapconductor/react-heatmap.git
Expand DownExpand Up@@ -67,3 +67,15 @@
[submodule "react-for-maptiler"]
path = react-for-maptiler
url = git@github.com:mapconductor/react-for-maptiler
[submodule "react-for-mappls"]
path = react-for-mappls
url = git@github.com:MapConductor/react-for-mappls.git
[submodule "react-icons-jp"]
path = react-icons-jp
url = git@github.com:MapConductor/react-icons-jp.git
[submodule "react-icons-us"]
path = react-icons-us
url = git@github.com:MapConductor/react-icons-us.git
[submodule "react-icons-weather"]
path = react-icons-weather
url = git@github.com:MapConductor/react-icons-weather.git
2 changes: 1 addition & 1 deletion docs/package.json
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
{
"name": "@mapconductor/react-sdk-docs",
"version": "0.1.0",
"version": "0.2.0",
"private": true,
"type": "module",
"scripts": {
Expand Down
6 changes: 3 additions & 3 deletions docs/src/content/docs/guides/extensions.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,7 +9,7 @@ Extension packages build on the same map scope and state model as the core overl

| Package | Purpose |
| --- | --- |
| `@mapconductor/react-geojson-layer` | Parse GeoJSON/GeoJSON Sequence data and render feature layers |
| `@mapconductor/react-geojson` | Parse GeoJSON/GeoJSON Sequence data and render feature layers |
| `@mapconductor/react-heatmap` | Density visualization from weighted geographic points |
| `@mapconductor/react-marker-clustering` | Group nearby markers and render cluster icons |
| `@mapconductor/react-icons` | Ready-made `MarkerIcon` shapes (circle, flag, info-bubble tails) |
Expand All@@ -19,8 +19,8 @@ Extension packages build on the same map scope and state model as the core overl
`<GeoJSONLayer>` rasterizes features into tiles and renders them as a `RasterLayer` under the hood, so large feature sets stay off the main render path. Load static GeoJSON with `GeoJSONParser` and pass the parsed features directly:

```tsx
import { GeoJSONLayer, GeoJSONLayerState, GeoJSONParser, colorArgb } from '@mapconductor/react-geojson-layer';
import type { GeoJSONFeatureData } from '@mapconductor/react-geojson-layer';
import { GeoJSONLayer, GeoJSONLayerState, GeoJSONParser, colorArgb } from '@mapconductor/react-geojson';
import type { GeoJSONFeatureData } from '@mapconductor/react-geojson';

const layerState = useMemo(() => new GeoJSONLayerState({
fillColor: colorArgb(127, 0x3b, 0xb2, 0xd0),
Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/ja/guides/extensions.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@ description: GeoJSON、heatmap、marker clustering、icon package。

| パッケージ | 用途 |
| --- | --- |
| `@mapconductor/react-geojson-layer` | GeoJSON / GeoJSON sequence の解析と layer 描画 |
| `@mapconductor/react-geojson` | GeoJSON / GeoJSON sequence の解析と layer 描画 |
| `@mapconductor/react-heatmap` | 重み付き座標の密度可視化 |
| `@mapconductor/react-marker-clustering` | 近接 marker の grouping と cluster icon |
| `@mapconductor/react-icons` | 共通 icon helper |
Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/ja/reference/packages.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,7 @@ description: MapConductor React SDK のパッケージ構成。
| 共通 | `@mapconductor/js-sdk-react` | overlay、MapView scope、InfoBubble、Web/native entry point |
| Web | `@mapconductor/react-for-*` | React DOM の provider view |
| Native | `@mapconductor/reactnative-for-*` | React Native view と Android/iOS bridge |
| 拡張 | `react-icons`, `react-geojson-layer`, `react-heatmap`, `react-marker-clustering` | 任意機能 |
| 拡張 | `react-icons`, `react-geojson`, `react-heatmap`, `react-marker-clustering` | 任意機能 |

Web provider package に Android/iOS 実装を含めません。native bridge はそれぞれの `reactnative-for-*` package が所有し、可能な範囲で Web sibling の design/state type を再利用します。

Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/reference/packages.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ description: MapConductor React SDK package responsibilities.

## Extension packages

`@mapconductor/react-icons`, `react-geojson-layer`, `react-heatmap`, and `react-marker-clustering` add optional capabilities without changing provider controller interfaces.
`@mapconductor/react-icons`, `react-geojson`, `react-heatmap`, and `react-marker-clustering` add optional capabilities without changing provider controller interfaces.

## Import rule of thumb

Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/states/rasterlayer-state.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@ description: Retained, observable state for a tiled raster overlay.

# RasterLayerState

`RasterLayerState` holds a raster tile layer's source and styling as mutable, observable properties. It's the state type `<RasterLayer>` renders, and also the type extension packages like `react-geojson-layer` and `react-heatmap` build on internally — both rasterize their content into tiles and mount a `RasterLayer` underneath.
`RasterLayerState` holds a raster tile layer's source and styling as mutable, observable properties. It's the state type `<RasterLayer>` renders, and also the type extension packages like `react-geojson` and `react-heatmap` build on internally — both rasterize their content into tiles and mount a `RasterLayer` underneath.

## Creating a RasterLayerState

Expand Down
3 changes: 3 additions & 0 deletions examples/basic/.env.example
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,3 +26,6 @@ VITE_TOMTOM_API_KEY=your_api_key_here
# MapTiler Cloud API Key
# Get your API key from: https://cloud.maptiler.com/
VITE_MAPTILER=your_api_key_here

# Mappls (MapmyIndia)
VITE_MAPPLS_API_KEY=your_api_key_here
6 changes: 4 additions & 2 deletions examples/basic/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,8 @@
"@mapconductor/react-for-cesium": "*",
"@mapconductor/react-for-here": "*",
"@mapconductor/react-for-tomtom": "*",
"@mapconductor/react-geojson-layer": "*",
"@mapconductor/react-geojson": "*",
"@mapconductor/react-kml": "*",
"@mapconductor/react-heatmap": "*",
"@mapconductor/react-icons": "*",
"@mapconductor/react-marker-clustering": "*",
Expand All@@ -36,7 +37,8 @@
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-router-dom": "^7.18.0",
"three": "^0.185.1"
"three": "^0.185.1",
"@mapconductor/react-for-mappls": "*"
},
"devDependencies": {
"@types/react": "^19.2.17",
Expand Down
Binary file modifiedexamples/basic/public/geojson/N02-22_GML.zip
Binary file not shown.
116 changes: 116 additions & 0 deletions examples/basic/public/sample.kml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>MapConductor KML Sample</name>

<Style id="redLine">
<LineStyle>
<color>ff0000ff</color>
<width>4</width>
</LineStyle>
</Style>

<Style id="bluePoly">
<LineStyle>
<color>ffcc6600</color>
<width>3</width>
</LineStyle>
<PolyStyle>
<color>7fdd8800</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
</Style>

<Style id="greenPoint">
<IconStyle>
<color>ff00cc00</color>
</IconStyle>
</Style>

<StyleMap id="bluePolyMap">
<Pair>
<key>normal</key>
<styleUrl>#bluePoly</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#bluePoly</styleUrl>
</Pair>
</StyleMap>

<Placemark>
<name>Imperial Palace Area</name>
<description>A polygon with a hole near the Imperial Palace.</description>
<styleUrl>#bluePolyMap</styleUrl>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<coordinates>
139.744,35.688,0
139.762,35.688,0
139.762,35.676,0
139.744,35.676,0
139.744,35.688,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
139.750,35.685,0
139.756,35.685,0
139.756,35.680,0
139.750,35.680,0
139.750,35.685,0
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark>

<Placemark>
<name>Chuo Line (approx.)</name>
<description>A red poly-line running east to west.</description>
<styleUrl>#redLine</styleUrl>
<LineString>
<coordinates>
139.700,35.700,0
139.730,35.695,0
139.770,35.690,0
139.810,35.700,0
</coordinates>
</LineString>
</Placemark>

<Placemark>
<name>Tokyo Station</name>
<description>A styled point placemark.</description>
<styleUrl>#greenPoint</styleUrl>
<ExtendedData>
<Data name="category">
<value>station</value>
</Data>
</ExtendedData>
<Point>
<coordinates>139.767,35.681,0</coordinates>
</Point>
</Placemark>

<Folder>
<name>Points of Interest</name>
<Placemark>
<name>Ginza</name>
<Point>
<coordinates>139.764,35.671,0</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Akihabara</name>
<Point>
<coordinates>139.774,35.698,0</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
Loading
Loading