как увеличить карту OpenLayer в iphone? - PullRequest
1 голос
/ 16 августа 2011

Я создал приложение карты OpenLayer в iphone.поэтому я хочу получить доступ к его событиям с помощью функций iphone, то есть хочу перетащить карту OpenLayer с помощью сенсорных событий и увеличить с помощью события жеста iphone zoom.для вызова карты OpenLayer я реализовал один html-файл в веб-представлении. Он работает правильно, я получаю карту OpenLayer и события касания карты также теперь я хочу увеличить карту, как другие карты или изображения будут увеличены в iphone.для реализации функции масштабирования в карте OpenLayer в iphone ..

для вызова карты и событий касания у меня есть этот код в .html файле

   <!DOCTYPE html>
    <html>
      <head>
        <title>OpenLayers Tutorial - Basic Map Setup</title>
        <script src="http://openlayers.org/api/OpenLayers.js"></script>
        <script type="text/javascript">
        var map, baseLayer;
            function init(){
                map = new OpenLayers.Map('map');            
                baseLayer = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers:"basic"});
                map.addLayer(baseLayer);
                map.setCenter(new OpenLayers.LonLat(0,0),1);             
            }
        function touchHandler(event)
        {
       var touches = event.changedTouches,
       first = touches[0],
       type = "";
     switch(event.type)
       {
         case "touchstart": type = "mousedown"; break;
         case "touchmove":  type="mousemove"; break;
         case "touchend":   type="mouseup"; break;
         default: return;
     }
     var simulatedEvent = document.createEvent("MouseEvent");
        simulatedEvent.initMouseEvent(type, true, true, window, 1,
        first.screenX, first.screenY,
        first.clientX, first.clientY, false,
        false, false, false, 0/*left*/, null);
        first.target.dispatchEvent(simulatedEvent);
        event.preventDefault();
     }
    document.addEventListener("touchstart", touchHandler, true);
     document.addEventListener("touchmove", touchHandler, true);
     document.addEventListener("touchend", touchHandler, true);
     document.addEventListener("touchcancel", touchHandler, true);
        </script>
        <style>
        @media screen
        {
            #map{width: 300px; height:360px; border: 2px solid black;}
        }
        </style>
      </head>
      <body onload="init()">
        <h3>OpenLayers Tutorial - Basic Map Setup</h3>
        <div id="map"></div>
      </body>
    </html>

этот код работает правильно.

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Реализация этого самостоятельно будет болезненной. Возможно, вы захотите использовать версию 2.11 RC2 или транк, потому что тогда это станет действительно просто - все, что вам нужно сделать, это добавить элемент управления TouchNavigation, как показано в в этом примере :

function init() {
    map = new OpenLayers.Map({
        div: "map",
        theme: null,
        projection: new OpenLayers.Projection("EPSG:900913"),
        units: "m",
        numZoomLevels: 18,
        maxResolution: 156543.0339,
        maxExtent: new OpenLayers.Bounds(
            -20037508.34, -20037508.34, 20037508.34, 20037508.34
        ),
        controls: [
            new OpenLayers.Control.TouchNavigation({
                dragPanOptions: {
                    enableKinetic: true
                }
            }),
            new OpenLayers.Control.ZoomPanel()
        ],
        layers: [
            new OpenLayers.Layer.OSM("OpenStreetMap", null, {
                transitionEffect: 'resize'
            })
        ]
    });
    map.setCenter(new OpenLayers.LonLat(0, 0), 3);
}
0 голосов
/ 16 августа 2011

Предстоящая версия OpenLayers версии 2.11 будет поддерживать сенсорные события для панорамирования, масштабирования ... Смотри: http://dev.openlayers.org/examples/mobile.html

НТН,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...