javascript — Как сделать круг вокруг определенного города на карте?

Я работаю над проектом, в котором я хочу сделать круг вокруг местоположения предмета на карте Google. В моем коде ниже, если я нажму show Затем на вкладке должно отображаться кружок вокруг местоположения элемента на карте Google:

<div class="tab-pane" id="show">
<p>
<span class="heading_size">show:</span>
</p>

<p class="text-justify mb-0 pb-5">
<!-- <? php echo strtolower($data['item']->item_address); ?> -->
<div id="map" style="width:100%;height:500px"></div>

<script>
function myMap() {
var amsterdam = new google.maps.LatLng(52.395715,4.888916);
var mapCanvas = document.getElementById("map");
var mapOptions = {center: amsterdam, zoom: 7};
var map = new google.maps.Map(mapCanvas,mapOptions);

var myCity = new google.maps.Circle({
center: amsterdam,
radius: 50000,
strokeColor: "#0000FF",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#0000FF",
fillOpacity: 0.4
});

myCity.setMap(map);
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBu-916DdpKAjTmJNIgngS6HL_kDIKU0aU&callback=myMap"></script>
</p>
</div>

Постановка задачи:

Ниже приведены сведения об элементе, которые распечатываются при печати item_address как показано в приведенном выше коде (прокомментировал в данный момент) используя эхо. Поэтому мне нужно использовать приведенные ниже данные, чтобы сделать круг вокруг city поле ниже JSON. Например: в приведенном ниже поле json — city ottawa поэтому он должен сделать круг вокруг города Оттавы. На данный момент я могу сделать круг вокруг определенного лат / лонга, но вместо этого, если у меня есть название города, то как я могу сделать круг вокруг этого города? Возможно ли это сделать?

{
"address_id": 115,
"country": "canada",
"state": "ontario",
"city": "ottawa",
"street": "riverside drive",
"number": "1750",
"postal": "k1g 3t6"}

0

Решение

Вам нужно использовать Gecoding узнать положение города на карте. Вы можете взглянуть на рабочий пример ниже.

Я создал следующую функцию, которая позволяет вам нарисовать круг вокруг любого города, который вы передаете этой функции:

google.maps.event.addDomListener(window, "load", function() {
myMap();
});

function myMap() {
//add global geocoder
window.geocoder = new google.maps.Geocoder();

var mapCanvas = document.getElementById("map_div");
var mapOptions = {
zoom: 7,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(33.808678, -117.918921)
};
window.map = new google.maps.Map(mapCanvas, mapOptions);

drawCircleAroundCity('ottawa');
}

function drawCircleAroundCity(cityName) {
if (!cityName) return;
if (!window.geocoder) throw "Geocoder is not loaded";

window.geocoder.geocode({
'address': cityName
}, function(results, status) {
if (status == 'OK') {
addCircle(results[0].geometry.location, true);
} else {
throw 'Unable to find address: ' + address;
}
});
}

function addCircle(position, recenter) {
if (typeof(position) != 'object') return;
if (!window.map) throw "Map is not loaded";

var myCity = new google.maps.Circle({
center: position,
radius: 50000,
strokeColor: "#0000FF",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#0000FF",
fillOpacity: 0.4
});

myCity.setMap(window.map);

if (recenter)
window.map.setCenter(position);
}
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false"></script>
<div id="map_div" style="height: 400px;"></div>
1

Другие решения

Используйте Google Maps API геокодирования и создайте соответствующий запрос из ваших полей JSON. API вернет объект JSON, содержащий значения широты и долготы.

Ваш запрос API будет в виде:

https://maps.googleapis.com/maps/api/geocode/json?address=1750+riverside+drive,ottawa,ontario,canada&key=YOUR_API_KEY
0

Перевод города на LatLon не может быть слишком сложным, но вот код, который я могу скопировать вслепую, не слишком задумываясь. НТН.

    var circleOptions = {
clickable: true,
draggable: true,
editable: true,
visible: false,
strokeColor: 'gray',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: 'gray',
fillOpacity: 0.35,
center: marker.getPosition()
};

radarCircle = new radarView(new google.maps.Circle(circleOptions));

google.maps.event.addDomListener(radarCircle,    'center_changed', reScope);
google.maps.event.addDomListener(radarCircle,    'radius_changed', reScope);

function radarView(superBase)
{
this.__proto__ = superBase;

if (this instanceof google.maps.Circle) {
augmentCircle.apply(this);
} else if (this instanceof google.maps.Rectangle) {
augmentRectangle.apply(this);
} else {
Tier3Toolbox.reportError({header:"Internal error",
message:"Inheriting from unknown object"});
}

this.doX = function(x){return "x is>" + x;};

return this;
}

function augmentCircle()
{
this.moveBorder = function()
{
google.maps.event.trigger(radarCircle,"center_changed");
}
}

function augmentRectangle()
{
this.moveBorder = function()
{
google.maps.event.trigger(radarRectangle,"bounds_changed");
}
}


function reScope() {

var searchReq = {'cmd':'search', 'scopeVintage':scopeVintage};
if (radarShape.getCenter) {
searchReq.checker = 0;
var currCenter = radarCircle.getCenter();
searchReq.centerLat = currCenter.lat();
searchReq.centerLng = currCenter.lng();
searchReq.radius = radarCircle.getRadius();
} else {
searchReq.checker = 1;
searchReq.SWLat = radarShape.getBounds().getSouthWest().lat();
searchReq.SWLng = radarShape.getBounds().getSouthWest().lng();
searchReq.NELat = radarShape.getBounds().getNorthEast().lat();
searchReq.NELng = radarShape.getBounds().getNorthEast().lng();
}

facFinder.postMessage(searchReq);
}
0
По вопросам рекламы [email protected]