Google Maps to Nokia Maps - Geocode

Retorna a posição (long/lat) de um determinado endereço.

Eventualmente o Google Maps pode apontar para uma posição diferente do Nokia Maps. Isso é causado por informações corretas em alguns mapas. Pela minha experiência, o Google Maps tende a ter mais erros nesse sentido do que o Nokia Maps

Tanto Nokia Maps quanto o Google Maps podem falhar em encontrar a posição correta ou retornar mais de uma posição para um endereço. Por isso é interessante que o endereço seja o mais específico possível. No caso do Nokia Maps ele tende a falhar se passarmos o nome "Brasil" ao invés de "Brazil"

Google Maps

 
var geocoder;
var map;
var infowindow = new google.maps.InfoWindow();
var marker;

function googleMaps()
{
  geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(-23.54972, -46.63548);
    var myOptions = {
      zoom:1,
      center: latlng,
      mapTypeId: 'roadmap'
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  
}

function codeLatLangGoogle(address){
 
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map, 
            position: results[0].geometry.location
        });
        map.setZoom(16);
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
 
}

Nokia Maps

 
var mapNokia;
var infoBubbles;
var position;
var searchCenter;
var resultSet;

function nokiaMaps()
{
  nokia.Settings.set( "appId", "_peU-uCkp-j8ovkzFGNU");
  nokia.Settings.set( "authenticationToken", "gBoUkAMoxoqIWfxWA5DuMQ");

  searchCenter = new nokia.maps.geo.Coordinate(23.54972, -46.63548);
  var mapContainer = document.getElementById("mapContainer");
   
  infoBubbles = new nokia.maps.map.component.InfoBubbles();

  mapNokia = new nokia.maps.map.Display(mapContainer, {
    center: [-23.54972, -46.63548],
    zoomLevel: 1,
    components: [infoBubbles,new nokia.maps.map.component.Behavior(),new nokia.maps.map.component.ZoomBar(), ]
  });
 
}

function codeLatLangNokiaMaps(address)
{ 
  nokia.places.search.manager.findPlaces({
    searchTerm :  address,
    onComplete:  processResults,
    searchCenter: searchCenter
  });
  
}

var processResults = function (data, requestStatus, requestId) {
  var i, len, locations, marker;
  
   // .findPlaces() for some reason returns "ok" (in lowercase), they are about to fix that TODO: check and remove toUC() if no longer needed
  if (requestStatus == "OK") {
    // The function findPlaces() and reverseGeoCode() of  return results in slightly different formats
    locations = data.results ? data.results.items : [data.location];
    // We check that at least one location has been found
    if (locations.length > 0) {
      // Remove results from previous search from the map
      if (resultSet) mapNokia.objects.remove(resultSet);
      // Convert all found locations into a set of markers
      resultSet = new nokia.maps.map.Container();
      
      marker = new nokia.maps.map.StandardMarker(locations[0].position, { text: '1' });
      resultSet.objects.add(marker);
      
      // Next we add the marker(s) to the map's object collection so they will be rendered onto the map
      mapNokia.objects.add(resultSet);
      // We zoom the map to a view that encapsulates all the markers into map's viewport
      mapNokia.zoomTo(resultSet.getBoundingBox(), false);

    } else { 
      alert("Your search produced no results!");
    }
  } else {
    alert("The search request failed");
  }
};

HTML

<!DOCTYPE html>
<html>
  <head>
    <title>GoogleMaps2NokiaMaps - Geocode</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="UTF-8">
    <style type="text/css">
      html, body {
       
        overflow:hidden;
      }     
      body {
        margin: 0;
        padding: 0;
        overflow: hidden;
        width: 100%;
        height: 100%;
        position: absolute;
      }

      #map_canvas {
        width: 400px;
        height: 400px;
        left: 0px;
        top: 60px;
        position: absolute;
      }
      
      #mapContainer {
        width: 400px;
        height: 400px;
        left: 450px;
        top: 60px;
        position: absolute;
      }
    </style>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.0//jsl.js?with=all"></script>
<script type="text/javascript" src="google.js"></script>
<script type="text/javascript" src="nokia.js"></script>
<script type="text/javascript">
   

  function codeLatLng() {
    var input = document.getElementById("endereco").value;
    codeLatLangGoogle(input);
    codeLatLangNokiaMaps(input);
    
  }
</script>
</head>
<body >
  <div>
    <input id="endereco" type="textbox" value="Rua Paraiba,100, Blumenau, SC, Brazil" size="100">
  </div>
  <div>
    <input type="button" value="Reverse Geocode" onclick="codeLatLng()">
  </div>
  <div id="map_canvas"></div>
  <div id='mapContainer'></div>
  <script type="text/javascript"> 
        googleMaps();
        nokiaMaps(); 
    </script>
</body>
</html>

Resultado

Página com exemplo completo