{"id":28509,"date":"2019-06-19T00:00:00","date_gmt":"2019-06-18T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/maps\/"},"modified":"2021-05-20T19:06:26","modified_gmt":"2021-05-20T17:06:26","slug":"maps-3-angular","status":"publish","type":"post","link":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/","title":{"rendered":"Maps <3 Angular"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28484\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/427c6883-62cc-44c1-be0d-4ffb824978ed-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-title=\"427c6883-62cc-44c1-be0d-4ffb824978ed\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28484\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Giving the right emphasis on geographic data is not always easy. Putting some markers on a map inside a web page it\u2019s not enough to add value to our solution. In this article, we\u2019ll show the best practices on geographical data used in Blexin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We\u2019ll show an Angular project using a sub-sample of a large public dataset I published on a public Github&nbsp;<a href=\"https:\/\/github.com\/sorrentmutie\/WorldSoccerStadiums\" target=\"_blank\" rel=\"noreferrer noopener\">repository<\/a>&nbsp;containing information about football stadiums around the world. The data are in JSON format. For each stadium, the following details are available:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n{\n\u00a0&quot;Id&quot;:8233,\n\u00a0&quot;Name&quot;:&quot;10 de Diciembre&quot;,\n\u00a0&quot;Nation&quot;:&quot;Mexico&quot;,\n\u00a0&quot;Town&quot;:&quot;Ciudad Cooperativa Cruz Azul&quot;,\n\u00a0&quot;Latitude&quot;:19.99395751953125,\n\u00a0&quot;Longitude&quot;:-99.325408935546875,\n\u00a0&quot;Capacity&quot;:&quot;17.000&quot;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">We\u2019ll use tools based on Google libraries, which need an API key that you can create on the&nbsp;<a href=\"https:\/\/console.developers.google.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">developer console<\/a>. Usually, inside the angular project, you put the key in the src\/environment.ts file, in src\/environments folder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The dataset contains 46 stadiums grouped in the following way:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"149\" data-attachment-id=\"28486\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image01-20-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-20.png?fit=326%2C149&amp;ssl=1\" data-orig-size=\"326,149\" data-comments-opened=\"0\" data-image-title=\"image01-20\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-20.png?fit=326%2C149&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-20.png?resize=326%2C149&#038;ssl=1\" alt=\"\" class=\"wp-image-28486\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-20.png?w=326&amp;ssl=1 326w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-20.png?resize=300%2C137&amp;ssl=1 300w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This grouping is indeed an interesting information to show on a map. Google Visualization Data Tools offers a&nbsp;<a href=\"https:\/\/developers.google.com\/chart\/interactive\/docs\/gallery\/geochart\" target=\"_blank\" rel=\"noreferrer noopener\">Geochart<\/a>&nbsp;component particularly interesting for our purpose. Unfortunately, there isn\u2019t an official Angular porting of this component. Thus, we choose a&nbsp;<a href=\"https:\/\/github.com\/FERNman\/angular-google-charts\" target=\"_blank\" rel=\"noreferrer noopener\">wrapper<\/a>&nbsp;available on Github. Leaving the installation details to the documentation, we can devote our attention to the following two problems:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Data formatting<\/li><li>Graphic customization<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">We need to transform the data according to the Google Chart standard:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ngeoSummary = &#x5B;\n\u00a0\u00a0&#x5B;&#039;Indonesia&#039;, 10],\n\u00a0\u00a0&#x5B;&#039;Algeria&#039;, 6],\n\u00a0\u00a0&#x5B;&#039;Argentina&#039;, 7],\n\u00a0\u00a0&#x5B;&#039;Italy&#039;, 10],\n\u00a0\u00a0&#x5B;&#039;Australia&#039;, 4],\n\u00a0\u00a0&#x5B;&#039;Netherlands&#039;, 4],\n\u00a0\u00a0&#x5B;&#039;Mexico&#039;, 5],\n];\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Possible graphic customization for our chart may be the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"373\" data-attachment-id=\"28489\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image02-19-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-19.png?fit=2224%2C810&amp;ssl=1\" data-orig-size=\"2224,810\" data-comments-opened=\"0\" data-image-title=\"image02-19\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-19.png?fit=1024%2C373&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-19.png?resize=1024%2C373&#038;ssl=1\" alt=\"\" class=\"wp-image-28489\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-19-980x357.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-19-480x175.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We can choose for the value axis a string array containing the colors we want to use (colorAxis). In the example, [\u2018purple\u2019,\u2019blue\u2019,\u2019green\u2019]. The datalessRegionColor is used as the color for the nations without data. Finally, we can customize the map background color (backgroundColor). A different visualization choice is the one using markers with a radius proportional to the value (displayMode: &#8216;markers&#8217;):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"375\" data-attachment-id=\"28491\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image03-17-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-17.png?fit=2222%2C814&amp;ssl=1\" data-orig-size=\"2222,814\" data-comments-opened=\"0\" data-image-title=\"image03-17\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-17.png?fit=1024%2C375&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-17.png?resize=1024%2C375&#038;ssl=1\" alt=\"\" class=\"wp-image-28491\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-17-980x359.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-17-480x176.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The following typescript code set the chart options:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nprivate SetChart(data: any): MyChart\u00a0 {\n\u00a0\u00a0\u00a0\u00a0const mychart: MyChart = {\n\u00a0\u00a0\u00a0\u00a0\u00a0type: &#039;GeoChart&#039;,\n\u00a0\u00a0\u00a0\u00a0\u00a0data,\n\u00a0\u00a0\u00a0\u00a0\u00a0options: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0colorAxis: {colors: &#x5B;&#039;purple&#039;, &#039;blue&#039;, &#039;green&#039;]},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0backgroundColor: &#039;#81d4fa&#039;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0datalessRegionColor: &#039;white&#039;\n\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0return mychart;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This is the HTML template:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;google-chart class=&quot;chart&quot;\n\u00a0\u00a0\u00a0&#x5B;height]=&quot;400&quot;\n\u00a0\u00a0\u00a0&#x5B;type]=&quot;myChangingCart.type&quot;\n\u00a0\u00a0\u00a0&#x5B;data]=&quot;myChangingCart.data&quot;\n\u00a0\u00a0\u00a0&#x5B;options]=&quot;myChangingCart.options&quot;\n\u00a0\u00a0\u00a0(select)=&quot;onSelect($event)&quot;&gt;\n&lt;\/google-chart&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The google-chart component has an event for the selected nation (select) as a polygon. From the passed argument ($event), through its row property, we can extract the name that we\u2019ll pass to a detailed map.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nonSelect(event: ChartEvent) {\n\u00a0\u00a0\u00a0if (event &amp;&amp; event&#x5B;0] &amp;&amp; event&#x5B;0].row &gt;= 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0const row = event&#x5B;0].row;\n\u00a0\u00a0\u00a0\u00a0\u00a0this.selectedNation = this.geoSummary&#x5B;row]&#x5B;0];\n\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The project contains a detail component consisting of a Google map showing the arenas for the selected nation. Changing the selection in the google-chart, the map is repositioned on the corresponding nation and the markers are updated.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"275\" data-attachment-id=\"28495\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image04-15-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-15.png?fit=2240%2C602&amp;ssl=1\" data-orig-size=\"2240,602\" data-comments-opened=\"0\" data-image-title=\"image04-15\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-15.png?fit=1024%2C275&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-15.png?resize=1024%2C275&#038;ssl=1\" alt=\"\" class=\"wp-image-28495\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-15-980x263.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-15-480x129.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We pass to the detail component (app-details) the selected nation as an @Input():<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n&lt;app-details &#x5B;nation]=&#039;selectedNation&#039;&gt;&lt;\/app-details&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">app-details uses a well-known component called Angular Google Maps (agm) available at the following&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/angular-maps.com\/guides\/getting-started\/\" target=\"_blank\">address<\/a>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n&lt;agm-map #map &#x5B;zoom]=&quot;zoom&quot; &#x5B;latitude]=&quot;latitude&quot; &#x5B;longitude]=&quot;longitude&quot;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&#x5B;mapTypeId]=&quot;&#039;hybrid&#039;&quot;&gt;\n&lt;\/agm-map&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">app-details implements OnChanges with the ngOnChanges method where we extract from a service the stadiums belonging to the selected nation. Subscribing to the service method, we can manage the change of the map center, calculated using the arenas latitude and longitude.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nngOnChanges(changes: SimpleChanges): void {\n\u00a0\u00a0\u00a0this.zoom = 4;\n\u00a0\u00a0\u00a0this.nation = changes.nation.currentValue;\n\u00a0\u00a0\u00a0if (this.nation.length &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0this.data.getArenas(this.nation).subscribe(x =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.arenas = x;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.center = this.centerMap();\n\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The calculation of latitude and longitude arithmetical average it&#8217;s not enough precise. This might work pretty well at low latitudes, but at higher latitudes it begins to give poor results and completely breaks down near the poles. The conventional method is to convert latitude (\u03d5i) and longitude (\u03bbi) in a three-dimensional point using the following formula:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"92\" data-attachment-id=\"28498\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image05-15-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-15.png?fit=618%2C92&amp;ssl=1\" data-orig-size=\"618,92\" data-comments-opened=\"0\" data-image-title=\"image05-15\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-15.png?fit=618%2C92&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-15.png?resize=618%2C92&#038;ssl=1\" alt=\"\" class=\"wp-image-28498\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-15.png 618w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-15-480x71.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 618px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now we can calculate the average of these three-dimensional points (on the sphere surface) and convert it again in&nbsp;latitude and longitude using the following formula:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"248\" height=\"92\" data-attachment-id=\"28501\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image06-12-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-12.png?fit=248%2C92&amp;ssl=1\" data-orig-size=\"248,92\" data-comments-opened=\"0\" data-image-title=\"image06-12\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-12.png?fit=248%2C92&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image06-12.png?resize=248%2C92&#038;ssl=1\" alt=\"\" class=\"wp-image-28501\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"88\" data-attachment-id=\"28503\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image07-11-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-11.png?fit=350%2C88&amp;ssl=1\" data-orig-size=\"350,88\" data-comments-opened=\"0\" data-image-title=\"image07-11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-11.png?fit=350%2C88&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-11.png?resize=350%2C88&#038;ssl=1\" alt=\"\" class=\"wp-image-28503\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-11.png?w=350&amp;ssl=1 350w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image07-11.png?resize=300%2C75&amp;ssl=1 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The code contains an helper class with all the arithmetic conversion formulas. The map center calculation starting from the stadium arrays is the following:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nprivate centerMap(): MyCoordinates {\n\u00a0\u00a0\u00a0const helper = new GeographicalHelper();\n\u00a0\u00a0\u00a0const total = this.arenas.length;\n\u00a0\n\u00a0\u00a0\u00a0if (total &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0const points = this.ThreeDimensionalPointsOfArenas(this.arenas);\n\u00a0\u00a0\u00a0\u00a0\u00a0const averagePoint = helper.calculateAveragePoint(points);\n\u00a0\u00a0\u00a0\u00a0\u00a0return helper.convertThreeDimensionalPointToLatitudeAndLongitude(averagePoint);\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0return { latitude : 0, longitude : 0};\n}\n\u00a0\nprivate ThreeDimensionalPointsOfArenas(arenas: Arena&#x5B;]): ThreeDimensionalPoint&#x5B;] {\n\u00a0\u00a0\u00a0const helper = new GeographicalHelper();\n\u00a0\u00a0\u00a0const points = &#x5B;];\n\u00a0\u00a0\u00a0arenas.forEach( arena =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0points.push(helper.convertLatitudeAndLongitudeToThreeDimensionalPoint({latitude: arena.Latitude, longitude: arena.Longitude}));\n\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0return points;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">With the agm-map component, we can insert markers on the map. In our example, every stadium has its marker. It\u2019s possible to handle the click event on every single marker. To do this, an *ngFor directive it\u2019s enough.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n&lt;agm-map &#x5B;zoom]=&quot;zoom&quot; &#x5B;latitude]=&quot;center.latitude&quot; &#x5B;longitude]=&quot;center.longitude&quot;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&#x5B;mapTypeId]=&quot;&#039;hybrid&#039;&quot;&gt;\n\u00a0\u00a0\u00a0 \u00a0&lt;agm-marker \u00a0*ngFor=&quot;let locationItem of arenas;&quot;\n\u00a0\u00a0\u00a0 \u00a0&#x5B;latitude]=&quot;locationItem.Latitude&quot; &#x5B;longitude]=&quot;locationItem.Longitude&quot;\n\u00a0\u00a0\u00a0 \u00a0(markerClick)=&quot;clickedMarker($event)&quot;&gt;\n\u00a0\u00a0\u00a0 \u00a0&lt;\/agm-marker&gt;\n&lt;\/agm-map&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">We use the markerClick event to center the map on the marker and increase the zoom.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nclickedMarker(info: any) {\n\u00a0\u00a0\u00a0this.zoom = 16;\n\u00a0\u00a0\u00a0this.center.latitude = info.latitude;\n\u00a0\u00a0\u00a0this.center.longitude = info.longitude;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Every marker has an info window (agm-info-windows) showing further details about the selected arena.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;agm-marker \u00a0*ngFor=&quot;let locationItem of arenas;&quot;\n\u00a0\u00a0\u00a0 \u00a0&#x5B;latitude]=&quot;locationItem.Latitude&quot; &#x5B;longitude]=&quot;locationItem.Longitude&quot;\n\u00a0\u00a0\u00a0 \u00a0(markerClick)=&quot;clickedMarker($event)&quot;&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0&lt;agm-info-window #info &#x5B;disableAutoPan]=&quot;true&quot;&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;div class=&quot;card&quot;&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;div class=&quot;card-body&quot;&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;h5 class=&quot;card-title&quot;&gt;{{locationItem.Name}}&lt;\/h5&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h6 class=&quot;card-subtitle mb-1&quot;&gt;Capacity:{{locationItem.Capacity}}&lt;\/h6&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;a (click)=&quot;findHotels(locationItem)&quot; class=&quot;card-link&quot;&gt;\nClick to find nearby hotels&lt;\/a&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0 \u00a0 \u00a0&lt;\/agm-info-window&gt;\n&lt;\/agm-marker&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Inside the agm-info-window we can add a link to start further searches (like for example the nearby hotels):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" data-attachment-id=\"28506\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/attachment\/image08-9-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-9.png?fit=1112%2C283&amp;ssl=1\" data-orig-size=\"1112,283\" data-comments-opened=\"0\" data-image-title=\"image08-9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-9.png?fit=1024%2C261&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-9.png?resize=1024%2C261&#038;ssl=1\" alt=\"\" class=\"wp-image-28506\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-9-1024x261.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-9-980x249.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image08-9-480x122.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The code repository is available at the following&nbsp;<a href=\"https:\/\/github.com\/sorrentmutie\/angular-geography\" target=\"_blank\" rel=\"noreferrer noopener\">address<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See you next!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Let&#8217;s see how to show geographic data with Google Maps and Angular<\/p>\n","protected":false},"author":196716245,"featured_media":28484,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637524],"tags":[688637390],"class_list":["post-28509","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-en","tag-angular-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Maps<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Maps\" \/>\n<meta property=\"og:description\" content=\"Let&#039;s see how to show geographic data with Google Maps and Angular\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-18T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-20T17:06:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salvatore Sorrentino\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salvatore Sorrentino\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/\"},\"author\":{\"name\":\"Salvatore Sorrentino\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"headline\":\"Maps\",\"datePublished\":\"2019-06-18T22:00:00+00:00\",\"dateModified\":\"2021-05-20T17:06:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/\"},\"wordCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Angular\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/\",\"name\":\"Maps\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-06-18T22:00:00+00:00\",\"dateModified\":\"2021-05-20T17:06:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/maps-3-angular\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Maps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\",\"name\":\"Salvatore Sorrentino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"caption\":\"Salvatore Sorrentino\"},\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/author\\\/salvatore-sorrentinoblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Maps","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/","og_locale":"en_US","og_type":"article","og_title":"Maps","og_description":"Let's see how to show geographic data with Google Maps and Angular","og_url":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/","og_site_name":"Blexin","article_published_time":"2019-06-18T22:00:00+00:00","article_modified_time":"2021-05-20T17:06:26+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Salvatore Sorrentino","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Salvatore Sorrentino","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/"},"author":{"name":"Salvatore Sorrentino","@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"headline":"Maps","datePublished":"2019-06-18T22:00:00+00:00","dateModified":"2021-05-20T17:06:26+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/"},"wordCount":1,"image":{"@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1","keywords":["Angular"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/","url":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/","name":"Maps","isPartOf":{"@id":"https:\/\/blexin.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1","datePublished":"2019-06-18T22:00:00+00:00","dateModified":"2021-05-20T17:06:26+00:00","author":{"@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"breadcrumb":{"@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/en\/blog-en\/maps-3-angular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/en\/"},{"@type":"ListItem","position":2,"name":"Maps"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/en\/#website","url":"https:\/\/blexin.com\/en\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed","name":"Salvatore Sorrentino","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","caption":"Salvatore Sorrentino"},"url":"https:\/\/blexin.com\/en\/author\/salvatore-sorrentinoblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_likes_enabled":false,"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7pP","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/427c6883-62cc-44c1-be0d-4ffb824978ed.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/28509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/users\/196716245"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/comments?post=28509"}],"version-history":[{"count":4,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/28509\/revisions"}],"predecessor-version":[{"id":31984,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/28509\/revisions\/31984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/media\/28484"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/media?parent=28509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/categories?post=28509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/tags?post=28509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}