2015-06-05 5 views
0

У меня есть файл json, содержащий 200000 точек координат в формате geojson, и я хочу сгенерировать тепловую карту этих координат. У меня есть две идеи для этого, но у меня есть проблемы с обеими идеями:Как создать тепловую карту на основе json-файла

  1. использовать карту google -> слой тепловой карты. Я планирую написать html-файл, как показано на https://developers.google.com/maps/documentation/javascript/examples/layer-heatmap , однако я не знаю, как поместить координаты json-файла в пакет google.maps.LatLng(), любую идею?

  2. использовать Google Fusion Table. Однако, кажется, что текстовый файл с разделителями (.csv, .tsv или .txt) и файл языка разметки Keyhole (.kml) необходимы, верно?

Я не знаю, есть ли другие хорошие способы создания карты тепла. Любая хорошая идея?

ответ

0

Есть две причины, по которым вам следует перейти на вариант №1.

а) Сериализация точек данных GeoJSON в GoogleMap-совместимый формат LatLng относительно легче, чем вариант # 2. Вы даже можете загружать данные GeoJSON, анализировать его на координаты GoogleMap и рисовать на карте без необходимости конвертировать тип файла.

б) Если вы выбрали вариант 2, вам обязательно нужно написать скрипт, который преобразует GeoJSON файл с разделителями-запятыми (или любой другой символ) текстового файла. Когда у вас есть новые данные GeoJSON, вам нужно будет его снова преобразовать. Это не сэкономит ваше время.

Так скажем, вы выбрали вариант # 1

Вы можете просто добавить тег сценария, который ссылается на файл данных GeoJSON так:

<script type="text/javascript" src="data.json"></script> 

Затем разобрать его в JSON формат с вашим кодом JavaScript следующим образом:

var geoData = JSON.parse(data); 

Тогда вам понадобится анализировать эти данные GeoJSON в массив LAT-LNG координаты:

var coords = geoData.map(function mapToLatLng(c){ 
    return new google.maps.LatLng(c.geometry.coordinates[0], c.geometry.coordinates[1]) 
}); 

С помощью этого кода выше, вы должны получить coords, который несет все Google Map широта-долгота готова для рендеринга в Тепловая карта.

Оказывать эти точки, вы можете попробовать:

heatmap = new google.maps.visualization.HeatmapLayer({ 
    data: new google.maps.MVCArray(coords) 
}); 
heatmap.setMap(map); 
+0

BTW, приведенный выше пример относится к 'data.json' в качестве файла входных данных GeoJSON. –

+0

Большое спасибо за ваш ответ! Я новичок в таких вещах, я хочу спросить: в , если "data.json" в src = "data.json" be путь к файлу? Или я просто сохраняю файл в той же папке, где я сохраняю html-скрипт. – gladys0313

+0

Я просто использую коды на https://developers.google.com/maps/documentation/javascript/examples/layer-heatmap, но изменяю TaxiData как вы сделайте в своем ответе, но он ничего не показывает .... Может быть, что-то не так с моим входным файлом? – gladys0313

0

Я не думаю, что GeoJSON является хорошим выбором для транспортировки такого количества данных (я бы даже не использовать его для 2000 наименований).

Давайте взглянем на один LatLng, (допустим, 5 десятичных знаков): , чтобы просто переносить необходимые данные через JSON, вам понадобится, например,:

//17 bytes, about 3.5 MB for 200000 points 
[9.12345,5.43219] 

в GeoJSON:

//95 bytes, about 18 MB for 200000 items 
{"type":"Feature","geometry":{"type": "Point","coordinates":[5.43219,9.12345]},"properties":{}} 

Я предполагаю, что я не должен ничего говорить ....

Основная проблема с № 1: (я не подумайте, что это рекомендуется для 200000 пунктов, независимо от того, какой формат вы выберете): Поскольку вы не можете транспортировать google.maps.LatLng через JSON, вам необходимо предварительно обработать JSON, чтобы создать массив с LatLngs (потребуется некоторое время для 200000 очков)

Я думаю, что № 2 - единственный вариант, о котором вы должны думать о.

Вы можете настроить сценарий, макрос и т. Д., Который анализирует геояйон, когда он статичен, и загружает его в FusionTable.

Когда данные не являются статическими, вы можете использовать скрипт serveride, который автоматически загружает/обновляет данные.

KML не требуется для точек, вы можете просто использовать CSV (lat и lng могут храниться в одном поле, разделенные запятой) или в отдельных полях.

Смежные вопросы