Zastosuj styl do cech danych, ustawiając właściwość style w warstwie cech zbioru danych na google.maps.FeatureStyleFunction, która może zawierać logikę stylu, lub google.maps.FeatureStyleOptions, aby jednolicie stylizować wszystkie cechy warstwy mapy. Możesz zastosować style do elementów danych, aby określić wypełnienie (kolor, przezroczystość), obrys (kolor, przezroczystość, grubość obrysu) i średnicę (punkty). Na tej stronie pokazujemy, jak uzyskać dostęp do zbioru danych i nadać styl jego elementom, a także podajemy przykłady stylów elementów danych opartych na geometriach punktów, wielokątów i polilinii.
Style oparte na danych w przypadku zbiorów danych renderują elementy danych na podstawie współrzędnych szerokości i długości geograficznej podanych w pliku danych geoprzestrzennych, który został użyty do utworzenia zbioru danych.
Atrybuty funkcji danych
Wszystkie dane w zbiorze danych są dostępne w funkcji stylu elementu. Aby uzyskać atrybuty cech danych, najpierw pobierz cechę zbioru danych, która zawiera wszystkie dane w zbiorze danych, a następnie pobierz konkretny atrybut danych, jak pokazano poniżej:
TypeScript
// Get the dataset feature, so we can work with all of its attributes. const datasetFeature = params.feature as google.maps.DatasetFeature; // Get all of the needed dataset attributes. const furColors = datasetFeature.datasetAttributes.CombinationofPrimaryandHighlightColor;
JavaScript
// Get the dataset feature, so we can work with all of its attributes. const datasetFeature = params.feature; // Get all of the needed dataset attributes. const furColors = datasetFeature.datasetAttributes.CombinationofPrimaryandHighlightColor;
Opcje stylu obiektów
Opcje stylu cech pozwalają określić styl warstwy cech danych, np. styl wypełnienia i obrysu wielokątów lub kolor i średnicę punktów. Poniższy przykład pokazuje opcje stylu elementu, które można zastosować bezpośrednio za pomocą właściwości style elementu:
TypeScript
// Apply style to all features. datasetLayer.style = { strokeColor: 'green', strokeWeight: 4 };
JavaScript
// Apply style to all features. datasetLayer.style = { strokeColor: 'green', strokeWeight: 4 };
Funkcja stylu cechy
Użyj funkcji stylu cech, aby zdefiniować logikę stylizowania cech zbioru danych.
Aby nadać styl elementowi, ustaw właściwość style na google.maps.FeatureStyleFunction.
Funkcja stylu to miejsce, w którym definiujesz logikę stylizowania poszczególnych cech na warstwie mapy. Gdy ustawiona jest właściwość featureLayer.style, funkcja stylu jest uruchamiana dla każdej cechy w warstwie cech, której to dotyczy. Funkcja jest stosowana w momencie ustawienia właściwości stylu. Aby go zaktualizować, musisz ponownie ustawić właściwość stylu. Poniższy przykład pokazuje prostą funkcję stylu elementu:
TypeScript
const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params: google.maps.FeatureStyleFunctionOptions) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleMouseMove; } return styleDefault; }
JavaScript
const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleMouseMove; } return styleDefault; }
Funkcja stylu powinna zawsze zwracać spójne wyniki, gdy jest stosowana do obiektów. Jeśli na przykład chcesz losowo pokolorować zestaw obiektów, losowanie nie powinno odbywać się w funkcji stylu obiektu, ponieważ spowodowałoby to niezamierzone wyniki. Ta funkcja jest uruchamiana dla każdego elementu w warstwie, dlatego ważna jest optymalizacja. Aby uniknąć wpływu na czas renderowania, ustaw styl na null, gdy warstwa nie jest już używana.
Przykład stylu danych punktowych
Ten przykład pokazuje, jak nadać styl elementom danych opartym na geometrii punktów.
Informacje o zbiorze danych
Zbiór danych użyty w tym przykładzie jest wynikiem badania wiewiórek z 2018 roku w Central Parku w Nowym Jorku.
W poniższym fragmencie pliku danych CSV widać, że kolumny x i y są używane do określania położenia geograficznego. Kolumna LatLng jest uwzględniona, ale nie jest używana w tym przykładzie, ponieważ położenie geograficzne musi być reprezentowane przez 2 kolumny. Zbiór danych ze spisu wiewiórek zawiera wiele różnych punktów danych dotyczących zaobserwowanego koloru futra i zachowania wiewiórek (przewiń w poziomie, aby zobaczyć wszystkie dane).
| X | T | UniqueSquirrelID | Hektar | Shift | Data | Hectare SquirrelNumber | Wiek | PrimaryFurColor | HighlightFurColor | CombinationofPrimaryandHighlightColor | Colornotes | Lokalizacja | AboveGroundSighter Measurement | SpecificLocation | Uruchomiono | Tropienie | Wspinaczka | Jedzenie | Poszukiwanie pożywienia | Inne aktywności | Kuks | Quaas | Jęki | Tailflags | Tailtwitches | Podejścia | Obojętna | Runsfrom | OtherInteractions | LatLng |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -73.9561344937861 | 40.7940823884086 | 37F-PM-1014-03 | 37F | PM | 10142018 | 3 | + | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | POINT (-73.9561344937861 40.7940823884086) | |||||||||
| -73.9688574691102 | 40.7837825208444 | 21B-AM-1019-04 | 21 MLD | AM | 10192018 | 4 | + | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | POINT (-73.9688574691102 40.7837825208444) | |||||||||
| -73.9742811484852 | 40.775533619083 | 11B-PM-1014-08 | 11B | PM | 10142018 | 8 | Szary | Szary+ | Nad ziemią | 10 | fałsz | prawda | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | POINT (-73.97428114848522 40.775533619083) | ||||||
| -73.9596413903948 | 40.7903128889029 | 32E-PM-1017-14 | 32E | PM | 10172018 | 14 | Dorosły | Szary | Szary+ | Nie wybrano żadnego elementu jako głównego. Wybrano kolor szary jako kolor wyróżnienia. Wprowadziliśmy zmiany w zarządzaniu. | fałsz | fałsz | fałsz | prawda | prawda | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | prawda | POINT (-73.9596413903948 40.7903128889029) | ||||||
| -73.9702676472613 | 40.7762126854894 | 13E-AM-1017-05 | 13E | AM | 10172018 | 5 | Dorosły | Szary | Cynamon | Szary i cynamonowy | Nad ziemią | na pniu drzewa | fałsz | fałsz | fałsz | fałsz | prawda | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | POINT (-73.9702676472613 40.7762126854894) | ||||
| -73.9683613516225 | 40.7725908847499 | 11H-AM-1010-03 | 11 | AM | 10102018 | 3 | Dorosły | Cynamon | Biały | Cynamonowy + biały | fałsz | fałsz | fałsz | fałsz | prawda | fałsz | fałsz | fałsz | fałsz | prawda | fałsz | prawda | fałsz | POINT (-73.9683613516225 40.7725908847499) | ||||||
| -73.9541201789795 | 40.7931811701082 | 36H-AM-1010-02 | 36 godz. | AM | 10102018 | 2 | Dorosły | Szary | Szary+ | tuż za granicą hektara | Płaszczyzna podłoża | FAŁSZ | fałsz | fałsz | fałsz | fałsz | prawda | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | fałsz | POINT (-73.9541201789795 40.7931811701082) |
Stylizowanie elementów danych punktowych
Kod w tym przykładzie wykorzystuje proste podejście do stylizowania koloru wypełnienia i koloru obrysu dla każdego punktu na podstawie atrybutu CombinationofPrimaryandHighlightColor, który łączy podstawowy i dodatkowy kolor futra każdej wiewiórki.
TypeScript
function setStyle(params: { feature: google.maps.Feature }) { // Get the dataset feature, so we can work with all of its attributes. const datasetFeature = params.feature as google.maps.DatasetFeature; // Get all of the needed dataset attributes. const furColors = datasetFeature.datasetAttributes.CombinationofPrimaryandHighlightColor; // Apply styles. Fill is primary fur color, stroke is secondary fur color. switch (furColors) { case 'Black+': return { fillColor: 'black', pointRadius: 8, }; break; case 'Cinnamon+': return { fillColor: '#8b0000', pointRadius: 8, }; break; case 'Cinnamon+Gray': return { fillColor: '#8b0000', strokeColor: 'gray', pointRadius: 6, }; break; case 'Cinnamon+White': return { fillColor: '#8b0000', strokeColor: 'white', pointRadius: 6, }; break; case 'Gray+': return { fillColor: 'gray', pointRadius: 8, }; break; case 'Gray+Cinnamon': return { fillColor: 'gray', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+Cinnamon, White': return { fillColor: 'silver', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+White': return { fillColor: 'gray', strokeColor: 'white', pointRadius: 6, }; break; default: // Color not defined. return { fillColor: 'yellow', pointRadius: 8, }; break; } }
JavaScript
function setStyle(params) { // Get the dataset feature, so we can work with all of its attributes. const datasetFeature = params.feature; // Get all of the needed dataset attributes. const furColors = datasetFeature.datasetAttributes.CombinationofPrimaryandHighlightColor; // Apply styles. Fill is primary fur color, stroke is secondary fur color. switch (furColors) { case 'Black+': return { fillColor: 'black', pointRadius: 8, }; break; case 'Cinnamon+': return { fillColor: '#8b0000', pointRadius: 8, }; break; case 'Cinnamon+Gray': return { fillColor: '#8b0000', strokeColor: 'gray', pointRadius: 6, }; break; case 'Cinnamon+White': return { fillColor: '#8b0000', strokeColor: 'white', pointRadius: 6, }; break; case 'Gray+': return { fillColor: 'gray', pointRadius: 8, }; break; case 'Gray+Cinnamon': return { fillColor: 'gray', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+Cinnamon, White': return { fillColor: 'silver', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+White': return { fillColor: 'gray', strokeColor: 'white', pointRadius: 6, }; break; default: // Color not defined. return { fillColor: 'yellow', pointRadius: 8, }; break; } }
Kompletny przykładowy kod
Zobacz kompletny przykładowy kod źródłowy
TypeScript
const mapElement = document.querySelector('gmp-map')!; let innerMap: google.maps.Map; function setStyle(params: { feature: google.maps.Feature }) { // Get the dataset feature, so we can work with all of its attributes. const datasetFeature = params.feature as google.maps.DatasetFeature; // Get all of the needed dataset attributes. const furColors = datasetFeature.datasetAttributes.CombinationofPrimaryandHighlightColor; // Apply styles. Fill is primary fur color, stroke is secondary fur color. switch (furColors) { case 'Black+': return { fillColor: 'black', pointRadius: 8, }; break; case 'Cinnamon+': return { fillColor: '#8b0000', pointRadius: 8, }; break; case 'Cinnamon+Gray': return { fillColor: '#8b0000', strokeColor: 'gray', pointRadius: 6, }; break; case 'Cinnamon+White': return { fillColor: '#8b0000', strokeColor: 'white', pointRadius: 6, }; break; case 'Gray+': return { fillColor: 'gray', pointRadius: 8, }; break; case 'Gray+Cinnamon': return { fillColor: 'gray', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+Cinnamon, White': return { fillColor: 'silver', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+White': return { fillColor: 'gray', strokeColor: 'white', pointRadius: 6, }; break; default: // Color not defined. return { fillColor: 'yellow', pointRadius: 8, }; break; } } async function init() { // Request needed libraries. const [{ event }] = await Promise.all([ google.maps.importLibrary('core'), google.maps.importLibrary('maps'), ]); // Get the inner map. innerMap = mapElement.innerMap; event.addListenerOnce(innerMap, 'idle', () => { // Add the data legend. makeLegend(); }); // Dataset ID for squirrel dataset. const datasetId = 'a99635b0-5e73-4b2a-8ae3-cb40f4b7f47e'; const datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = setStyle; } // Creates a legend for the map. function makeLegend() { const colors = { black: ['black'], cinnamon: ['#8b0000'], 'cinnamon + gray': ['#8b0000', 'gray'], 'cinnamon + white': ['#8b0000', 'white'], gray: ['gray'], 'gray + cinnamon': ['gray', '#8b0000'], 'gray + cinnamon + white': ['silver', '#8b0000'], 'gray + white': ['gray', 'white'], 'no color data': ['yellow'], }; const legend = document.getElementById('legend'); legend!.id = 'legend'; const title = document.createElement('div'); title.innerText = 'Fur Colors'; title.classList.add('title'); legend!.appendChild(title); for (const color of Object.keys(colors) as Iterable<keyof typeof colors>) { const wrapper = document.createElement('div'); wrapper.id = 'container'; const box = document.createElement('div'); box.style.backgroundColor = colors[color][0]; if (colors[color][1]) { box.style.borderColor = colors[color][1]; } else { box.style.borderColor = colors[color][0]; } box.classList.add('box'); const txt = document.createElement('div'); txt.classList.add('legend'); txt.innerText = color; wrapper.appendChild(box); wrapper.appendChild(txt); legend!.appendChild(wrapper); } } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); let innerMap; function setStyle(params) { // Get the dataset feature, so we can work with all of its attributes. const datasetFeature = params.feature; // Get all of the needed dataset attributes. const furColors = datasetFeature.datasetAttributes.CombinationofPrimaryandHighlightColor; // Apply styles. Fill is primary fur color, stroke is secondary fur color. switch (furColors) { case 'Black+': return { fillColor: 'black', pointRadius: 8, }; break; case 'Cinnamon+': return { fillColor: '#8b0000', pointRadius: 8, }; break; case 'Cinnamon+Gray': return { fillColor: '#8b0000', strokeColor: 'gray', pointRadius: 6, }; break; case 'Cinnamon+White': return { fillColor: '#8b0000', strokeColor: 'white', pointRadius: 6, }; break; case 'Gray+': return { fillColor: 'gray', pointRadius: 8, }; break; case 'Gray+Cinnamon': return { fillColor: 'gray', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+Cinnamon, White': return { fillColor: 'silver', strokeColor: '#8b0000', pointRadius: 6, }; break; case 'Gray+White': return { fillColor: 'gray', strokeColor: 'white', pointRadius: 6, }; break; default: // Color not defined. return { fillColor: 'yellow', pointRadius: 8, }; break; } } async function init() { // Request needed libraries. const [{ event }] = await Promise.all([ google.maps.importLibrary('core'), google.maps.importLibrary('maps'), ]); // Get the inner map. innerMap = mapElement.innerMap; event.addListenerOnce(innerMap, 'idle', () => { // Add the data legend. makeLegend(); }); // Dataset ID for squirrel dataset. const datasetId = 'a99635b0-5e73-4b2a-8ae3-cb40f4b7f47e'; const datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = setStyle; } // Creates a legend for the map. function makeLegend() { const colors = { black: ['black'], cinnamon: ['#8b0000'], 'cinnamon + gray': ['#8b0000', 'gray'], 'cinnamon + white': ['#8b0000', 'white'], gray: ['gray'], 'gray + cinnamon': ['gray', '#8b0000'], 'gray + cinnamon + white': ['silver', '#8b0000'], 'gray + white': ['gray', 'white'], 'no color data': ['yellow'], }; const legend = document.getElementById('legend'); legend.id = 'legend'; const title = document.createElement('div'); title.innerText = 'Fur Colors'; title.classList.add('title'); legend.appendChild(title); for (const color of Object.keys(colors)) { const wrapper = document.createElement('div'); wrapper.id = 'container'; const box = document.createElement('div'); box.style.backgroundColor = colors[color][0]; if (colors[color][1]) { box.style.borderColor = colors[color][1]; } else { box.style.borderColor = colors[color][0]; } box.classList.add('box'); const txt = document.createElement('div'); txt.classList.add('legend'); txt.innerText = color; wrapper.appendChild(box); wrapper.appendChild(txt); legend.appendChild(wrapper); } } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } #attributionLabel { background-color: rgba(255, 255, 255, 0.8); font-family: 'Roboto', 'Arial', sans-serif; font-size: 10px; padding: 2px; margin: 2px; } #legend, #dataset, #counter { background-color: #e5e5e5; width: 15em; margin-left: 1em; border-radius: 8px; font-family: Roboto, sans-serif; overflow: hidden; } #dataset select { border-radius: 0; padding: 0.1em; border: 1px solid black; width: auto; margin: 0.5em 1em; } .title { padding: 0.5em 1em; font-weight: bold; font-size: 1.5em; margin-bottom: 0.5em; background-color: rgb(66, 133, 244); color: white; width: 100%; } .button { font-size: 1.2em; margin: 1em; background-color: rgb(66, 133, 244); color: white; padding: 0.5em; border-radius: 8px; } #legend #container { margin: 0.5em; display: flex; } #legend div .box { display: flex; width: 1em; height: 1em; border-radius: 50%; border: 2px solid; } #legend div .legend { display: flex; padding: 0.3em; }
HTML
<html>
<head>
<title>Style a point data feature</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map
map-id="5cd2c9ca1cf05670"
center="40.780101, -73.967780"
zoom="17"
map-type-control="false"
street-view-control="false"
fullscreen-control="false">
<div id="legend" slot="control-inline-start-block-start"></div>
<div id="attributionLabel" slot="control-block-end-inline-start">
Data source: NYC Open Data
</div>
</gmp-map>
</body>
</html>Przykład stylu danych wielokąta
Ten przykład pokazuje, jak nadać styl elementom danych opartym na geometrii wielokąta.
Informacje o zbiorze danych
Zbiór danych użyty w tym przykładzie przedstawia parki w Nowym Jorku. Poniższy fragment pliku GeoJSON zbioru danych pokazuje reprezentatywny wpis cechy.
{ "type": "Feature", "properties": { "jurisdiction": "DPR", "mapped": "False", "zipcode": "11356", "acres": "0.05", "location": "College Pl., College Pt. Blvd., bet. 11 Ave. and 12 Ave.", "nys_assembly": "27", "councildistrict": "19", "url": "http://www.nycgovparks.org/parks/Q042/", "typecategory": "Triangle/Plaza", "us_congress": "14", "eapply": "Poppenhusen Park", "parentid": "Q-07", "gispropnum": "Q042", "retired": "false", "communityboard": "407", "objectid": "6248", "globalid": "F4810079-CBB9-4BE7-BBFA-B3C0C35D5DE5", "name311": "Poppenhusen Park", "department": "Q-07", "pip_ratable": "true", "subcategory": "Sitting Area/Triangle/Mall", "precinct": "109", "permit": "true", "acquisitiondate": null, "omppropid": "Q042", "gisobjid": "100000301", "signname": "Poppenhusen Park", "address": null, "permitparent": "Q-07", "class": "PARK", "nys_senate": "11", "permitdistrict": "Q-07", "borough": "Q", "waterfront": "false" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -73.84575702371716, 40.78796240884273 ], [ -73.84593393292693, 40.78796857347548 ], [ -73.84577256469657, 40.787651355629556 ], [ -73.84575702371716, 40.78796240884273 ] ] ] ] } },
Zmienianie stylu obiektów danych wielokątów
Kod w tym przykładzie stosuje specjalne kolory do obiektów danych powiązanych z typecategory „Undeveloped” lub „Parkway”, a wszystkie inne obiekty koloruje na zielono.
TypeScript
const setStyle: google.maps.FeatureStyleFunction = (params) => { const datasetFeature = params.feature as google.maps.DatasetFeature; // 'typecategory' is an attribute in this Dataset. const typeCategory = datasetFeature.datasetAttributes.typecategory; switch (typeCategory) { case 'Undeveloped': // Color undeveloped areas blue. return { strokeColor: 'blue', strokeWeight: 2, strokeOpacity: 1, fillColor: 'blue', fillOpacity: 0.3, }; break; case 'Parkway': // Color historical house sites red. return { strokeColor: 'red', strokeWeight: 2, strokeOpacity: 1, fillColor: 'red', fillOpacity: 0.5, }; break; default: // Color other type categories green. return { strokeColor: 'green', strokeWeight: 2, strokeOpacity: 1, fillColor: 'green', fillOpacity: 0.3, }; break; } };
JavaScript
const setStyle = (params) => { const datasetFeature = params.feature; // 'typecategory' is an attribute in this Dataset. const typeCategory = datasetFeature.datasetAttributes.typecategory; switch (typeCategory) { case 'Undeveloped': // Color undeveloped areas blue. return { strokeColor: 'blue', strokeWeight: 2, strokeOpacity: 1, fillColor: 'blue', fillOpacity: 0.3, }; break; case 'Parkway': // Color historical house sites red. return { strokeColor: 'red', strokeWeight: 2, strokeOpacity: 1, fillColor: 'red', fillOpacity: 0.5, }; break; default: // Color other type categories green. return { strokeColor: 'green', strokeWeight: 2, strokeOpacity: 1, fillColor: 'green', fillOpacity: 0.3, }; break; } };
Kompletny przykładowy kod
Zobacz kompletny przykładowy kod źródłowy
TypeScript
const mapElement = document.querySelector('gmp-map')!; let innerMap: google.maps.Map; const setStyle: google.maps.FeatureStyleFunction = (params) => { const datasetFeature = params.feature as google.maps.DatasetFeature; // 'typecategory' is an attribute in this Dataset. const typeCategory = datasetFeature.datasetAttributes.typecategory; switch (typeCategory) { case 'Undeveloped': // Color undeveloped areas blue. return { strokeColor: 'blue', strokeWeight: 2, strokeOpacity: 1, fillColor: 'blue', fillOpacity: 0.3, }; break; case 'Parkway': // Color historical house sites red. return { strokeColor: 'red', strokeWeight: 2, strokeOpacity: 1, fillColor: 'red', fillOpacity: 0.5, }; break; default: // Color other type categories green. return { strokeColor: 'green', strokeWeight: 2, strokeOpacity: 1, fillColor: 'green', fillOpacity: 0.3, }; break; } }; async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for NYC park data. const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4'; const datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = setStyle; } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); let innerMap; const setStyle = (params) => { const datasetFeature = params.feature; // 'typecategory' is an attribute in this Dataset. const typeCategory = datasetFeature.datasetAttributes.typecategory; switch (typeCategory) { case 'Undeveloped': // Color undeveloped areas blue. return { strokeColor: 'blue', strokeWeight: 2, strokeOpacity: 1, fillColor: 'blue', fillOpacity: 0.3, }; break; case 'Parkway': // Color historical house sites red. return { strokeColor: 'red', strokeWeight: 2, strokeOpacity: 1, fillColor: 'red', fillOpacity: 0.5, }; break; default: // Color other type categories green. return { strokeColor: 'green', strokeWeight: 2, strokeOpacity: 1, fillColor: 'green', fillOpacity: 0.3, }; break; } }; async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for NYC park data. const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4'; const datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = setStyle; } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } #attribution { background-color: rgba(255, 255, 255, 0.7); font-family: 'Roboto', 'Arial', sans-serif; font-size: 10px; padding: 2px; margin: 2px; }
HTML
<html>
<head>
<title>Style a polygon data feature with more detail</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map
center="40.580732, -74.152826"
zoom="14"
map-id="5cd2c9ca1cf05670">
<div id="attribution" slot="control-block-end-inline-start">
Data source: NYC Open Data
</div>
</gmp-map>
</body>
</html>Przykład stylu danych linii łamanej
Ten przykład pokazuje, jak nadać styl elementom danych opartym na geometrii linii łamanej.
Informacje o zbiorze danych
Zbiór danych użyty w tym przykładzie pokazuje mosty w okolicach Seattle. Poniższy fragment pliku GeoJSON zbioru danych pokazuje reprezentatywny wpis cechy.
{ "type": "Feature", "properties": { "OBJECTID": 1, "COMPTYPE": 66, "COMPKEY": 515774, "HANSEGKEY": 489781, "UNITID": "BRG-935", "UNITTYPE": " ", "BRGUNITID": "BRG-935", "UNITDESC_BRG": "YALE AVE BR REV LANE OC ", "UNITDESC_SEG": "HOWELL ST ON RP BETWEEN HOWELL ST AND I5 SB ", "INSTDATE": null, "EXPDATE": null, "STATUS": " ", "STATUSDT": null, "CONDITION": " ", "CONDDT": null, "OWN": " ", "LSTVERIFY": null, "MAINTBY": " ", "ADDBY": "GARCIAA", "ADDDTTM": "2010-01-21T00:00:00Z", "MODBY": null, "MODDTTM": null, "BR_NBR": 935, "BR_CODE": " 935", "BR_TYPE": "ST", "BR_NAME": "YALE AVE BR REV LANE OC", "BR_FACILITIES": "YALE AVE-SR 5 ON RAMP", "BR_FEATURES": "SR 5 REV LANE", "BR_RATING": 0, "BR_INSET": 1, "BR_GEO": "DT", "BR_OWNER": "DOT", "BR_OWNER_NAME": "State of Washington", "GEOBASID": 0, "XGEOBASID": 0, "GISSEGKEY": 489781, "EARTHQUAKE_RESPONSE_TEAM": " ", "SHAPE_Length": 220.11891836147655 }, "geometry": { "type": "LineString", "coordinates": [ [ -122.329201929090928, 47.616910448708538 ], [ -122.329206483407461, 47.616976719821004 ], [ -122.32921802149356, 47.617042137515213 ], [ -122.329236413912909, 47.617105967923777 ], [ -122.329261454336034, 47.617167494985758 ], [ -122.329292861855023, 47.617226028479571 ], [ -122.329330284134699, 47.617280911766009 ], [ -122.329373301365223, 47.617331529154569 ], [ -122.329421430971635, 47.617377312810319 ], [ -122.329474133027375, 47.617417749124023 ], [ -122.32953081631139, 47.617452384473893 ] ] } },
Stylizowanie elementów danych linii łamanej
Ten fragment kodu stosuje ten sam styl bezpośrednio do wszystkich obiektów danych. Ponieważ nie jest wymagana żadna logika, w tym przypadku nie używa się funkcji stylu elementu.
TypeScript
// Apply style to all features. datasetLayer.style = { strokeColor: 'green', strokeWeight: 4 };
JavaScript
// Apply style to all features. datasetLayer.style = { strokeColor: 'green', strokeWeight: 4 };
Zobacz kompletny przykładowy kod źródłowy
TypeScript
const mapElement = document.querySelector('gmp-map')!; let innerMap: google.maps.Map; async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for Seattle Bridges const datasetId = '2438ee30-5366-4e84-82b7-a0d4dd1893fa'; const datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); // Apply style to all features. datasetLayer.style = { strokeColor: 'green', strokeWeight: 4 }; } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); let innerMap; async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for Seattle Bridges const datasetId = '2438ee30-5366-4e84-82b7-a0d4dd1893fa'; const datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); // Apply style to all features. datasetLayer.style = { strokeColor: 'green', strokeWeight: 4 }; } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } #attribution { background-color: rgba(255, 255, 255, 0.7); font-family: 'Roboto', 'Arial', sans-serif; font-size: 10px; padding: 2px; margin: 2px; }
HTML
<html>
<head>
<title>Style a polyline data feature</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map
center="47.59, -122.31"
zoom="14"
map-id="5cd2c9ca1cf05670"
map-type-control="false">
<div id="attribution" slot="control-block-end-inline-start">
Data source: NYC Open Data
</div>
</gmp-map>
</body>
</html>