You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#1 2012-06-15 09:19:49

deeq
Member
Registered: 2012-06-15
Posts: 2

Openlayers ja Maanmittauslaitoksen WMS kartat

Osaisiko joku auttaa, kun yritän näyttää Maanmittauslaitoksen WMS karttoja Openlayers:in kautta, niin kartta näyttää omituiselta, jotenkin venyneeltä, malli alhaalla. WMS palvelimen tiedot näkyvät tästä linkistä. Tämä asia ei varsinaisesti koske Openstreetmap:sia mutta en oikein tiedä mistä muualtakaan kysyisi apua.

156p9v4.jpg
2e0jqrb.jpg

Itse Openlayers HTML näyttää tältä:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <link rel="stylesheet" href="http://openlayers.org/dev/theme/default/style.css" type="text/css">
    <link rel="stylesheet" href="http://openlayers.org/dev/examples/style.css" type="text/css">
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    <script type="text/javascript">
        var lon = 24.93;
        var lat = 60.17;
        var zoom = 12;
        var map, layer;

        function init(){
            map = new OpenLayers.Map( 'map' );
            layer = new OpenLayers.Layer.WMS( "MML",
                    "http://tiles.kartat.kapsi.fi/peruskartta?", {layers: 'peruskartta'} );
            map.addLayer(layer);

            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
            map.addControl( new OpenLayers.Control.LayerSwitcher() );
        }
    </script>
  </head>
  <body onload="init()">

    <div id="map" class="smallmap"></div>

  </body>
</html>

Offline

#2 2012-06-15 09:53:41

JRA
Member
Registered: 2007-12-17
Posts: 677

Re: Openlayers ja Maanmittauslaitoksen WMS kartat

Karttasi käyttää nyt oletusprojektiota joka on WGS84, mutta se täytyisi saada käyttämään esimerkiksi sitä samaa EPSG:3067:aa, jossa MML:n aineistot ja palvelut luonnostaan ovat.  Minä en osaa OpenLayer-sovellusten tekemistä, mutta tässä on erään valmiin sovelluksen koodista pätkä, toivottavasti se auttaa eteenpäin.

var mapOptions = {
resolutions: [8192.0, 4096.0, 2048.0, 1024.0, 512.0, 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5, 0.25],
projection: new OpenLayers.Projection('EPSG:3067'),
maxExtent: new OpenLayers.Bounds(-548576.0,6291456.0,1548576.0,8388608.0),
units: "meters",
controls: []

Jaa, tuo palvelin tukee vain näitä projektioita:
<CRS>EPSG:4326</CRS>
<CRS>EPSG:900913</CRS>
<CRS>EPSG:3857</CRS>

3857 tarkoittaa samaa kuin 900913; käytä virallista 3857-koodia, tuon jälkimmäisen voisi jo unohtaa.  Extents-ja resolutions-arvot täytyy sovittaa Suomen tilanteeseen.  Nämä on otettu Geoserverin demosovelluksesta ja ne kattavat koko maailman
var mapOptions = {
resolutions: [156543.03390625, 78271.516953125, 39135.7584765625, 19567.87923828125, 9783.939619140625, 4891.9698095703125, 2445.9849047851562, 1222.9924523925781, 611.4962261962891, 305.74811309814453, 152.87405654907226, 76.43702827453613, 38.218514137268066, 19.109257068634033, 9.554628534317017, 4.777314267158508, 2.388657133579254, 1.194328566789627, 0.5971642833948135, 0.29858214169740677, 0.14929107084870338, 0.07464553542435169, 0.037322767712175846, 0.018661383856087923, 0.009330691928043961, 0.004665345964021981],
projection: new OpenLayers.Projection('EPSG:3857'),
maxExtent: new OpenLayers.Bounds(-2.003750834E7,-2.003750834E7,2.003750834E7,2.003750834E7),
units: "meters",

Koska tuo Kapsi-palvelin on tavallinen WMS, niin kannattaa todennäköisesti laittaa OpenLayers käyttämään SingleTile-systeemiä
http://openlayers.org/dev/examples/single-tile.html
http://openlayers.org/dev/examples/single-tile.js


Kapsi-palvelimen ylläpitäjä voisi harkita EPSG:3067-tuen lisäämistä tuettujen projektioiden listalle.
Samoin tämän rivin lisäämistä mapfilen WEB-METADATA -osioon
"wms_bbox_extended" "true"
Ja noista neljästä peruskarttatasosta kannattaisi ehkä rakentaa mittakaavariippuvainen GROUP

Last edited by JRA (2012-06-15 10:22:06)

Offline

#3 2012-06-15 13:18:24

deeq
Member
Registered: 2012-06-15
Posts: 2

Re: Openlayers ja Maanmittauslaitoksen WMS kartat

En vaan saa toimimaan vaikka mitä olen koittanut.

Jos vain pystyt/viitsit laittaa vähän lisää jeesiä niin olisin kiitollinen. En oikein ymmärrä miten nuo resolutions, bounds ja projection pitäisi laittaa.

Offline

#4 2012-06-15 14:17:02

JRA
Member
Registered: 2007-12-17
Posts: 677

Re: Openlayers ja Maanmittauslaitoksen WMS kartat

Kuten sanoin, minä en osaa tätä itse.  Tämä näyttää kuitenkin soveltamiskelpoiselta

http://openlayers.org/dev/examples/web-mercator.html
http://openlayers.org/dev/examples/web-mercator.js

Kokeile hieman muutettuna
projection: new OpenLayers.Projection("EPSG:3857"),

ja säädä kartan keskusta jonnekin Suomeen
map.setCenter(new OpenLayers.LonLat(-10723197, 4500612), 3);

Suomen ulottuvuudet tuossa järjestelmässä ovan karkeasti
bbox(1971214.6240841479,8192383.186281693,4139048.7209790954,1.11467180683306E7)

ja joku vaan piste jossain Oulun korkeudella on 3015476 9560497

Offline

#5 2012-06-16 08:08:03

Manu S
Member
Registered: 2011-07-07
Posts: 19

Re: Openlayers ja Maanmittauslaitoksen WMS kartat

Minäkään väitä OpenLayersiä osaavani käyttää mutta tällä koodilla näyttää ainakin kotikaupunki ihan somalta.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="www.w3.org/1999/xhtml" xmlns:fb="www.facebook.com/2008/fbml" xmlns:og="http://opengraphprotocol.org/schema/">
  <head>
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    <script src='http://openstreetmap.org/openlayers/OpenStreetMap.js'></script>
<script type="text/javascript">
  var lon= 28.88;
  var lat= 61.86;
  var zoom= 13;
  var lonLat;
  var map;

  function init() {
    map = new OpenLayers.Map("map", {
      maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
      maxResolution:156543.0399,
      units:'meters',
      projection: new OpenLayers.Projection("EPSG:900913"),
      displayProjection: new OpenLayers.Projection("EPSG:4326")
    }  );
    layer = new OpenLayers.Layer.WMS( "MML",
                    "http://tiles.kartat.kapsi.fi/peruskartta?", {layers: 'peruskartta'} );
    map.addLayer(layer);

    lonLat = new OpenLayers.LonLat(lon, lat).transform( new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
    map.setCenter (lonLat, zoom);
  }
</script>

  </head>
<body onload="init()">
<div>
<div style="width: 1700px; height:500px; border-style:solid; border-width:1px; border-color:lightgrey;" id="map">
</div>
 </body>
</html>

Offline

#6 2012-06-16 19:54:56

JRA
Member
Registered: 2007-12-17
Posts: 677

Re: Openlayers ja Maanmittauslaitoksen WMS kartat

Lisää vaihtoehtoja, Mapserver luo tällaisia OpenLayer-demoja:
A) EPSG:900913

<html>
<head>
  <title>MapServer Simple Viewer</title>
    <script type="text/javascript" src="http://www.mapserver.org/lib/OpenLayers-ms60.js"></script>
    </head>
    <body>
      <div style="width:459; height:353" id="map"></div>
      <script defer="defer" type="text/javascript">
        var map = new OpenLayers.Map('map',
                                     {maxExtent: new OpenLayers.Bounds(151137.910765,8006219.900850,4172287.089235,11096710.099150),
                                      maxResolution: 8779.801700});
        var mslayer = new OpenLayers.Layer.WMS('MapServer Simple Viewer',
                                   'http://188.64.1.61/cgi-bin/osm-mapserver_i?',
                                   {layers: 'borders',
                                   bbox: '151137.910765,8006219.900850,4172287.089235,11096710.099150',
                                   width: 459, height: 353, version: '1.1.1'},                                   {singleTile: "true", ratio:1, projection: 'EPSG:900913'});
;
        map.addLayer(mslayer);
        map.zoomToMaxExtent();
      </script>
</body>
</html>

B) EPSG:3067

<html>
<head>
  <title>MapServer Simple Viewer</title>
    <script type="text/javascript" src="http://www.mapserver.org/lib/OpenLayers-ms60.js"></script>
    </head>
    <body>
      <div style="width:459; height:353" id="map"></div>
      <script defer="defer" type="text/javascript">
        var map = new OpenLayers.Map('map',
                                     {maxExtent: new OpenLayers.Bounds(-609732.089235,6539744.900850,997757.089235,7775195.099150),
                                      maxResolution: 3509.801700});
        var mslayer = new OpenLayers.Layer.WMS('MapServer Simple Viewer',
                                   'http://188.64.1.61/cgi-bin/osm-mapserver_i?',
                                   {layers: 'borders',
                                   bbox: '-609732.089235,6539744.900850,997757.089235,7775195.099150',
                                   width: 459, height: 353, version: '1.1.1'},                                   {singleTile: "true", ratio:1, projection: 'EPSG:3067'});
;
        map.addLayer(mslayer);
        map.zoomToMaxExtent();
      </script>
</body>
</html>

Offline

Board footer

Powered by FluxBB