Обзор
Узнайте, как импортировать данные GeoJSON из локального или удаленного источника и отображать их на карте. В этом руководстве карта ниже используется для иллюстрации различных методов импорта данных в карты.
В разделе ниже показан весь код, необходимый для создания карты в этом руководстве.
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 2, center: new google.maps.LatLng(2.8, -187.3), mapTypeId: "terrain", }); // Create a <script> tag and set the USGS URL as the source. const script = document.createElement("script"); // This example uses a local copy of the GeoJSON stored at // http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp script.src = "https://developers.google.com/maps/documentation/javascript/examples/json/earthquake_GeoJSONP.js"; document.getElementsByTagName("head")[0].appendChild(script); } // Loop through the results array and place a marker for each // set of coordinates. const eqfeed_callback = function (results: any) { for (let i = 0; i < results.features.length; i++) { const coords = results.features[i].geometry.coordinates; const latLng = new google.maps.LatLng(coords[1], coords[0]); new google.maps.Marker({ position: latLng, map: map, }); } }; declare global { interface Window { initMap: () => void; eqfeed_callback: (results: any) => void; } } window.initMap = initMap; window.eqfeed_callback = eqfeed_callback;
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 2, center: new google.maps.LatLng(2.8, -187.3), mapTypeId: "terrain", }); // Create a <script> tag and set the USGS URL as the source. const script = document.createElement("script"); // This example uses a local copy of the GeoJSON stored at // http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp script.src = "https://developers.google.com/maps/documentation/javascript/examples/json/earthquake_GeoJSONP.js"; document.getElementsByTagName("head")[0].appendChild(script); } // Loop through the results array and place a marker for each // set of coordinates. const eqfeed_callback = function (results) { for (let i = 0; i < results.features.length; i++) { const coords = results.features[i].geometry.coordinates; const latLng = new google.maps.LatLng(coords[1], coords[0]); new google.maps.Marker({ position: latLng, map: map, }); } }; window.initMap = initMap; window.eqfeed_callback = eqfeed_callback;
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ #map { height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
<html> <head> <title>Earthquake Markers</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <div id="map"></div> <!-- The `defer` attribute causes the script to execute after the full HTML document has been parsed. For non-blocking uses, avoiding race conditions, and consistent behavior across browsers, consider loading using Promises. See https://developers.google.com/maps/documentation/javascript/load-maps-js-api for more information. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly" defer ></script> </body> </html>
Попробуйте образец
Загрузка данных
В этом разделе показано, как загружать данные либо из того же домена, что и ваше приложение Maps JavaScript API, либо из другого.
Загрузка данных из того же домена
Уровень данных Google Maps предоставляет контейнер для произвольных геопространственных данных (включая GeoJSON). Если ваши данные находятся в файле, размещенном в том же домене, что и приложение Maps JavaScript API, вы можете загрузить их с помощью метода map.data.loadGeoJson()
. Файл должен находиться в том же домене, но вы можете разместить его в другом поддомене. Например, вы можете сделать запрос на files.example.com с сайта www.example.com .
map.data.loadGeoJson('data.json');
Загрузка данных между доменами
Вы также можете запросить данные из домена, отличного от вашего собственного, если конфигурация домена допускает такой запрос. Стандарт для этого разрешения называется общим доступом к ресурсам между источниками (CORS). Если в домене разрешены междоменные запросы, заголовок ответа должен включать следующее объявление:
Access-Control-Allow-Origin: *
Используйте инструменты разработчика Chrome (DevTools), чтобы узнать, включен ли в домене CORS.
Загрузка данных из такого домена аналогична загрузке JSON из того же домена:
map.data.loadGeoJson('http://www.CORS-ENABLED-SITE.com/data.json');
Запрос JSONP
Чтобы использовать этот метод, целевой домен должен поддерживать запросы JSONP .
Чтобы запросить JSONP, используйте createElement()
чтобы добавить тег script
в заголовок вашего документа.
var script = document.createElement('script');
script.src = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp';
document.getElementsByTagName('head')[0].appendChild(script);
Когда скрипт запускается, целевой домен передает данные в качестве аргумента другому скрипту, обычно называемому callback()
. Целевой домен определяет имя сценария обратного вызова, которое является первым именем на странице при загрузке целевого URL-адреса в браузер.
Например, загрузите http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp в окне браузера, чтобы отобразить имя обратного вызова как eqfeed_callback
.
Вы должны определить сценарий обратного вызова в своем коде:
function eqfeed_callback(response) {
map.data.addGeoJson(response);
}
Используйте метод addGeoJson()
, чтобы разместить проанализированные данные GeoJSON на карте.
Стилизация данных
Вы можете изменить внешний вид своих данных, добавив данные GeoJSON в объект карты. Прочтите руководство разработчика для получения дополнительной информации о стилизации данных .
Узнать больше
- GeoJSON — это широко используемый открытый формат для кодирования географических данных, основанный на JSON (нотация объектов JavaScript). Инструменты и методы JavaScript, разработанные для данных JSON, также работают с GeoJSON. Прочтите руководство разработчика для получения дополнительной информации.
- JSONP означает дополненный JSON. Это метод связи, используемый в программах JavaScript, запускаемых в веб-браузерах, для запроса данных с сервера в другом домене.