Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>OpenLayers Map</title>
- <!-- The gmaps script -->
- <script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=false"></script>
- <!-- OpenLayers base script -->
- <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
- <script type="text/javascript">
- //<![CDATA[
- var map;
- var mercator = new OpenLayers.Projection("EPSG:900913");
- var geographic = new OpenLayers.Projection("EPSG:4326");
- var directionsService;
- var markers;
- var routes;
- var fromAddress;
- var toAddress;
- var numClicks=0;
- var line_style = {
- strokeColor: "#0000EE",
- strokeOpacity: 0.7,
- strokeWidth: 4,
- pointRadius: 6,
- pointerEvents: "visiblePainted"
- };
- OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
- defaultHandlerOptions: {
- 'single': true,
- 'double': false,
- 'pixelTolerance': 0,
- 'stopSingle': false,
- 'stopDouble': false
- },
- initialize: function(options) {
- this.handlerOptions = OpenLayers.Util.extend({}, this.defaultHandlerOptions);
- OpenLayers.Control.prototype.initialize.apply(this, arguments);
- this.handler = new OpenLayers.Handler.Click(this, {'click': this.trigger}, this.handlerOptions);
- },
- trigger: function(e) {
- var lonlat = map.getLonLatFromViewPortPx(e.xy);
- numClicks++;
- lonlat.transform(mercator, geographic);
- getLocationData(lonlat.lon, lonlat.lat);
- }
- });
- function addMarker(position, name)
- {
- // Marker:
- var feature = new OpenLayers.Feature(markers, position);
- feature.closeBox = true;
- feature.popupClass = OpenLayers.Popup.FramedCloud;
- feature.data.popupContentHTML = name;
- feature.data.overflow = "auto";
- var marker = feature.createMarker();
- var markerClick = function (evt) {
- if (this.popup == null) {
- this.popup = this.createPopup(this.closeBox);
- map.addPopup(this.popup);
- this.popup.show();
- } else {
- this.popup.toggle();
- }
- currentPopup = this.popup;
- OpenLayers.Event.stop(evt);
- };
- marker.events.register("mousedown", feature, markerClick);
- markers.addMarker(marker);
- }
- function getLocationData(glon, glat)
- {
- geocoder = new google.maps.Geocoder();
- latlng = new google.maps.LatLng(glat, glon, true);
- geocoder.geocode({'latLng': latlng}, function(results, status)
- {
- if (status == google.maps.GeocoderStatus.OK)
- {
- ///* Obsługa */
- alert(results[0].formatted_address);
- if (numClicks==1) {
- fromAddress = results[0].formatted_address;
- markers.clearMarkers();
- addMarker(new OpenLayers.LonLat(glon, glat).transform(geographic, mercator), results[0].formatted_address);
- }
- else if (numClicks==2) {
- /* Marker końcowy */
- toAddress = results[0].formatted_address;
- addMarker(new OpenLayers.LonLat(glon, glat).transform(geographic, mercator), results[0].formatted_address);
- numClicks=0;
- directionsService.route( {origin: fromAddress,destination: toAddress,travelMode: google.maps.TravelMode.DRIVING},
- function(response, status){if (status == google.maps.DirectionsStatus.OK){getRoutePolyline(response);}});
- //
- } else {
- numClicks=0;
- }
- }
- else
- {
- alert('Geocode failure because of ' + status);
- }
- });
- }
- function getRoutePolyline(result)
- {
- var pointList = [];
- var vectorLayer=map.getLayersByName("Routes")[0];
- vectorLayer.removeAllFeatures();
- /* Konstrukcja polilinii */
- var i = 0;
- for(i=0;i<result.routes[0].legs[0].steps.length;i++)
- {
- var A = result.routes[0].legs[0].steps[i].end_point.A;
- var k = result.routes[0].legs[0].steps[i].end_point.k;
- var olpoint = new OpenLayers.Geometry.Point(A, k);
- olpoint.transform(geographic, mercator);
- pointList.push(olpoint);
- }
- lineFeature = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.LineString(pointList), null, line_style );
- vectorLayer.addFeatures(lineFeature);
- }
- function init()
- {
- var options = {
- projection: mercator,
- displayProjection: geographic,
- units: "m",
- maxResolution: 156543.0339,
- maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
- 20037508.34, 20037508.34)
- };
- map = new OpenLayers.Map('map', options);
- var osm = new OpenLayers.Layer.OSM();
- var gmap = new OpenLayers.Layer.Google("Google", {sphericalMercator:true});
- markers = new OpenLayers.Layer.Markers("points");
- routes = new OpenLayers.Layer.Vector("Routes");
- map.addLayers([osm, gmap]);
- map.addLayer(routes);
- map.addLayer(markers);
- directionsService = new google.maps.DirectionsService();
- map.addControl(new OpenLayers.Control.LayerSwitcher());
- map.addControl(new OpenLayers.Control.MousePosition());
- map.setCenter(new OpenLayers.LonLat(10.2, 48.9).transform(geographic, mercator), 5);
- // End Marker
- addMarker(new OpenLayers.LonLat(20, 50).transform(geographic, mercator), "Jestem Markerem.");
- var click = new OpenLayers.Control.Click();
- map.addControl(click);
- click.activate();
- }
- //]]>
- </script>
- </head>
- <body onload="init()">
- <div id="map"></div>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement