前の回答に引き続き失礼いたします。
なるほど…実は複雑なことをしたかった訳ですね…。
しかしながら、個人的におもしろそうだったので、ちょっとコードを書いてみました。
te2jiさんの回答を受けて、「点同士の距離を測る」方法で作成してみました。
こんな感じでどうでしょうか?
<!-- Map -->
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB5o9PRJhKBWmTMFb_Ep62sfDWrMPbdGu8&callback=initMap"></script>
<!-- googleMap APIは先に読み込んでおいたほうが良いかと -->
<script type="text/javascript">
// 距離計算関数
function calcDistance(lat_1, lng_1, lat_2, lng_2) {
// 測地系定数
// GRS80 ( 世界測地系 ) <- 現在の日本での標準
var RX = 6378137.000000 // 赤道半径
var RY = 6356752.314140 // 極半径
// 2点の経度の差を計算 ( ラジアン )
var a_x = lng_1 * Math.PI / 180 - lng_2 * Math.PI / 180;
// 2点の緯度の差を計算 ( ラジアン )
var a_y = lat_1 * Math.PI / 180 - lat_2 * Math.PI / 180;
// 2点の緯度の平均を計算
var p = (lat_1 * Math.PI / 180 + lat_2 * Math.PI / 180) / 2;
// 離心率を計算
var e = Math.sqrt((RX * RX - RY * RY) / (RX * RX));
// 子午線・卯酉線曲率半径の分母Wを計算
var w = Math.sqrt(1 - e * e * Math.sin(p) * Math.sin(p));
// 子午線曲率半径を計算
var m = RX * (1 - e * e) / (w * w * w);
// 卯酉線曲率半径を計算
var n = RX / w;
// 距離を計算
var d = Math.pow(a_y * m, 2) + Math.pow(a_x * n * Math.cos(p), 2);
d = Math.round(Math.sqrt(d)) / 1000;
return d;
}
function initMap() {
//マーカーを配置したい座標をオブジェクトで配列にまとめておく
var latlngArr = [
{ lat: '35.681382' , lng: '139.766084' },
{ lat: '35.695976' , lng: '139.751608' },
{ lat: '35.691771' , lng: '139.698606' }
//座標を増やしたければ、ここから加えたいだけオブジェクトリテラルで加えていけばOK(末尾の「,」だけ注意)
];
var latlng = new google.maps.LatLng( latlngArr[0].lat , latlngArr[0].lng );//地図の中心位置。今回はとりあえずlatlngArrの一つ目にしておきました
var optios = {
zoom: 12,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
};
var map = new google.maps.Map(document.getElementById('map') , optios );
var markers = new Array();
var circle = new Array();
for(var i=0;i<latlngArr.length; i++){
var length = Object.keys(latlngArr[i]).length;
//距離計算 dはkmで返される
/* 注意:ここの計算は再考が必要…(2点間の距離を測るだけなら単純なのですが、3点以上になると。。。) */
if(i === latlngArr.length-1){
var d = calcDistance(latlngArr[i].lat, latlngArr[i].lng, latlngArr[0].lat, latlngArr[0].lng)
}else{
var d = calcDistance(latlngArr[i].lat, latlngArr[i].lng, latlngArr[i+1].lat, latlngArr[i+1].lng)
}
/*
ちなみに2点間の距離を測るだけなら
if(i < latlngArr.length){
var d = calcDistance(latlngArr[i].lat, latlngArr[i].lng, latlngArr[0].lat, latlngArr[0].lng)
}
のみで
*/
//マーカーを配置
markers[i] = new google.maps.Marker({
position: new google.maps.LatLng( latlngArr[i].lat , latlngArr[i].lng ),
map: map
});
//図形(円)を表示
circle[i] = new google.maps.Circle({
center : new google.maps.LatLng( latlngArr[i].lat , latlngArr[i].lng ),
fillColor: '#ff0000',
fillOpacity: 0.5,
map: map,
radius: 2000,
strokeColor: '#ff0000',
strokeOpacity: 1,
strokeWeight: 1
});
//titleだとカーソルオンしてから数秒待たなければ表示されないので「情報ウィンドウ」で表示
if(d<4){ //距離が4km未満なら
var infoWindw = new google.maps.InfoWindow({content:'出店不可'})
}else{
var infoWindw = new google.maps.InfoWindow({content:'出店可'})
}
infoWindw.open(map , markers[i]);
}
}
</script>
※数学が苦手なもので、緯度・経度からの距離計算式(※参考:「二地点の緯度・経度からその距離を計算する」(http://yamadarake.jp/trdi/report000001.html)」を見て気持ちが萎えたので、
「Google Maps JavaScript API V3 + 2点間距離計算!」
(http://www.mk-mode.com/octopress/2013/07/12/google-maps-api-calc-distance/)
から計算用コードを拝借しました。。(※constが使われていた箇所をvar宣言に変えています)
1.2点目以降の地図のピンと半径を置く
マップに配置したいマーカーの数だけループで処理すればOKですよ。(※下記コード参照)
2.点同士の距離が4km以内だった時に、”出店不可”4km以上だった時に”出店可”を返す
2点だけで大丈夫なら、さほど難しくはないのですが、3点以上になるとかなり複雑な計算が必要になるかと…
(…数学が苦手なもので、公式が分かりません。。苦笑 ここだけだれか別の方のお知恵をお貸しいただけると幸いです。。)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。