$.fn.googleMap = function (options) {
var _this = this;
var settings = $.extend({}, {
zoom: 5,
centerLat: 0,
centerLon: 0
}, options);
this.initialize = function () {
var mapOptions = {
zoom: settings.zoom
};
var map = new google.maps.Map(_this.get(0), mapOptions);
// do anything with your map object here,
// eg: centering map, adding markers' events
/********************************************
* This is the trick!
* set map object to element's data attribute
********************************************/
_this.data('map', map);
return _this;
};
// ... more methods
return this;
};
function set_area(address){
if(~address.indexOf('鳥取県') && ~address.indexOf('鳥取市')){
return '鳥取';
}else if(~address.indexOf('鳥取県') && ~address.indexOf('米子')){
return '米子';
}else if(~address.indexOf('鳥取県')){
return '鳥取米子';
}else if(~address.indexOf('島根県') && ~address.indexOf('松江')){
return '松江';
}else if(~address.indexOf('島根県') && ~address.indexOf('出雲')){
return '出雲';
}else if(~address.indexOf('島根')){
return '松江出雲';
}else{
return '米子';
}
}
function is_smartphone() {
return /(iPhone|iPad|iPod|Android)/.test(navigator.userAgent);
}
function attachInfoWin(marker, event_type,elem){
google.maps.event.addListener(marker, event_type,function(event){
new google.maps.InfoWindow({content: elem['content']}).open(marker.getMap(), marker);
});
}
function fitBounds(map, area){
let filtered_model_houses = $.grep(model_houses,function(elem,index){
if(area == '鳥取米子') {
return (elem.area == '鳥取' || elem.area == '米子');
}else if(area == '松江出雲') {
return (elem.area == '松江' || elem.area == '出雲');
}else {
return (elem.area == area);
}
});
let filtered_areas = [];
$.each(filtered_model_houses,function(index,elem){
filtered_areas.push(new google.maps.LatLng(elem['lat'], elem['lng']));
});
if(filtered_areas.length){
let minX = filtered_areas[0].lng();
let minY = filtered_areas[0].lat();
let maxX = filtered_areas[0].lng();;
let maxY = filtered_areas[0].lat();;
$.each(filtered_areas, function(index, elem){
var lt = filtered_areas[index].lat();
var lg = filtered_areas[index].lng();
if (lg maxX){ maxX = lg; }
if (lt maxY){ maxY = lt; }
});
let sw = new google.maps.LatLng(maxY, minX);
let ne = new google.maps.LatLng(minY, maxX);
let bounds = new google.maps.LatLngBounds(sw, ne);
map.fitBounds(bounds);
}
}
function get_marker_type(marker_type){
var marker_address;
if(marker_type == '常設モデルハウス'){
marker_address = '/wp-content/themes/tocoshome/images/marker_modelhouse.png';
}else if(marker_type == '期間限定モデルハウス'){
marker_address = '/wp-content/themes/tocoshome/images/marker_build.png';
}else if(marker_type == '店舗'){
marker_address = '/wp-content/themes/tocoshome/images/marker_shop.png';
}
return new google.maps.MarkerImage(marker_address);
}
let latitude = 35.444545;
let longitude = 133.328674;
let markers = [];
function success(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
let area;
let geocoder = new google.maps.Geocoder();
geocoder.geocode({
latLng: new google.maps.LatLng(latitude, longitude)
}, function(results, status){
if( status == google.maps.GeocoderStatus.OK){
if(results[0].geometry){
area = set_area(results[0].formatted_address);
let opts = {
zoom: 15,
center: new google.maps.LatLng(latitude, longitude)
};
let map = new google.maps.Map($("#gmap")[0], opts);
let event_type = 'mouseover';
if(is_smartphone()){ event_type= 'click'; }
$.each(model_houses, function(index, elem){
console.log(elem['type']);
let latlng = new google.maps.LatLng(elem['lat'],elem['lng']);
var marker_icon = get_marker_type(elem['type']);
let marker = new google.maps.Marker({
position: latlng,
map: map,
icon: marker_icon
});
attachInfoWin(marker,event_type,elem);
markers.push(marker);
fitBounds(map,area);
});
} else {
return 'geometry fail';
}
} else {
return 'Geocoder Fail';
}
});
}
function fail(error){
return false;
}
function initMap(){
if(typeof navigator.geolocation === 'undefined') {
console.log('GPSが利用できません');
return false;
} else {
navigator.geolocation.getCurrentPosition(success, fail);
return true;
}
return null;
}









