ワールドファイル付きラスタ(Raster image with world file)からKMZ作成
📌 ワールドファイル付きラスタ(Raster image with world file)からKMZ作成
🔍 概要
GISソフトで出力した ワールドファイル付きラスタ(JPEG + JGW) を、Google Earth で表示可能な KMZ形式 に変換する方法です。
🛠 手順
Step 1|GISソフトで出力
QGISなどで以下の2ファイルを出力します:
neko.jpeg
(画像)neko.jgw
(ワールドファイル)
Step 2|PythonでKMZを自動生成
以下のスクリプトを使えば、フォルダを選ぶだけでKMZが自動生成されます。
✅ スクリプトファイル:convert_to_kmz.py をダウンロード
💻 Pythonスクリプト
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
JPEG + JGW → KMZ に変換するツール
pip install simplekml pillow が必要
"""
import os
import glob
import tkinter as tk
from tkinter import filedialog, messagebox
try:
import simplekml
except ImportError:
raise SystemExit("simplekml が見つかりません。pip install simplekml を実行してください。")
try:
from PIL import Image
except ImportError:
raise SystemExit("Pillow が見つかりません。pip install pillow を実行してください。")
def read_worldfile(path: str):
with open(path, "r", encoding="utf-8") as f:
vals = [float(line.strip()) for line in f if line.strip()]
dx = vals[0]; dy = vals[3]; x0 = vals[4]; y0 = vals[5]
return dx, dy, x0, y0
def convert_folder(folder: str):
image_patterns = ("*.jpg", "*.jpeg", "*.JPG", "*.JPEG")
images = []
for pat in image_patterns:
images.extend(glob.glob(os.path.join(folder, pat)))
if not images:
messagebox.showwarning("警告", "画像が見つかりません。")
return
for img_path in images:
base_name = os.path.splitext(os.path.basename(img_path))[0]
jgw_path = next((p for p in (
os.path.join(folder, base_name + ".jgw"),
os.path.join(folder, base_name + ".JGW")
) if os.path.exists(p)), None)
if jgw_path is None:
print(f"スキップ(JGW なし): {img_path}")
continue
dx, dy, x0, y0 = read_worldfile(jgw_path)
with Image.open(img_path) as im:
width, height = im.size
west = x0 - dx / 2
north = y0 - dy / 2
east = west + dx * width
south = north + dy * height
kml = simplekml.Kml()
gnd = kml.newgroundoverlay(name=base_name)
gnd.icon.href = os.path.basename(img_path)
gnd.latlonbox.north = north
gnd.latlonbox.south = south
gnd.latlonbox.east = east
gnd.latlonbox.west = west
kmz_path = os.path.join(folder, base_name + ".kmz")
kml.savekmz(kmz_path)
print(f"✔ KMZ 作成: {kmz_path}")
def main():
root = tk.Tk()
root.withdraw()
folder = filedialog.askdirectory(title="KMZ を作成するフォルダを選択")
if not folder:
return
convert_folder(folder)
messagebox.showinfo("完了", "KMZ 変換が完了しました。Enter キーで終了します。")
input("Enter キーで終了します…")
if __name__ == "__main__":
main()
📦 補足情報
- 対応形式:JPEG(.jpg / .jpeg)+ JGW(ワールドファイル)
- 出力:KMZファイルが同フォルダ内に自動生成されます
- Pythonライブラリ:
simplekml
・Pillow
を使用
コメント
コメントを投稿