WMS, опубликованный в Google Maps Engine, не отображается
Я новичок в JS и API Карт Google... Я приобрел некоторый код JS, чтобы, надеюсь, отобразить WMS, созданный в Google Maps Engine.
Я застрял с приведенным ниже кодом, поскольку WMS, кажется, ничего не отображает.
Где я заблудился, это baseURL для Google Maps Engine WMS и переменная 'Layers', в которой я использовал ID актива для этой конкретной карты. Я совершенно потерян и буду признателен за любую помощь.
function WMSGetTileUrl1(tile, zoom) {
var projection = window.mapA.getProjection();
var zpow = Math.pow(2, zoom);
var ul = new google.maps.Point(tile.x * 256.0 / zpow, (tile.y + 1) * 256.0 / zpow);
var lr = new google.maps.Point((tile.x + 1) * 256.0 / zpow, (tile.y) * 256.0 / zpow);
var ulw = projection.fromPointToLatLng(ul);
var lrw = projection.fromPointToLatLng(lr);
//The user will enter the address to the public WMS layer here. The data must be in WGS84
var baseURL = "https://mapsengine.google.com/17306057122701807517-17234028967417318364-4/wms/?";
var version = "1.1.1";
var request = "GetMap";
var format = "image/jpeg"; //type of image returned or image/jpeg
//The layer ID. Can be found when using the layers properties tool in ArcMap
var layers = "17306057122701807517-17234028967417318364";
var srs = "EPSG:4326"; //projection to display. This is the projection of google map. Don't change unless you know what you are doing.
var bbox = ulw.lng() + "," + ulw.lat() + "," + lrw.lng() + "," + lrw.lat();
//the size of the tile, must be 256x256
var width = "256";
var height = "256";
var styles = "default";
//Establish the baseURL.
var url = baseURL + "version=" + version + "&request=" + request + "&Layers=" + layers + "&Styles=" + styles + "&SRS=" + srs + "&BBOX=" + bbox + "&width=" + width + "&height=" + height + "&format=" + format;
return url;
}
1 ответ
У вас 2 проблемы с вашим кодом. Первое очевидно. Вы используете свой идентификатор карты в качестве идентификатора слоя. Это две разные вещи. В GME перейдите на экран сведений о слое, нажмите "Ссылки доступа" и выберите идентификатор слоя. Это начнется с 17306057122701807517- но вторая половина будет другой. Кроме того, не забудьте добавить -4 до конца. Это указывает на то, что это опубликованный слой, а не слой предварительного просмотра. Подсказка: если вы установите -2, вы увидите предварительную версию, например, обновленную, но неопубликованную.
Теперь для вашей второй проблемы, которая является более тонкой. Код EPSG, использованный в вышеприведенном примере, - это 4326, который является WGS84, а Карты Google публикуются в Google Web Mercator, который называется EPSG:900913. Вы не можете просто поменять код EPSG, так как система координат отличается. Это действительно означает, что если вы не перепишите код для создания ограничивающего прямоугольника, вы не сможете использовать этот javascript.
Я бы порекомендовал использовать код с http://www.sigacts.com/html5/google-maps-api-with-wms-overlay/ который использует правильную систему координат. В примере фактически используется карта MapsEngine. Просто скачайте код и измените vars.js в соответствии с вашими потребностями, и вы уедете. Я скачал и проверил, что он работает с моей собственной картой, так что у вас не должно быть проблем. Подсказка: код немного старый и ссылается на earthbuilder.google.com, который является старым названием MapsEngine. Убедитесь, что вы изменили как имя домена, так и идентификатор карты.
РЕДАКТИРОВАТЬ: WMS это неуклюжий способ передачи контента на карту. Вы должны стремиться использовать MapsEngineLayer, который является частью API Карт Google, или для более детальных вещей вы можете использовать API Maps Engine, который позволяет выполнять фильтрацию атрибутов, пространственные запросы и т. Д.