WMS как одно изображение в Google Maps v3 - PullRequest
1 голос
/ 21 июня 2011

Я следую коду на http://www.gisdoctor.com/v3/mapserver.html, чтобы наложить WMS как изображение в Картах Google с помощью API v3.Код js по приведенной выше ссылке выглядит следующим образом:

"WMSGetTileUrl" : function(tile, zoom) {
    var projection = map.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);

    var bbox = ulw.lng() + "," + ulw.lat() + "," + lrw.lng() + "," + lrw.lat();

    return url = "http://url/to/mapserver?" + 
        "version=1.1.1&" + 
        "request=GetMap&" + 
        "Styles=default&" + 
        "SRS=EPSG:4326&" + 
        "Layers=wmsLayers&" + 
        "BBOX=" + bbox + "&" + 
        "width=256&" + 
        "height=256&" + 
        "format=image/png&" + 
        "TRANSPARENT=TRUE";
},

"addWmsLayer" : function() {

    /*
    Creating the WMS layer options. This code creates the Google 
    imagemaptype options for each wms layer. In the options the function 
    that calls the individual wms layer is set 
    */
    var wmsOptions = {
        alt: "MapServer Layers",
        getTileUrl: WMSGetTileUrl,
        isPng: false,
        maxZoom: 17,
        minZoom: 1,
        name: "MapServer Layer",
        tileSize: new google.maps.Size(256, 256)
    };

    /*
    Creating the object to create the ImageMapType that will call the WMS 
    Layer Options. 
    */
    wmsMapType = new google.maps.ImageMapType(wmsOptions);
    map.overlayMapTypes.insertAt(0, wmsMapType);
},

Все работает нормально, но, конечно, WMS возвращается в виде плиток 256 x 256.Никаких сюрпризов, потому что это то, что я просил.Тем не менее, после обсуждения на http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/c22837333f9a1812/d410a2a453025b38 кажется, что мне лучше было бы запросить несвязанное (одиночное) изображение с mapserver.Это будет облагать налогом мой сервер меньше.В любом случае я хотел бы поэкспериментировать с одним изображением, но я не могу правильно построить запрос для него.

В частности, я изменил размер плитки на что-то большое;например, я пробовал 1024 х 1024 плитки.Я получил меньше плиток, но возвращенные изображения не соответствовали границам базового слоя Карт Google.

Я бы не хотел указывать размер плитки вообще.Вместо этого я должен динамически определить размер плитки, скажем, на 256 пикселей больше, чем текущий размер карты.Таким образом, будет возвращено одно изображение, независимо от размера карты.Кроме того, бесшовная панорама будет реализована с помощью дополнительных 256 пикселей по краям карты.

Предложения?

Ответы [ 2 ]

0 голосов
/ 27 мая 2014

См. тот же вопрос Я только что ответил за кого-то другого.Вероятно, это будет ваша проекция.EPSG: 4326 - это неправильная проекция для Карт Google.Изменение проекции означает, что вам необходимо изменить способ вычисления координат и ссылки на них.

0 голосов
/ 30 ноября 2011

1) у меня работает - с 512 и 1024 тоже. Вам просто нужно внести изменения во всех соответствующих местах (вычисление угловых координат, настройка tileSize, настройка ширины и высоты параметров WMS). Любая настройка плитки должна быть возможной, если вы просто обрабатываете ее правильно во всех местах кода.

2) Я думаю, что вы пытаетесь оптимизировать в неправильном месте. Плитки 256x256 были созданы по причине. Помните, что Google кэширует тайлы, поэтому при использовании больших тайлов решение может быть намного медленнее. Также карта будет загружаться быстрее для пользователя.

3) Концепция плитки является правильной вещью и должна быть сохранена. Такие вещи, как получение всей карты, не сработают - представьте себе панорамирование карты. НЕ пытайтесь изобретать велосипед и придерживаться текущей концепции плитки Google - она ​​оптимизирована для этого типа приложений. Если вам нужно получить карту в виде одного изображения, вы можете использовать статические Google Maps API .

...