"Стырил" карты у гугла - как их опубликовать в MapServer?

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
Camarero
Новоприбывший
Сообщения: 2
Зарегистрирован: 02 июн 2008, 15:43
Репутация: 0

"Стырил" карты у гугла - как их опубликовать в MapServer?

Сообщение Camarero » 18 июн 2008, 09:02

"Стырил" карты у гугла (в растре, естественно) - лежат в файлах *.tif + соответствующие файлы *.tfw.

Далее я сделал WMS сервис в MAPServer'e:

Код: Выделить всё

MAP
   IMAGETYPE PNG24
   EXTENT ##.759277 ##.338823 ##.591400 ##.822198180
   SIZE 400 300
   SHAPEPATH "/google/qwerty/"

   LAYER
      NAME "fcuk"
      TILEINDEX "fcuk.shp"
      TILEITEM "Location"
      TYPE RASTER
      STATUS ON

   END
END
Проблема - при просмотре данной карты в браузере (подцепляя библиотеку OpenLayers) изображение кажется "приплюснутым".

Вопрос - где и какие указать мне проекции?

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: "Стырил" карты у гугла - как их опубликовать в MapServer?

Сообщение KolesovDmitry » 19 июн 2008, 08:44

Camarero писал(а):"Стырил" карты у гугла ... лежат в файлах *.tif + соответствующие файлы *.tfw.

Далее я сделал WMS сервис в MAPServer'e:

Код: Выделить всё

MAP
   IMAGETYPE PNG24
   EXTENT ##.759277 ##.338823 ##.591400 ##.822198180
   SIZE 400 300
   SHAPEPATH "/google/qwerty/"

   LAYER
      NAME "fcuk"
      TILEINDEX "fcuk.shp"
      TILEITEM "Location"
      TYPE RASTER
      STATUS ON

   END
END
Проблема - при просмотре данной карты ... изображение кажется "приплюснутым".

Вопрос - где и какие указать мне проекции?
Вообще, в библиотеке proj (которая используется в т.ч. и в MapServer), среди описаний параметров проекций есть такая запись (конец файла esri.extra):

Код: Выделить всё

#
#  Chris' funny epsgish code for the google mercator
#
<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs <>
И я, когда мне нужно было складывать на Гугл мои данные, использовал именно эту проекцию (указывал ее при создании карты в OpenLayers). Все ложилось как надо и карта была как у Гугла, без искажений. Поэтому, если в процессе "стыривания" вы не изменили проекцию, - стоит попробовать указать в параметрах карты:

Код: Выделить всё

PROJECTION
  "init=esri.extra:900913"
END
Предварительно только убедитесь, что среди файлов с описаниями проекций в вашем proj есть запись с кодом 900913 :)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Сообщение Максим Дубинин » 01 июл 2008, 18:18

полезная информация, с тем же сейчас мучаюсь, можно чуть-чуть поподробнее?
указывал ее при создании карты в OpenLayers
стоит попробовать указать в параметрах карты
Так это указывается все-таки в OL или map-файле?

Кроме раздела PROJECTION карты вцелом это больше нигде не надо указывать?
пристегивайтесь, турбулентность прямо по курсу

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Сообщение KolesovDmitry » 02 июл 2008, 13:35

Лучше плясать от задачи. Задачу опишу свою (поскольку хорошо в ней разбираюсь), а не ту, что требуется решить. Итак, у меня была задача
1) Взять гугловские космоснимки не "стыреные"-кешированные, а просто закачивать их через интернет, как и задумывалось гуглом.
2) Положить на гугловскую карту слои собственного сочинения.
3) Проделать это все в связке MapServer-OpenLayers.

В качестве илюстрации приведу куски кода.

При помощи MapServer создаем WMS сервер, который может выдавать данные в нескольких проекциях, в т.ч. и в проекции "Google-Mercator", код 900913 (см. предыдущий пост).

Содержимое map-файла:

Код: Выделить всё

MAP
  NAME "Google-Mercator"
  STATUS ON
  IMAGETYPE GIF
  # EXTENTпокрывает территорию России (приблизительно):
  #EXTENT 10 20 180 85 # границы для  long / lat WGS84 (epsg:4326)
  EXTENT 3422527.99 8252178.77 6443803.23 6617604.12 # границы для Google-Mercator (900913)

  ... # описание SIZE, SHAPEPATH, LEGEND и др.

  PROJECTION
    "init=epsg:900913"
  END

  WEB
    #не имеющие отношения к делу параметры заменяю на многоточия:
    TEMPLATE  '...'
    IMAGEPATH '...'
    IMAGEURL  '...'
    EMPTY 	'...'
    METADATA
      wms_title "Google-Mercator"
      wms_abstract "Пример использования Google-Mercator"
      wms_onlineresource "http://...адрес.../mapserv?map=...имя map-файла...&"
      wms_getfeatureinfo "http://...адрес.../mapserv?map=...имя map-файла...&"
      wms_featureinfoformat   "text/html"
      wms_feature_info_mime_type "text/html"
      wms_encoding "utf-8"
      
      # перечисляем проекции, в которых можно будет получить картоматериалы от MapServer:
      wms_srs "EPSG:4326 epsg:53004 epsg:900913" 
    END
  END
  
# Перечисляем слои карты:
  LAYER
    NAME "..."
    ...
    PROJECTION
      # Исходная проекция, в которой хранятся данные для этого слоя
      # При необходимости MapServer произведет перепроецирование в нужную:
      "init=epsg:4326" 
    END
    METADATA
      wms_title "..."
      wms_abstract "..."
      wms_include_items "all"

      # В каких проекциях предоставляется данный слой WMS-сервером:
      wms_srs "EPSG:4326 epsg:900913" 
    END
    CLASS
      ...
    END
  END
  ...
END 
Далее. При помощи OpenLayers создаем карту из двух слоев - один слой будет содержать гугловские снимки, второй слой будет использовать созданную нами WMS-службу.

HTML:

Код: Выделить всё

<html>
<head>
  <title>Пример Google-Mercator</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script src="lib/OpenLayers.js"></script>
</head>
<body>
      <div style="width:100%; height:100%" id="map"></div>
      <!-- Будем использовать гугловский ключ для "localhost" key="ABQIAAAAnGqQS3WKXDlSWL9JihYqnBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRTAbebDcXrn6UgtfGiCp-pX-mUHA" -->
      <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTS6gjckBmeABOGXIUiOiZObZESPg'></script>
      
  <script defer="defer" type="text/javascript">


// ************ Создаем карту ********************

        var options = {
                            numZoomLevels: 18,
                            minResolution: "auto",
                            minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
                            maxResolution: "auto",
                            maxExtent: new OpenLayers.Bounds(1113194.91, 2273030.93, 20037508.34, 19971868.88),
                            projection: "epsg:900913", // та самая проекция - Google-Mercator
                            units: "m"
                          };

        var map = new OpenLayers.Map('map',options);
        

// ***************** Описываем слои: ************************        
        var mapservLayer =  new OpenLayers.Layer.WMS("Слой MapServer", 'http://...адрес...', {map: '...путь к карте...', layers: '...имя слоя1,имя слоя2,...',format: 'gif',transparent: true},{singleTile: true});
	
	var satelliteGoogle = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_SATELLITE_MAP, 'sphericalMercator': true} );

        map.addLayers([satelliteGoogle,mapservLayer]);

// ************* Описываем инструменты на карте: *************
        
        var ctrl={
            PnZm: new OpenLayers.Control.PanZoom(),
            ...
            PrmLnk: new OpenLayers.Control.Permalink()
        };
        for (var key in ctrl){
          map.addControl(ctrl[key])
        }
                

// ******** Задаем начальное положение карты для показа: *******
	if (!map.getCenter()) map.zoomToMaxExtent();
  </script>
</body>
</html>

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Сообщение Максим Дубинин » 02 июл 2008, 19:13

ага, спасибо! я разобрался, чуть попозже хочу написать статью на сайт и можно будет еще пообсуждать.
пристегивайтесь, турбулентность прямо по курсу

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 26 гостей