I'm plotting GeoJSON on my map using google maps api v3. With the point of layers it is functioning normally. But I have a MultiLineString Camda and center the map on the geometry gives an error.This also occurs with a polygon, but with the points works well. Is there any other way to centralize to MultiLineString and Polygons?
google.maps.event.addListener(cicloviasLayer, 'addfeature', function (e) {
console.log(e.feature.getGeometry().getType()); // MultiLineString Ok!
map.setCenter(e.feature.getGeometry().get());
});
Erro:
e.feature.getGeometry(...).get is not a function
The Data.MultiLineString class doesn't have a get
method, it has a getAt
and getArray
methods.
getAt(n:number)
Return Value: Data.LineString
Returns the n-th contained Data.LineString.
The returned LineString has a getAt
method that returns a google.maps.LatLng
object
getAt(n:number)
Return Value: LatLng
Returns the n-th contained LatLng.
google.maps.event.addListener(cicloviasLayer, 'addfeature', function (e) {
console.log(e.feature.getGeometry().getType()); // MultiLineString Ok!
// will center the map on the first vertex of the first LineString
map.setCenter(e.feature.getGeometry().getAt(0).getAt(0));
});
code snippet:
let map;
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
zoom: 15,
center: {
lat: -28,
lng: 137
},
});
map.data.setStyle({
strokeColor: "blue",
strokeWeight: 4,
});
google.maps.event.addListener(map.data, 'addfeature', function(e) {
console.log(e.feature.getGeometry().getType()); // MultiLineString Ok!
// will center the map on the first vertex of the first LineString
map.setCenter(e.feature.getGeometry().getAt(0).getAt(0));
var marker = new google.maps.Marker({
position: e.feature.getGeometry().getAt(0).getAt(0),
map: map,
icon: {
url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
size: new google.maps.Size(7, 7),
anchor: new google.maps.Point(3.5, 3.5)
}
})
});
map.data.addGeoJson({
"type": "Feature",
geometry: {
"type": "MultiLineString",
"coordinates": [
[
[-105.021443,
39.578057
],
[-105.021507,
39.577809
],
[-105.021572,
39.577495
],
[-105.021572,
39.577164
],
[-105.021572,
39.577032
],
[-105.021529,
39.576784
]
],
[
[-105.019898,
39.574997
],
[-105.019598,
39.574898
],
[-105.019061,
39.574782
]
],
[
[-105.017173,
39.574402
],
[-105.01698,
39.574385
],
[-105.016636,
39.574385
],
[-105.016508,
39.574402
],
[-105.01595,
39.57427
]
],
[
[-105.014276,
39.573972
],
[-105.014126,
39.574038
],
[-105.013825,
39.57417
],
[-105.01331,
39.574452
]
]
]
}
});
}
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html>
<head>
<title>Data Layer: Simple</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap&libraries=&v=weekly" defer></script>
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map"></div>
</body>
</html>