{"id":3140,"date":"2026-01-20T20:13:07","date_gmt":"2026-01-20T20:13:07","guid":{"rendered":"https:\/\/garyhengeveld.com\/wordpress\/?p=3140"},"modified":"2026-03-05T15:20:29","modified_gmt":"2026-03-05T15:20:29","slug":"doggie-park-locator","status":"publish","type":"post","link":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/","title":{"rendered":"Doggie Park Locator"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>Doggie Park Locator<\/title>\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet\/dist\/leaflet.css\" \/>\n<style>\n  body { margin: 0; font-family: Arial, sans-serif; background: #f7f7f7; }\n\n  h1 {\n    text-align: center;\n    margin: 15px 0 5px 0;\n    font-size: 32px;\n    color: #2b7a0b;\n    font-weight: 800;\n    letter-spacing: 1px;\n  }\n\n  #controls {\n    padding: 15px;\n    background: #fff;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    z-index: 1000;\n    position: relative;\n  }\n\n  #zip { padding: 10px; font-size: 16px; flex: 1; }\n\n  button {\n    padding: 10px 16px;\n    font-size: 16px;\n    background: #4CAF50;\n    color: #fff;\n    border: none;\n    cursor: pointer;\n  }\n\n  button:hover { background: #45a049; }\n\n  #status { margin-left: 10px; font-size: 14px; color: #333; }\n\n  #map { width: 100%; height: calc(100vh - 140px); }\n<\/style>\n<\/head>\n<body>\n\n<h1>Doggie Park Locator<\/h1>\n\n<div id=\"controls\">\n  <input id=\"zip\" type=\"text\" placeholder=\"Enter ZIP code\">\n  <button onclick=\"findDogParks()\">Search<\/button>\n  <span id=\"status\"><\/span>\n<\/div>\n\n<div id=\"map\"><\/div>\n\n<script src=\"https:\/\/unpkg.com\/leaflet\/dist\/leaflet.js\"><\/script>\n<script>\n\/\/ Initialize map\nlet map = L.map('map').setView([39.5, -98.35], 4);\nL.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', { maxZoom: 19 }).addTo(map);\nlet markersLayer = L.layerGroup().addTo(map);\n\n\/\/ Cartoon-style green paw icon (reliable PNG)\nconst dogIconUrl = \"https:\/\/cdn-icons-png.flaticon.com\/512\/616\/616408.png\";\n\nconst iconDogGreen = L.icon({\n  iconUrl: dogIconUrl,\n  iconSize: [45, 45],\n  iconAnchor: [22, 22]\n});\n\n\/\/ Overpass fallback servers\nconst OVERPASS_SERVERS = [\n  \"https:\/\/overpass-api.de\/api\/interpreter\",\n  \"https:\/\/overpass.kumi.systems\/api\/interpreter\",\n  \"https:\/\/overpass.openstreetmap.fr\/api\/interpreter\"\n];\n\nasync function findDogParks() {\n  const zip = document.getElementById('zip').value.trim();\n  const status = document.getElementById('status');\n\n  if (!zip) {\n    status.textContent = \"Enter a ZIP code.\";\n    return;\n  }\n\n  status.textContent = \"Looking up ZIP\u2026\";\n\n  try {\n    \/\/ ZIP \u2192 coordinates\n    const zipRes = await fetch(`https:\/\/api.zippopotam.us\/us\/${zip}`);\n    if (!zipRes.ok) throw new Error(\"Invalid ZIP code\");\n    const zipData = await zipRes.json();\n\n    const lat = parseFloat(zipData.places[0].latitude);\n    const lon = parseFloat(zipData.places[0].longitude);\n\n    map.setView([lat, lon], 13);\n    status.textContent = \"Searching for dog parks\u2026\";\n\n    \/\/ Stable Overpass query: dog parks only\n    const query = `\n      [out:json][timeout:25];\n      (\n        node[\"leisure\"=\"dog_park\"](around:5000,${lat},${lon});\n        way[\"leisure\"=\"dog_park\"](around:5000,${lat},${lon});\n        relation[\"leisure\"=\"dog_park\"](around:5000,${lat},${lon});\n        node[\"amenity\"=\"dog_park\"](around:5000,${lat},${lon});\n        way[\"amenity\"=\"dog_park\"](around:5000,${lat},${lon});\n        relation[\"amenity\"=\"dog_park\"](around:5000,${lat},${lon});\n      );\n      out center;\n    `;\n\n    let data = null;\n\n    \/\/ Try servers in order until one works\n    for (const server of OVERPASS_SERVERS) {\n      try {\n        const res = await fetch(server, { method: \"POST\", body: query });\n        if (res.ok) {\n          data = await res.json();\n          break;\n        }\n      } catch (e) {}\n    }\n\n    if (!data) throw new Error(\"All Overpass servers failed\");\n\n    markersLayer.clearLayers();\n\n    if (!data.elements || data.elements.length === 0) {\n      status.textContent = \"No dog parks found nearby.\";\n      return;\n    }\n\n    status.textContent = `Found ${data.elements.length} dog parks`;\n\n    data.elements.forEach(el => {\n      const tags = el.tags || {};\n      const name = tags.name || \"Dog Park\";\n\n      const lat = el.lat || (el.center && el.center.lat);\n      const lon = el.lon || (el.center && el.center.lon);\n      if (!lat || !lon) return;\n\n      L.marker([lat, lon], { icon: iconDogGreen })\n        .addTo(markersLayer)\n        .bindPopup(`<strong>${name}<\/strong><br>Dog park`);\n    });\n\n  } catch (err) {\n    status.textContent = \"Error: \" + err.message;\n  }\n}\n<\/script>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Doggie Park Locator Doggie Park Locator Search<\/p>\n","protected":false},"author":1,"featured_media":3154,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wprm-recipe-roundup-name":"","wprm-recipe-roundup-description":"","footnotes":""},"categories":[108,27,106],"tags":[],"class_list":["post-3140","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-banner","category-pets","category-software"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\r\n<title>Doggie Park Locator - GaryHengeveld<\/title>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Doggie Park Locator - GaryHengeveld\" \/>\r\n<meta property=\"og:description\" content=\"Doggie Park Locator Doggie Park Locator Search\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/\" \/>\r\n<meta property=\"og:site_name\" content=\"GaryHengeveld\" \/>\r\n<meta property=\"article:published_time\" content=\"2026-01-20T20:13:07+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2026-03-05T15:20:29+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/01\/dog-park.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"200\" \/>\r\n\t<meta property=\"og:image:height\" content=\"155\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"ghd796\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ghd796\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/\"},\"author\":{\"name\":\"ghd796\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/a56bd109b9611da934105651f63c1988\"},\"headline\":\"Doggie Park Locator\",\"datePublished\":\"2026-01-20T20:13:07+00:00\",\"dateModified\":\"2026-03-05T15:20:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/\"},\"wordCount\":10,\"publisher\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/a56bd109b9611da934105651f63c1988\"},\"image\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/dog-park.jpg\",\"articleSection\":[\"Banner\",\"Pets\",\"Software\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/\",\"url\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/\",\"name\":\"Doggie Park Locator - GaryHengeveld\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/dog-park.jpg\",\"datePublished\":\"2026-01-20T20:13:07+00:00\",\"dateModified\":\"2026-03-05T15:20:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/dog-park.jpg\",\"contentUrl\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/dog-park.jpg\",\"width\":200,\"height\":155},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/doggie-park-locator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Doggie Park Locator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/\",\"name\":\"GaryHengeveld\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/a56bd109b9611da934105651f63c1988\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/a56bd109b9611da934105651f63c1988\",\"name\":\"ghd796\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/GLOGO.png\",\"url\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/GLOGO.png\",\"contentUrl\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/GLOGO.png\",\"width\":150,\"height\":150,\"caption\":\"ghd796\"},\"logo\":{\"@id\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/GLOGO.png\"},\"url\":\"https:\\\/\\\/garyhengeveld.com\\\/wordpress\\\/author\\\/ghd796\\\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Doggie Park Locator - GaryHengeveld","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:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/","og_locale":"en_US","og_type":"article","og_title":"Doggie Park Locator - GaryHengeveld","og_description":"Doggie Park Locator Doggie Park Locator Search","og_url":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/","og_site_name":"GaryHengeveld","article_published_time":"2026-01-20T20:13:07+00:00","article_modified_time":"2026-03-05T15:20:29+00:00","og_image":[{"width":200,"height":155,"url":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/01\/dog-park.jpg","type":"image\/jpeg"}],"author":"ghd796","twitter_card":"summary_large_image","twitter_misc":{"Written by":"ghd796","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#article","isPartOf":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/"},"author":{"name":"ghd796","@id":"https:\/\/garyhengeveld.com\/wordpress\/#\/schema\/person\/a56bd109b9611da934105651f63c1988"},"headline":"Doggie Park Locator","datePublished":"2026-01-20T20:13:07+00:00","dateModified":"2026-03-05T15:20:29+00:00","mainEntityOfPage":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/"},"wordCount":10,"publisher":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/#\/schema\/person\/a56bd109b9611da934105651f63c1988"},"image":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#primaryimage"},"thumbnailUrl":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/01\/dog-park.jpg","articleSection":["Banner","Pets","Software"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/","url":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/","name":"Doggie Park Locator - GaryHengeveld","isPartOf":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#primaryimage"},"image":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#primaryimage"},"thumbnailUrl":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/01\/dog-park.jpg","datePublished":"2026-01-20T20:13:07+00:00","dateModified":"2026-03-05T15:20:29+00:00","breadcrumb":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#primaryimage","url":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/01\/dog-park.jpg","contentUrl":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/01\/dog-park.jpg","width":200,"height":155},{"@type":"BreadcrumbList","@id":"https:\/\/garyhengeveld.com\/wordpress\/doggie-park-locator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/garyhengeveld.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Doggie Park Locator"}]},{"@type":"WebSite","@id":"https:\/\/garyhengeveld.com\/wordpress\/#website","url":"https:\/\/garyhengeveld.com\/wordpress\/","name":"GaryHengeveld","description":"","publisher":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/#\/schema\/person\/a56bd109b9611da934105651f63c1988"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/garyhengeveld.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/garyhengeveld.com\/wordpress\/#\/schema\/person\/a56bd109b9611da934105651f63c1988","name":"ghd796","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/03\/GLOGO.png","url":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/03\/GLOGO.png","contentUrl":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/03\/GLOGO.png","width":150,"height":150,"caption":"ghd796"},"logo":{"@id":"https:\/\/garyhengeveld.com\/wordpress\/wp-content\/uploads\/2026\/03\/GLOGO.png"},"url":"https:\/\/garyhengeveld.com\/wordpress\/author\/ghd796\/"}]}},"_links":{"self":[{"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/posts\/3140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3140"}],"version-history":[{"count":1,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/posts\/3140\/revisions"}],"predecessor-version":[{"id":3141,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/posts\/3140\/revisions\/3141"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/media\/3154"}],"wp:attachment":[{"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garyhengeveld.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}