开发者

GoogleMaps API v3 polygons from encoded, array problem

I can decode the points, I just need to figure out how to loop through the array of points and produce

[
new google.maps.LatLng(39.112456,-84.574779),
new google.maps.LatLng(39.314153,-84.261379),
new google.maps.LatLng(39.197099,-84.667579),
new google.maps.LatLng(39.16836,-84.479381)
];

Code available at http://pastebin.com/Zf6hi4AB

Any help is appreciated.

<!--- this is the original function --->
function decodeLine (encoded) {
  var len = encoded.length;
  var index = 0;
  var array = [];
  var lat = 0;
  var lng = 0;

  while (index < len) {
    var b;
    var shift = 0;
    var result = 0;
    do {
      b = encoded.charCodeAt(index++) - 63;
      result |= (b & 0x1f) << shift;
      shift += 5;
    } while (b >= 0x20);
    var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1));
    lat += dlat;

    shift = 0;
    result = 0;
    do {
      b = encoded.charCodeAt(index++) - 63;
      result |= (b & 0x1f) << shift;
      shift += 5;
    } while (b >= 0x20);
    var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));
    lng += dlng;

    array.push([lat * 1e-5, lng * 1e-5]);
  }

  return array;




<!---  this is what i am trying --->
function decodeLine(encoded) {
  var len = encoded.length;
  var index = 0;
  var array = [];
  var lat = 0;
  var lng = 0;

  while (index < len) {
    var b;
    var shift = 0;
    var result = 0;
    do {
      b = encoded.charCodeAt(index++) - 63;
      result |= (b & 0x1f) << shift;
      shift += 5;
    } while (b >= 0x20);
    var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1));
    lat += dlat;

    shift = 0;
    result = 0;
    do {
      b = encoded.charCodeAt(index++) - 63;
      result |= (b & 0x1f) << shift;
      shift += 5;
    } while (b >= 0x20);
    var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));
    lng += dlng;

    array.push([new google.maps.LatLng(lat * 1e-5, lng * 1e-5)]);
  }

  return array;
}




<!--- this is how i trying to use it --->
var polygon_#fips#Coords = [];
    var polygon_#fips#Coords = [decodeLine('#points#')];
    var polygon_#fips#;


    polygon_#fips# = new google.maps.Polygon({
      paths: polygon_#fips#Coords,
      strokeColor: "##FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 3,
      fillColor: "###polyfillcolor#",
      fillOpacity: 0.35
    });

    polygon_#fips#.setMap(map);

<!--- this is the orinigal use --->
var polygon_#fips#Coords = [];
    var polygon_#fips#Coords = [
            new google.maps.LatLng(39.112456,-84.574779),
            new google.maps.LatLng(39.314153,-84.261379),
            new google.maps.LatLng(39.197099,-84.667579),
            new google.maps.LatLng(39.16836,-84.479381)
    ];

    var polygon_#fips#;


    polygon_#fips# =开发者_开发问答 new google.maps.Polygon({
      paths: polygon_#fips#Coords,
      strokeColor: "##FF0000",
      strokeOpacity: 0.8,
      strokeWeight: 3,
      fillColor: "###polyfillcolor#",
      fillOpacity: 0.35
    });

    polygon_#fips#.setMap(map);


OK I think I see what you're saying. Try changing

 var polygon_#fips#Coords = [decodeLine('#points#')];

to

 var polygon_#fips#Coords = decodeLine('#points#');

Also in decodeLine() change

 array.push([new google.maps.LatLng(lat * 1e-5, lng * 1e-5)]);

to

 array.push(new google.maps.LatLng(lat * 1e-5, lng * 1e-5));

What you were doing is adding a new array of google.maps.LatLng to the end of your array, so you ended up with an array of arrays of google.maps.LatLng. With this change, you should end up with an array of google.maps.LatLng, which is what you need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜