Ленивый админский GEOINT 211
С помощью Google Lens можно получить картинку чуть получше качества на Pinterest.
Ещё там выдаются посты про город Камакура, но в регионе Канто таких столбов как справа ВООБЩЕ НЕТ, это больше похоже на Сикоку
Видим отличную тень от солнца. Мы находимся в северном полушарии, так что предполагаем, что солнце светит с юга. Можно попробовать построить план местности как бы выглядел вид со спутника.
Основные моменты: две парковки, кривой перекресток, асфальт синего цвета, зеленая полоса на асфальте, три люка (на спутнике с качеством 30см скорее всего будут плохо видны)
Получается примерно такая картина:
Дальше начинается самое интересное. Брутить все перекрестки в японии не вариант, поэтому я попытался найти все парковки AMANO. В OpenStreet Map выборочный поиск дал понять, что парковки AMANO никто не размечал. В мобильном приложении AMANO тоже карты парковок в Японии нету. Но чутка погуглив выходим на такую замечательную карту: https://www.locationsmart.org/?tag=_service_parking_amano&lat=35.35021868957501&lon=139.85197334628057&z=6
Выборочный поиск в Камакуре не дал результатов, наше место явно не там, где писали. Дальше с картой начинаются проблемы: она показывает места не все сразу, нужно приближать чтобы увидеть, если две точки находятся рядом. Я начал думать как спарсить с карты все точки и полез смотреть JSки, которые тянут точки на карту.
По итогу в DevTools в Network с включенным Preserve Log обнаруживаем нужный запрос:
Зная парковки можно парсить разными способами, я решил через JS прямо в консоли браузера
Все, что нам нужно изменить в оригинальном запросе, это параметры координат n,s,e,w на максимально возможные. В результате получаем JSON из 318 координат.
fetch("/ttypeg/php/g.php?tag=_service_parking_amano&n=90&s=-90&w=-180&e=180&z=14&epoch=1749148366324")
.then(res => res.json())
.then(json => {
// json.shops – это массив объектов, каждый из которых примерно имеет вид:
// { shop_id: 12345, lat: 35.6895, lon: 139.6917, icon: "...", hide: ..., ... }
const allCoords = json.shops.map(item => ({
shop_id: item.shop_id,
lat: Number(item.lat),
lon: Number(item.lon),
// Если в JSON есть другое поле с названием, можно его тоже добавить
name: item.n || item.name || ""
}));
console.table(allCoords);
console.log("JSON для копирования:\n", JSON.stringify(allCoords, null, 2));
})
.catch(err => console.error("Ошибка при fetch g.php:", err));
Дальше надо преобразовать JSON в KML чтобы скормить его в проект Google Earth. Для этого я наГПТшил скриптик на питоне:
# Скрипт конвертирует JSON-массив точек в KML-файл для Google Earth.
# Ожидается, что рядом со скриптом лежит файл points.json со структурой:
# [
# {
# "shop_id": 759141,
# "lat": 24.0612443,
# "lon": 123.773374,
# "name": ""
# },
# ...
# ]
def main():
input_json_file = 'path/to/ponts.json' # Имя вашего JSON-файла
output_kml_file = 'path/to/points.kml' # Имя результирующего KML-файла
# 1. Читаем JSON
if not os.path.exists(input_json_file):
print(f"Файл '{input_json_file}' не найден.")
print("Создайте файл points.json в той же папке, где лежит скрипт, "
"и вставьте туда массив точек в формате JSON.")
return
with open(input_json_file, 'r', encoding='utf-8') as f:
data = json.load(f)
# 2. Заголовок и хвост KML
kml_header = '''<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
'''
kml_footer = ''' </Document>
</kml>
'''
# 3. Формируем Placemark для каждой точки
placemarks = []
for item in data:
shop_id = item.get("shop_id", "")
lat = item.get("lat")
lon = item.get("lon")
name = item.get("name", "")
# Если name пусто, подставим shop_id как имя
placemark_name = name if name else str(shop_id)
placemark = f''' <Placemark>
<name>{placemark_name}</name>
<Point>
<coordinates>{lon},{lat},0</coordinates>
</Point>
</Placemark>
'''
placemarks.append(placemark)
# 4. Собираем полный KML-контент
kml_content = kml_header + "".join(placemarks) + kml_footer
# 5. Записываем в файл
with open(output_kml_file, 'w', encoding='utf-8') as f:
f.write(kml_content)
print(f"KML-файл '{output_kml_file}' успешно создан. Всего точек: {len(placemarks)}")
if __name__ == "__main__":
main()
Кормим получившийся KML в Землю и видим следующую картину:
Открываем спутник, открываем наш план местности и начинаем брутить 318 точек на карте. Спустя недолгое время находим точку в городе Фукуока на Кюсю:
Очень похоже! Смотрим Google View:
Итоговый ответ: 33.61901370153112, 130.42091864402323
На весь этот процесс ушло часа ~2.5, что в общем то достаточно быстро