template.rst 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. Templates With FreeMarker
  2. -------------------------
  3. MapML templates are written in `Freemarker <http://www.freemarker.org/>`_ , a Java-based template engine. The templates below are feature type specific and will not be applied in multi-layer WMS requests. See :ref:`tutorial_freemarkertemplate` for general information about FreeMarker implementation in GeoServer.
  4. MapML supports the following template types:
  5. +----------------------------+--------------------------------------------------------------------------------------+
  6. | Template File Name | Purpose |
  7. +============================+======================================================================================+
  8. | ``mapml-preview-head.ftl`` | Used to insert stylesheet links or elements into the MapML HTML preview viewer. |
  9. +----------------------------+--------------------------------------------------------------------------------------+
  10. | ``mapml-head.ftl`` | Used to insert ``mapml-link`` elements into the MapML map-head section. |
  11. +----------------------------+--------------------------------------------------------------------------------------+
  12. | ``mapml-feature-head.ftl`` | Used to insert ``map-style`` elements into a MapML feature document. |
  13. +----------------------------+--------------------------------------------------------------------------------------+
  14. | ``mapml-feature.ftl`` | Used to rewrite MapML features, with ability to change attributes, styles, |
  15. | | geometries, and add links |
  16. +----------------------------+--------------------------------------------------------------------------------------+
  17. GetMap MapML HTML Preview/Layer Preview Head Stylesheet Templating
  18. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  19. The preview is returned when the format includes ``subtype=mapml``. The preview is an HTML document that includes a ``head`` section with a link to the stylesheet. The default preview viewer is a simple viewer that includes a link to the default stylesheet.
  20. A template can be created to insert links to whole stylesheet or actual stylesheet elements.
  21. We can do this by creating a file called ``mapml-preview-head.ftl`` in the GeoServer data directory in the directory for the layer that we wish to append links to. For example we could create this file under ``workspaces/topp/states_shapefile/states``. To add stylesheet links and stylesheet elements, we enter the following text inside this new file:
  22. .. code-block:: html
  23. <!-- Added from the template -->
  24. <link rel="stylesheet" href="mystyle.css">
  25. <style>
  26. body {
  27. background-color: linen;
  28. }
  29. </style>
  30. <!-- End of added from the template -->
  31. This would result in a head section that would resemble:
  32. .. code-block:: html
  33. <head>
  34. <title>USA Population</title>
  35. <meta charset='utf-8'>
  36. <script type="module" src="http://localhost:8080/geoserver/mapml/viewer/widget/mapml-viewer.js"></script>
  37. <style>
  38. html, body { height: 100%; }
  39. * { margin: 0; padding: 0; }
  40. mapml-viewer:defined { max-width: 100%; width: 100%; height: 100%; border: none; vertical-align: middle }
  41. mapml-viewer:not(:defined) > * { display: none; } nlayer- { display: none; }
  42. </style>
  43. <noscript>
  44. <style>
  45. mapml-viewer:not(:defined) > :not(layer-) { display: initial; }
  46. </style>
  47. </noscript>
  48. <!-- Added from the template -->
  49. <link rel="stylesheet" href="mystyle.css">
  50. <style>
  51. body {
  52. background-color: linen;
  53. }
  54. </style>
  55. <!-- End of added from the template -->
  56. </head>
  57. GetMap MapML Head Stylesheet Templating
  58. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  59. The MapML format includes a map-head element that includes map-link elements to link to other resources, including map style variants. Additional map-link elements can be added to the map-head element by creating a ``mapml-head.ftl`` template in the GeoServer data directory in the directory for the layer we wish to append map-links to. For example we could create the ``mapml-head.ftl`` file under ``workspaces/tiger/nyc/poly_landmarks_shapefile/poly_landmarks``:
  60. .. code-block:: bash
  61. <!-- Added from the template -->
  62. <map-style>.polygon-r1-s1{stroke-opacity:3.0; stroke-dashoffset:4; stroke-width:2.0; fill:#AAAAAA; fill-opacity:3.0; stroke:#DD0000; stroke-linecap:butt}</map-style>
  63. <map-link href="${serviceLink("${base}","${path}","${kvp}")}" rel="\${rel}" title="templateinsertedstyle"/>
  64. <!-- End of added from the template -->
  65. This would result in a map-head section that would resemble (note the inserted css styles and map-link):
  66. .. code-block:: html
  67. <map-head>
  68. <map-title>Manhattan (NY) landmarks</map-title>
  69. <map-base href="http://localhost:8080/geoserver/wms"/>
  70. <map-meta charset="utf-8"/>
  71. <map-meta content="text/mapml;projection=WGS84" http-equiv="Content-Type"/>
  72. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3AWGS84&amp;service=WMS&amp;bbox=-180.0%2C-90.0%2C180.0%2C90.0&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;styles=grass&amp;version=1.3.0&amp;height=384" rel="style" title="grass"/>
  73. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3AWGS84&amp;service=WMS&amp;bbox=-180.0%2C-90.0%2C180.0%2C90.0&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;styles=restricted&amp;version=1.3.0&amp;height=384" rel="style" title="restricted"/>
  74. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3AWGS84&amp;service=WMS&amp;bbox=-180.0%2C-90.0%2C180.0%2C90.0&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;styles=polygon%2C&amp;version=1.3.0&amp;height=384" rel="self style" title="polygon,"/>
  75. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3AOSMTILE&amp;service=WMS&amp;bbox=-2.0037508342789244E7%2C-2.364438881673656E7%2C2.0037508342789244E7%2C2.364438881673657E7&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;version=1.3.0&amp;height=384" rel="alternate" projection="OSMTILE"/>
  76. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3ACBMTILE&amp;service=WMS&amp;bbox=-8079209.971443829%2C-3626624.322362231%2C8281691.192343056%2C1.233598344760506E7&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;version=1.3.0&amp;height=384" rel="alternate" projection="CBMTILE"/>
  77. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3AAPSTILE&amp;service=WMS&amp;bbox=-1.06373184982574E7%2C-1.06373184982574E7%2C1.46373184982574E7%2C1.46373184982574E7&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;version=1.3.0&amp;height=384" rel="alternate" projection="APSTILE"/>
  78. <map-link href="http://localhost:8080/geoserver/tiger/wms?format_options=mapml-wms-format%3Aimage%2Fpng&amp;request=GetMap&amp;crs=MapML%3AWGS84&amp;service=WMS&amp;bbox=-180.0%2C-90.0%2C180.0%2C90.0&amp;format=text%2Fmapml&amp;layers=poly_landmarks&amp;width=768&amp;styles=templateinsertedstyle&amp;version=1.3.0&amp;height=384" rel="style" title="templateinsertedstyle"/>
  79. <map-style>.bbox {display:none} .poly_landmarks-r1-s1{stroke-opacity:1.0; stroke-dashoffset:0; stroke-width:1.0; fill:#B4DFB4; fill-opacity:1.0; stroke:#88B588; stroke-linecap:butt} .poly_landmarks-r2-s1{stroke-opacity:1.0; stroke-dashoffset:0; stroke-width:1.0; fill:#8AA9D1; fill-opacity:1.0; stroke:#436C91; stroke-linecap:butt} .poly_landmarks-r3-s1{stroke-opacity:1.0; stroke-dashoffset:0; stroke-width:1.0; fill:#FDE5A5; fill-opacity:0.75; stroke:#6E6E6E; stroke-linecap:butt} .polygon-r1-s1{stroke-opacity:3.0; stroke-dashoffset:4; stroke-width:2.0; fill:#AAAAAA; fill-opacity:3.0; stroke:#DD0000; stroke-linecap:butt}</map-style>
  80. </map-head>
  81. GetMap Features Inline Style Class Templating
  82. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  83. MapML in feature format (when the parameter format_options=mapmlfeatures:true is set) has a map-head element that includes map-style elements where the style classes are defined.
  84. Within the map-body, map-feature elements include map-geometry with map-coordinates.
  85. The ``mapml-feature-head.ftl`` is a file that can be used to insert map-style elements with the style class definitions.
  86. This file is placed in the GeoServer data directory in the directory for the layer we wish to append style classes to. For example we could create the file under ``workspaces/tiger/nyc/poly_landmarks_shapefile/poly_landmarks``.
  87. The ``mapml-feature-head.ftl`` file would look like::
  88. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  89. <map-head>
  90. <map-style>.desired {stroke-dashoffset:3}</map-style>
  91. </map-head>
  92. </mapml->
  93. This would result in a MapML feature output header that would resemble:
  94. .. code-block:: xml
  95. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  96. <map-head>
  97. <map-title>poi</map-title>
  98. <map-meta charset="UTF-8"/>
  99. <map-meta content="text/mapml" http-equiv="Content-Type"/>
  100. <map-meta name="extent" content="top-left-longitude=-74.011832,top-left-latitude=40.711946,bottom-right-longitude=-74.008573,bottom-right-latitude=40.707547"/>
  101. <map-meta name="cs" content="gcrs"/>
  102. <map-meta name="projection" content="MapML:EPSG:4326"/>
  103. <map-style>.bbox {display:none} .polygon-r1-s1{stroke-opacity:1.0; stroke-dashoffset:0; stroke-width:1.0; fill:#AAAAAA; fill-opacity:1.0; stroke:#000000; stroke-linecap:butt}</map-style>
  104. <map-style>.desired {stroke-dashoffset:3}</map-style>
  105. </map-head>
  106. </mapml->
  107. The ``mapml-feature.ftl`` is a file can be used to insert map-style elements with the style class definitions into the map-head. Note that this section of the template adds the styles listed but does not remove any existing styles.
  108. It can be used to edit map-property names and values in a manner similar to :ref:`tutorials_getfeatureinfo_geojson`. Note that this template represents a full replacement of the feature. If there are attributes that need to be included without change, they need to be referenced in the template. It also can be used to add style class identifiers to map-feature elements based on the feature identifier or to wrap groupings of map-coordinates with spans that specify the style class based on an index of coordinate order (zero based index that starts at the first coordinate pair of each feature).
  109. This file is placed in the GeoServer data directory in the directory for the layer we wish to append style classes to. For example we could create the file under ``workspaces/tiger/poly_landmarks_shapefile/poly_landmarks``.
  110. An example ``mapml-feature.ftl`` file to modify a point layer would look like::
  111. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  112. <map-head>
  113. </map-head>
  114. <map-body>
  115. <map-feature>
  116. <#list attributes as attribute>
  117. <#if attribute.name == "MAINPAGE">
  118. <map-properties name="UPDATED ${attribute.name}" value="CHANGED ${attribute.value}"/>
  119. <#else>
  120. <map-properties name="${attribute.name}" value="${attribute.value}"/>
  121. </#if>
  122. </#list>
  123. <#list attributes as gattribute>
  124. <#if gattribute.isGeometry>
  125. <map-geometry>
  126. <!-- by default (if unspecified), map-a type attribute <map-a type="text/mapml"...> -->
  127. <!-- is taken to mean that the link is to this or another MapML map layer, based on the -->
  128. <!-- value of the <map-a target="_self" ...> "_self" is the default if unspecified -->
  129. <!-- so, to link to another location in the current map, use href="#zoom,longitude,latitude -->
  130. <!-- shown below. For further information on how to create links of different behaviours, -->
  131. <!-- please refer to https://maps4html.org/web-map-doc/docs/other-elements/map-a/#target -->
  132. <#if attributes.NAME.value == "museam"><map-a href="#16,-74.01046109936,40.70758762626"></#if>
  133. <map-point>
  134. <map-coordinates>
  135. <#list gattribute.rawValue.coordinates as coord>${coord.x} ${coord.y}</#list>
  136. </map-coordinates>
  137. </map-point>
  138. <!-- DO NOT FORGET to close your tags, else look for errors in your log files -->
  139. <#if attributes.NAME.value == "museam"></map-a></#if>
  140. </map-geometry>
  141. </#if>
  142. </#list>
  143. </map-feature>
  144. </map-body>
  145. </mapml->
  146. This would result in a MapML feature output body that would resemble this fragment::
  147. <mapml-
  148. xmlns="http://www.w3.org/1999/xhtml">
  149. <map-head>
  150. <map-title>poi</map-title>
  151. <map-meta charset="UTF-8"/>
  152. <map-meta content="text/mapml" http-equiv="Content-Type"/>
  153. <map-meta name="cs" content="gcrs"/>
  154. <map-meta name="projection" content="WGS84"/>
  155. <map-meta name="extent" content="top-left-longitude=-74.011832,top-left-latitude=40.711946,bottom-right-longitude=-74.008573,bottom-right-latitude=40.707547"/>
  156. <map-style>.bbox {display:none} .poi-r1-s1{r:88.0; well-known-name:circle; opacity:1.0; fill:#FF0000; fill-opacity:1.0} .poi-r1-s2{r:56.0; well-known-name:circle; opacity:1.0; fill:#FFFFFF; fill-opacity:1.0}</map-style>
  157. </map-head>
  158. <map-body>
  159. <map-feature id="poi.1" class="poi-r1-s1 poi-r1-s2">
  160. <map-geometry>
  161. <map-a href="#16,-74.01046109936,40.70758762626">
  162. <map-point>
  163. <map-coordinates>-74.01046109936 40.70758762626</map-coordinates>
  164. </map-point>
  165. </map-a>
  166. </map-geometry>
  167. <map-properties>
  168. <table
  169. xmlns="http://www.w3.org/1999/xhtml">
  170. <thead>
  171. <tr>
  172. <th role="columnheader" scope="col">Property name</th>
  173. <th role="columnheader" scope="col">Property value</th>
  174. </tr>
  175. </thead>
  176. <tbody>
  177. <tr>
  178. <th scope="row">CHANGED MAINPAGE</th>
  179. <td itemprop="MAINPAGE">UPDATED pics/22037827-L.jpg</td>
  180. </tr>
  181. </tbody>
  182. </table>
  183. </map-properties>
  184. </map-feature>
  185. Note that in addition to tagging the coordinates with a style class, the template also changes the name of the MAINPAGE property to "UPDATED MAINPAGE" and the value to "CHANGED pics/22037827-L.jpg".
  186. For linestring features the template would look like::
  187. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  188. <map-head>
  189. </map-head>
  190. <map-body>
  191. <map-feature>
  192. <#list attributes as attribute>
  193. <#if attribute.isGeometry>
  194. <map-geometry>
  195. <#if attributes.NAME.value == "Washington Sq W"><map-a href="#16,-73.999559,40.73158"></#if>
  196. <map-linestring>
  197. <map-coordinates>
  198. <#list attribute.rawValue.coordinates as coord> ${coord.x} ${coord.y}</#list>
  199. </map-coordinates></map-linestring>
  200. <#if attributes.NAME.value == "Washington Sq W"></map-a></#if></map-geometry>
  201. </#if>
  202. </#list>
  203. </map-feature>
  204. </map-body>
  205. </mapml->
  206. For polygon features the template would look like::
  207. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  208. <map-head>
  209. </map-head>
  210. <map-body>
  211. <map-feature>
  212. <#list attributes as attribute>
  213. <#if attribute.isGeometry>
  214. <map-geometry>
  215. <map-a href="#16,-1,0">
  216. <map-polygon>
  217. <#assign shell = attribute.rawValue.getExteriorRing()>
  218. <map-coordinates>
  219. <#list shell.coordinates as coord> ${coord.x} ${coord.y}</#list>
  220. </map-coordinates>
  221. <#list 0 ..< attribute.rawValue.getNumInteriorRing() as index>
  222. <#assign hole = attribute.rawValue.getInteriorRingN(index)><map-coordinates><#list hole.coordinates as coord> ${coord.x} ${coord.y} </#list></map-coordinates></#list>
  223. </map-polygon>
  224. </map-a>
  225. </map-geometry>
  226. </#if>
  227. </#list>
  228. </map-feature>
  229. </map-body>
  230. </mapml- >
  231. For multipoint features the template would look like::
  232. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  233. <map-head>
  234. </map-head>
  235. <map-body>
  236. <map-feature>
  237. <#list attributes as gattribute>
  238. <#if gattribute.isGeometry>
  239. <map-geometry>
  240. <map-a href="#16,-74.01046109936,40.70758762626">
  241. <map-multipoint>
  242. <#list 0 ..< gattribute.rawValue.getNumGeometries() as index>
  243. <#assign point = gattribute.rawValue.getGeometryN(index)>
  244. <map-coordinates><#list point.coordinates as coord>
  245. ${coord.x} ${coord.y}</#list></map-coordinates>
  246. </#list>
  247. </map-multipoint>
  248. </map-a>
  249. </map-geometry>
  250. </#if>
  251. </#list>
  252. </map-feature>
  253. </map-body>
  254. </mapml->
  255. For multiline features the template would like::
  256. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  257. <map-head>
  258. </map-head>
  259. <map-body>
  260. <map-feature>
  261. <#list attributes as attribute>
  262. <#if attribute.isGeometry>
  263. <map-geometry>
  264. <map-a href="#16,-0.0042,-0.0006">
  265. <map-multilinestring>
  266. <#list 0 ..< attribute.rawValue.getNumGeometries() as index>
  267. <#assign line = attribute.rawValue.getGeometryN(index)>
  268. <map-coordinates><#list line.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates>
  269. </#list>
  270. </map-multilinestring>
  271. </map-a>
  272. </map-geometry>
  273. </#if>
  274. </#list>
  275. </map-feature>
  276. </map-body>
  277. </mapml->
  278. For multipolygon features the template would like::
  279. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  280. <map-head>
  281. </map-head>
  282. <map-body>
  283. <map-feature>
  284. <#if attributes.LAND.value == "72.0">
  285. <#list attributes as attribute>
  286. <#if attribute.isGeometry>
  287. <map-geometry>
  288. <map-a href="#16,-0.0042,-0.0006">
  289. <map-multipolygon>
  290. <#list 0 ..< attribute.rawValue.getNumGeometries() as index>
  291. <#assign polygon = attribute.rawValue.getGeometryN(index)>
  292. <map-polygon>
  293. <#assign shell = polygon.getExteriorRing()>
  294. <map-coordinates><#list shell.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates>
  295. <#list 0 ..< polygon.getNumInteriorRing() as index>
  296. <#assign hole = polygon.getInteriorRingN(index)>
  297. <map-coordinates><#list hole.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates></#list>
  298. </map-polygon>
  299. </#list>
  300. </map-multipolygon>
  301. </map-a>
  302. </map-geometry>
  303. </#if>
  304. </#list>
  305. <#else>
  306. <#list attributes as attribute>
  307. <#if attribute.isGeometry>
  308. <map-geometry>
  309. <map-multipolygon>
  310. <#list 0 ..< attribute.rawValue.getNumGeometries() as index>
  311. <#assign polygon = attribute.rawValue.getGeometryN(index)>
  312. <map-polygon>
  313. <#assign shell = polygon.getExteriorRing()>
  314. <map-coordinates><#list shell.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates>
  315. <#list 0 ..< polygon.getNumInteriorRing() as index>
  316. <#assign hole = polygon.getInteriorRingN(index)><map-coordinates>
  317. <#list hole.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates>
  318. </#list>
  319. </map-polygon>
  320. </#list>
  321. </map-multipolygon>
  322. </map-geometry>
  323. </#if>
  324. </#list>
  325. </#if>
  326. </map-feature>
  327. </map-body>
  328. </mapml->
  329. Templates can also be used to create MapML GeometryCollections that consist of multiple geometry types. For example, a template that creates a GeometryCollection that contains points and linestring representations of the NYC TIGER POI sample data would look like::
  330. <mapml- xmlns="http://www.w3.org/1999/xhtml">
  331. <map-head>
  332. </map-head>
  333. <map-body>
  334. <map-feature>
  335. <#list attributes as attribute>
  336. <#if attribute.isGeometry>
  337. <map-geometry>
  338. <map-a href="#16,-1,0">
  339. <map-geometrycollection>
  340. <map-linestring>
  341. <map-coordinates><#list attribute.rawValue.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates>
  342. </map-linestring>
  343. <map-point>
  344. <map-coordinates><#list attribute.rawValue.coordinates as coord> ${coord.x} ${coord.y}</#list></map-coordinates>
  345. </map-point>
  346. </map-geometrycollection>
  347. </map-a>
  348. </map-geometry>
  349. </#if>
  350. </#list>
  351. </map-feature>
  352. </map-body>
  353. </mapml->
  354. This would result in a MapML feature output body that would resemble::
  355. <mapml-
  356. xmlns="http://www.w3.org/1999/xhtml">
  357. <map-head>
  358. <map-title>poi</map-title>
  359. <map-meta charset="UTF-8"/>
  360. <map-meta content="text/mapml" http-equiv="Content-Type"/>
  361. <map-meta name="cs" content="gcrs"/>
  362. <map-meta name="projection" content="WGS84"/>
  363. <map-meta name="extent" content="top-left-longitude=-74.011832,top-left-latitude=40.711946,bottom-right-longitude=-74.008573,bottom-right-latitude=40.707547"/>
  364. <map-style>.bbox {display:none} .poi-r1-s1{r:88.0; well-known-name:circle; opacity:1.0; fill:#FF0000; fill-opacity:1.0} .poi-r1-s2{r:56.0; well-known-name:circle; opacity:1.0; fill:#FFFFFF; fill-opacity:1.0}</map-style>
  365. </map-head>
  366. <map-body>
  367. <map-feature id="poi.4" class="poi-r1-s1 poi-r1-s2">
  368. <map-geometry>
  369. <map-a href="#16,-1,0">
  370. <map-geometrycollection>
  371. <map-linestring>
  372. <map-coordinates> -74.00857344353 40.71194564907</map-coordinates>
  373. </map-linestring>
  374. <map-point>
  375. <map-coordinates> -74.00857344353 40.71194564907</map-coordinates>
  376. </map-point>
  377. </map-geometrycollection>
  378. </map-a>
  379. </map-geometry>
  380. <map-properties>
  381. <table
  382. xmlns="http://www.w3.org/1999/xhtml">
  383. <thead>
  384. <tr>
  385. <th role="columnheader" scope="col">Property name</th>
  386. <th role="columnheader" scope="col">Property value</th>
  387. </tr>
  388. </thead>
  389. <tbody>
  390. <tr>
  391. <th scope="row">NAME</th>
  392. <td itemprop="NAME">lox</td>
  393. </tr>
  394. <tr>
  395. <th scope="row">THUMBNAIL</th>
  396. <td itemprop="THUMBNAIL">pics/22037884-Ti.jpg</td>
  397. </tr>
  398. <tr>
  399. <th scope="row">MAINPAGE</th>
  400. <td itemprop="MAINPAGE">pics/22037884-L.jpg</td>
  401. </tr>
  402. </tbody>
  403. </table>
  404. </map-properties>
  405. </map-feature>
  406. </map-body>
  407. </mapml->