JavaScript — API Карт Google — Регионы не берут города

В настоящее время я использую Карты Google для составления списка стран, регионов и городов. Но у меня есть проблема. У меня есть три варианта: зеленый для предупреждения, желтый для предупреждения, красный для предупреждения.

Проблема в том, что регионы не берут города в этом регионе. Давайте возьмем Австрию в качестве примера. В Австрии есть регион под названием Niederösterreich. Австрия должна иметь зеленую этикетку, в то время как все города в Нидерёстеррайхе должны иметь желтую этикетку.

Он работает в некоторых городах, например, в Санкт-Пёльтене, который находится в Нидерёстеррайхе, но Цветтл, который также находится в Нидерёстеррайхе, не работает.

Я приложил скриншоты, чтобы вы могли увидеть проблему. 1 2 3

<script>

google.maps.visualRefresh = true;

var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
$('#world-map').css('height', h - 80);

var map, centerLat, centerLng, zoom, addrMarker;
var geocoder = new google.maps.Geocoder();

if (h >= 955) {
centerLat = 20.0;
centerLng = 10.0;
zoom = 3;
} else if (h <= 678 && h < 955) {
centerLat = 42.0;
centerLng = 0.0;
zoom = 2;
} else {
centerLat = 0.0;
centerLng = 0.0;
zoom = 2;
}

var countries = "{!! $countries !!}";
countries = countries.replace(/[\(\)']/g, '').split(',');
var regions = "{!! $regions !!}";
regions = regions.replace(/[\(\)']/g, '').split(',');
var qstatus = "{!! $status !!}";
qstatus = qstatus.replace(/[\(\)']/g, '').split(',');

var red = "{!! $red !!}";
red = red.replace(/[\(\)']/g, '').split(',');
var orange = "{!! $orange !!}";
orange = orange.replace(/[\(\)']/g, '').split(',');
var yellow = "{!! $yellow !!}";
yellow = yellow.replace(/[\(\)']/g, '').split(',');
var green = "{!! $green !!}";
green = green.replace(/[\(\)']/g, '').split(',');

function initialize() {

map = new google.maps.Map(document.getElementById('world-map'), {
center: new google.maps.LatLng(centerLat,centerLng),
zoom: zoom
});

var input = document.getElementById('search_address');
var options  = {
types: ['(regions)']
};
var autocomplete = new google.maps.places.Autocomplete(input, options);
}

function performSearch() {
if (addrMarker != null) { addrMarker.setMap(null); }
var address = $('#search_address').val();
geocoder.geocode({'address': address}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
var user_point = results[0].geometry.location;
console.log(results);
var add = results[0].address_components;
var addIso, quarantine;

var messages = [];
messages['green'] = '<div style="width:10%;height:100px;float:left;background-color: green;margin:10px 0 10px 0"></div><div style="width:85%;float:left;margin-left:5%;margin-top:10px"><h4>' + results[0].formatted_address + '</h4><p>Ophold i området giver <strong>ikke karantæne</strong></p></div>';
messages['yellow'] = '<div style="width:10%;height:110px;float:left;background-color: yellow;margin:10px 0 10px 0"></div><div style="width:85%;float:left;margin-left:5%;margin-top:10px"><h4>' + results[0].formatted_address + '</h4><p>Ophold i området giver <strong>4 ugers karantæne fra 1. april til 30. november</strong> grundet risiko for west nile virus (WNV) og andre infektionssygdomme, der kan overføres ved blodtransfusion.</p></div>';
messages['orange'] = '<div style="width:10%;height:130px;float:left;background-color: orange;margin:10px 0 10px 0"></div><div style="width:85%;float:left;margin-left:5%;margin-top:10px"><h4>' + results[0].formatted_address + '</h4><p>Ophold i området giver <strong>4 ugers karantæne hele året</strong>. Dette er grundet risiko for diverse importerede sygdomme, eksempelvis dengue virus og chikungunya virus og andre infektionssygdomme, der kan overføres ved blodtransfusion.</p></div>';
messages['red'] = '<div style="width:10%;height:100px;float:left;background-color: red;margin:10px 0 10px 0"></div><div style="width:85%;float:left;margin-left:5%;margin-top:10px"><h4>' + results[0].formatted_address + '</h4><p>Ophold i området giver <strong>6 måneders karantæne</strong> grundet risiko for malaria og andre infektionssygdomme, der kan overføres ved blodtransfusion.</p></div>';
messages['undefined'] = '<div style="width:10%;height:120px;float:left;background-color: red;margin:10px 0 10px 0"></div><div style="width:85%;float:left;margin-left:5%;margin-top:10px"><h4>' + results[0].formatted_address + '</h4><p>Området er ikke kategoriseret i forhold til karantæne. Kontakt din blodbank via mail eller telefon for yderligere information.</p></div>';

for (var i = 0; i < add.length; i++) {
if (add[i].types[0] == 'country') {
if (countries.indexOf(add[i]['short_name']) > -1) {
for (var j = 0; j < add.length; j++) {
if (add[i]['short_name'] === 'KR' && add[j]['short_name'] === 'Seoul') {
quarantine = qstatus[regions.indexOf('Seoul')];
} else if (add[i]['short_name'] === 'VE' && add[j]['short_name'] == 'Isla de Margarita') {
quarantine = qstatus[regions.indexOf('Isla de Margarita')];
} else if (add[i]['short_name'] === 'TR') {
if (add[j]['short_name'] == 'Mugla' || add[j]['short_name'] == 'Muğla Province') {
quarantine = qstatus[regions.indexOf('Muğla')];
} else if (add[j]['short_name'] == 'Izmir' || add[j]['short_name'] == 'Çeşme') {
quarantine = qstatus[regions.indexOf('İzmir Province')];
} else if (add[j]['short_name'] == 'Istambul' || add[j]['short_name'] == 'Istanbul-provinsen') {
quarantine = qstatus[regions.indexOf('İstanbul')];
}
} else if (add[i]['short_name'] === 'PT') {
if (add[j]['short_name'] == 'Faro' || add[j]['short_name'] == 'Faro District') {
quarantine = qstatus[regions.indexOf('Faro')];
}
} else if (add[i]['short_name'] === 'AT' && add[j]['short_name'] == 'Wien') {
quarantine = qstatus[regions.indexOf('Wien')];
} else if (add[i]['short_name'] === 'AT' && add[j]['short_name'] == 'Niederösterreich') {
quarantine = qstatus[regions.indexOf('Niederösterreich')];
} else if (add[i]['short_name'] === 'FR' && add[j]['short_name'] == 'Gard') {
quarantine = qstatus[regions.indexOf('Gard')];
}else if (add[i]['short_name'] === 'FR' && add[j]['short_name'] == 'Alpes-Maritimes') {
quarantine = qstatus[regions.indexOf('Alpes-Maritimes')];
}


if (add[j].types[0] == 'administrative_area_level_1') {
if (regions.indexOf(add[j]['long_name']) > -1) {
quarantine = qstatus[regions.indexOf(add[j]['long_name'])];
}
}
}

if (!quarantine) {
addIso = add[i]['short_name'];

if (green.indexOf(addIso) > -1) {
quarantine = 'green';
} else if (yellow.indexOf(addIso) > -1) {
quarantine = 'yellow';
} else if (orange.indexOf(addIso) > -1) {
quarantine = 'orange';
} else if (red.indexOf(addIso) > -1) {
quarantine = 'red';
}
}
} else {
addIso = add[i]['short_name'];

if (green.indexOf(addIso) > -1) {
quarantine = 'green';
} else if (yellow.indexOf(addIso) > -1) {
quarantine = 'yellow';
} else if (orange.indexOf(addIso) > -1) {
quarantine = 'orange';
} else if (red.indexOf(addIso) > -1) {
quarantine = 'red';
}
}
} else if (add[0]['short_name'] === 'Gazastriben' || add[0]['short_name'] === 'Vestbredden') {
addIso = 'PS';

if (green.indexOf(addIso) > -1) {
quarantine = 'green';
} else if (yellow.indexOf(addIso) > -1) {
quarantine = 'yellow';
} else if (orange.indexOf(addIso) > -1) {
quarantine = 'orange';
} else if (red.indexOf(addIso) > -1) {
quarantine = 'red';
}
} else if (add[0]['short_name'] === 'Pristina') {
addIso = 'XK';

if (green.indexOf(addIso) > -1) {
quarantine = 'green';
} else if (yellow.indexOf(addIso) > -1) {
quarantine = 'yellow';
} else if (orange.indexOf(addIso) > -1) {
quarantine = 'orange';
} else if (red.indexOf(addIso) > -1) {
quarantine = 'red';
}
}
}

if (quarantine === '') {
quarantine = 'undefined';
}

map.setCenter(user_point);
map.setZoom(7);

addrMarker = new google.maps.Marker({
position: user_point,
map: map,
icon: 'https://maps.gstatic.com/mapfiles/ms2/micons/man.png',
animation: google.maps.Animation.DROP,
title: address
});

var infoWin = new google.maps.InfoWindow({
content: messages[quarantine]
});

infoWin.open(map, addrMarker);

google.maps.event.addDomListener(addrMarker, 'click', function() {
infoWin.open(map, addrMarker);
});

} else {
alert("Problem med adresse");
}
});
}

google.maps.event.addDomListener(window, 'load', initialize);

$('#search').on('click', function() {
if ($('#search_address').val() !== "") {
performSearch();
}
});

$('#search_address').on('keydown', function(e) {
var key = e.keyCode ? e.keyCode : e.which;
if (key === 13) {
$('#search').click();
return false;
}
});
</script>

-1

Решение

@FabianGillenius

Я нашел проблему, это было из-за API Карт Google.

Он называется Niederösterreich в Дании и других странах, но в API Карт Google он указан как «Нижняя Австрия», но сейчас он работает.

Спасибо за твою помощь

0

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

Других решений пока нет …

По вопросам рекламы [email protected]