6
votes

Google Maps supprimer les étiquettes ou la zone de gris sauf certaines régions

Bonjour, j'utilise Google Map et je veux votre point de vue de la question suivante.

est-il possible de cacher ou de grimacer toute la zone à l'exception de l'autre dans Googlemap? P>

Si oui, alors s'il vous plaît Donne-moi une main pour ce problème. P>

J'ai essayé mais j'ai trouvé une solution jusqu'à présent. p>

Voici mon Fiddle Demo Strong> P>

Dans cette démo, je veux griser / masquer les étiquettes de toute la zone sans marqueurs. P> Voici le code de l'exemple que j'utilise pour épingler le marqueur sur la carte. P>

JS Code: P>

<script>
var infowindow;
var map;
var myLatLng = [];

function initialize() {
    var mapOptions = {
        zoom: 3,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    var bounds = new google.maps.LatLngBounds();
    var obj = {
        "JobRecord": [{
            "ApplyUrl": "test",
                "GeoLocations": {
                "GeoLocationRecord": [{
                    "Latitude": "21.543333",
                        "Longitude": "39.172777"
                }, {
                    "Latitude": "21.299135",
                        "Longitude": "40.428313"
                }]
            },
                "JobId": "493743",
                "JobTitle": "Sales Associate",
                "Locations": {
                "LocationRecord": [{
                    "Group": "Saudi Arabia",
                        "Title": "Taif"
                }, {
                    "Group": "Saudi Arabia",
                        "Title": "Jeddah"
                }]
            }
        }, {
            "ApplyUrl": "test",
                "GeoLocations": {
                "GeoLocationRecord": {
                    "Latitude": "55.755826",
                        "Longitude": "37.617300"
                }
            },
                "JobId": "492725",
                "JobTitle": "Business Director - Starbucks - Russia",
                "Locations": {
                "LocationRecord": {
                    "Group": "Russia",
                        "Title": "Moscow"
                }
            }
        }, {
            "ApplyUrl": "test",
                "GeoLocations": {
                "GeoLocationRecord": {
                    "Latitude": "25.271139",
                        "Longitude": "55.307485"
                }
            },
                "JobId": "492730",
                "JobTitle": "Vice President - Victoria's Secret",
                "Locations": {
                "LocationRecord": {
                    "Group": "UAE",
                        "Title": "Dubai"
                }
            }
        }]
    };
    var jobs = obj.JobRecord;
    for (var i = 0; i < jobs.length; i++) {
        if (jobs[i].GeoLocations.length != 0) {
            var geoLocationRecord = jobs[i].GeoLocations.GeoLocationRecord;
            var myjobs = new Array();

            var single = new Object();

            if (geoLocationRecord.length === undefined) {

                single.JobId = jobs[i].JobId;
                single.JobTitle = jobs[i].JobTitle;
                single.Locations = jobs[i].Locations.LocationRecord;

                var search = [geoLocationRecord.Latitude, geoLocationRecord.Longitude, single];
                isLocationFree(search);
            } else {
                for (var j = 0; j < geoLocationRecord.length; j++) {
                    single[j] = new Object();

                    single[j].JobId = jobs[i].JobId;
                    single[j].JobTitle = jobs[i].JobTitle;
                    single[j].Locations = jobs[i].Locations.LocationRecord[j];

                    var search = [geoLocationRecord[j].Latitude, geoLocationRecord[j].Longitude, single[j]];
                    isLocationFree(search);
                } //finish inner loop
            }
        } //finish if condition
    } //finish loop

    for (var x = 0; x < myLatLng.length; x++) {
        var latlng = new google.maps.LatLng(parseFloat(myLatLng[x][0]),
        parseFloat(myLatLng[x][1]));
        bounds.extend(latlng);

        createMarker(myLatLng[x], latlng);
    }
    map.fitBounds(bounds);
    var listener = google.maps.event.addListener(map, "idle", function () {
        if (map.getZoom() > 16) map.setZoom(3);
        google.maps.event.removeListener(listener);
    });
}

function createMarker(jobs, latlng) {
    var marker = new google.maps.Marker({
        position: latlng,
        map: map
    });

    google.maps.event.addListener(marker, "click", function () {
        if (infowindow) infowindow.close();
        infowindow = new google.maps.InfoWindow({
            content: createMessage(jobs)
        });
        infowindow.open(map, marker);
    });
    return marker;
}

function createMessage(jobs) {
    console.log(jobs);
    console.log("Total==>" + (Number(jobs.length) - 2));

    if (jobs[2].Locations !== undefined) {
        var locationTitle = jobs[2].Locations.Title;
    } else {
        var locationTitle = "";
    }

    var message = '';
    message += '<div id="popupContent">' +
        '<strong id="firstHeading" class="firstHeading">' + (Number(jobs.length) - 2) + " Vacancies in " + locationTitle + '</strong>' +
        '<br><br>';
    for (var y = 2; y < jobs.length; y++) {
        message += '<a href="http://jobsearch.alshaya.com/cau/en/job/' + jobs[y].JobId + '" target="_blank">' + jobs[y].JobTitle + '</a><br>';

    }
    message += '</div>';

    return message;
}

function isLocationFree(search) {
    for (var i = 0; i < myLatLng.length; i++) {
        if (myLatLng[i][0] === search[0] && myLatLng[i][1] === search[1]) {
            myLatLng[i].push(search[2]);
            return true;
        }
    }
    myLatLng.push(search);
    return myLatLng;
}
$(document).ready(function () {
    initialize();
});
</script>


7 commentaires

Dupliquer possible de Stackoverflow.com/Questtions/12591937/...


Vous pouvez également vérifier ceci: gis.stackexchange.com/questions/18867/... mais je trouve ces exemples / solutions un peu maladroite.


En tout cas, je pense que vous aurez besoin de données de géométrie. La couche KML semble être la meilleure option pour moi.


@Mrupsidown Comment puis-je implémenter la couche KML avec mon code actuel?


Vérifiez l'exemple fourni par @geocodezip dans mon premier lien. Vous pouvez vérifier le code et les liens vers le doc. De plus, vous pouvez vérifier cette réponse pour une version locale des données de géométrie: Stackoverflow.com/questions/21302002/google-map-as-a-vector- Map / ... Vous devez trouver le jeu de données de géométrie droite. Que voulez-vous cacher? Vous avez mentionné Greyout toute la zone et greyout labels . Vous pouvez greyout / masquer les étiquettes routières et autres fonctionnalités de la carte entière, pas pour une région / pays spécifique. Vous pouvez gredyout une zone avec un polygone, en fonction des données de géométrie.


Au lieu de gravir les autres régions, avez-vous envisagé de souligner ceux qui vous intéressent?


@MUPSIDNOWN Actuellement, je reçois actuellement les données de manière dynamique à partir de l'alimentation XML et sur la base de ce marqueur d'affichage sur la carte et que je souhaite montrer / mettre en évidence la zone avec les marqueurs dans la carte, d'autres régions doivent être gracieuses.


3 Réponses :


0
votes

Je l'ai atteint dans V2 de Googlemaps en superposant une superposition de forme (c'est-à-dire un polygone qui englobe le monde entier mais la zone que je veux montrer).

À la fin, ma zone était assez complexe, donc j'ai fini par générer avec Google Maps et enregistrer la forme dans un fichier distinct .kmz, vous pourrez obtenir le résultat des deux manières.

Voici un violon d'ajouter le périmètre une paire de coordonnées à la fois.

the kmllaoure fonction < / a> Vous permet de charger un .kmz que vous avez généré à partir de Google Map; Voir aussi cette réponse sur Stackoverflow: Utilisation de fichiers KMZ dans Google Maps

Dans Google Maps, suivez ce didacticiel pour générer le KML


3 commentaires

Pouvez-vous me montrer d'exemple de code pour cela? ou source appropriée pour trouver le code d'échantillon à mettre en œuvre.


J'ai ajouté des références


Merci pour vos efforts, mais ce n'est pas la solution que je veux.



5
votes

Vous pouvez le faire assez facilement en utilisant un Fusion Table Couche .

Je considère ici la "zone" ou "régions" mentionnée en tant que pays - je suppose que vous voulez simplement griser les pays qui ne sont pas présents dans votre flux XML?

Ici, je suis codé sur le Pays de votre exemple - Russie, Arabie Saudia et Émirats arabes unis. Vous devez vous-même créer la logique pour exclure les pays que vous rencontrez dans votre alimentation. xxx

Le résultat ressemble à ceci:

Entrez la description de l'image ici

violon Forked Fiddle -> http: // jsfiddle .NET / QUPDZ /


concernant les "marqueurs rouges", cette fonctionnalité est construite dans le code de la couche de table de fusion et ne peut pas être supprimé. Voir le Documentation , sous "Limites" ":

Lorsque vous regardez la carte, vous pouvez remarquer:
* Les dix composants de la plus grande zone d'une multi-géométrie sont indiqués.
* Lors du zoomé plus loin, les tables avec plus de 500 fonctionnalités montreront des points (non des lignes ou des polygones).

La solution de contournement consiste à ajouter xxx

sur les options de carte, comme dans ce violon -> http://jsfiddle.net/lvrp2/

La table de fusion géométrie de pays - frontières du monde des pays.kml - est public et accessible ici:

HTTPS: // www.google.com/fusionTables/datasource?docid=1N2LBK4JHWWPOY4D9FOBIN27LFNZ5MDY-NOQQRPK .

Une alternative et une même source que je suppose - les limites du pays mondial.csv - peuvent être trouvées ici:

https://www.google.com/fusionTables/datasource?docid=1UL8KJV0BMB7A8-SKRIE0KO2DMTSYPHX52Datee4 .

Les deux fonctionnent avec le violon ci-dessus.


3 commentaires

+1. C'est probablement la meilleure solution que vous trouverez, car les étiquettes de la carte sont dans les images et non modifiables.


Je pense que cela le résultat que je veux, mais comment puis-je accéder à la table de fusion que vous avez créée avec des données.


Encore une nouvelle pensée lorsque je vais zoomer sur la carte à cette époque, il montre des marqueurs de cercle rouge qui provient de la table de fusion, alors comment je peux désactiver les marqueurs.



0
votes

Faisons un récapitulatif ici.

Pendant que vous avez quelques solutions expliquées ici, elles nécessitent tous des données externes que BTW. est difficile à maintenir et incomplète (je n'ai toujours pas pu trouver un jeu de données de limites mondiales de la table de fusion complète).

I Personnaly Ne pense pas que ce soit un bon moyen de "mettre en évidence" lorsque les positions sont, et je pense que c'est surchargé.

Une autre possibilité serait d'utiliser un Clusterer de marqueur < / a> qui est très bon de mettre en évidence la plupart de vos positions. Et il est facile à mettre en œuvre.

Ce que nous ne savons pas est des fonctionnalités dont vous avez besoin de l'API Google Maps. Peut-être devriez-vous envisager d'utiliser un autre service pouvant permettre une manipulation plus facile des données de limites. Avez-vous déjà vérifié JVectormap par exemple?

Je sais que ma réponse n'est pas vraiment une solution à votre question, mais cela pourrait vous aider à vous poser la bonne question: est en train de griser certaines zones sur la carte la meilleure option pour mettre en évidence où sont les positions?


2 commentaires

Je ne vois pas pourquoi on ne devrait pas tirer profit des données publiques, dans ce cas, des données de données les plus proportionnellement créées / téléchargées par Google Employés. Il n'est pas plus difficile de "maintenir" que de copier les tables. De plus, je pense que la géométrie fait du bon travail - ce qui les rend incomplète? Vos considérations sont bien bonnes, mais ce n'est pas un monde parfait, et je soupçonne que OP veut juste une bonne fonctionnalité, pas un projet de science de fusée :)


Vérifiez les différents ensembles de données disponibles et dites-moi si vous en trouvez un qui est complet: aucun pays manquant, tous les domaines couverts, etc. Un autre point que je n'ai pas mentionné: Performance. Ce n'est pas léger du tout. Cela pourrait être une belle fonctionnalité comme vous le dites, mais je ne peux pas voir les avantages lorsque je pense à tous les points que j'ai mentionnés.