{"id":29544,"date":"2023-07-26T07:00:00","date_gmt":"2023-07-26T14:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=29544"},"modified":"2025-11-06T15:26:30","modified_gmt":"2025-11-06T23:26:30","slug":"geo-tag-your-images","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images","title":{"rendered":"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Geo Tagging, a versatile process applicable to images and videos, websites, text messages, and QR codes, involves adding geographic coordinates to media. This process usually centers on assigning latitude and longitude but can also encompass additional fields such as elevation, compass bearing, time stamps, and other contextual information.<\/p>\n<h2>Why Add Geo Tag to an Image?<\/h2>\n<p>If you have geo tagged images, you can extract the latitude and longitude to determine the city and country. This data can be set as structured metadata in Cloudinary, allowing you to easily search and categorize within your library.<\/p>\n<p>Understanding the presence of geo-tags in your media is straightforward: for images, simply right-click, select <strong>Properties<\/strong> or <strong>Information<\/strong>, and check the GPS section in the <strong>Details<\/strong> tab. Tools like Geoimgr or SunCalc can also assist in identifying geotags in photos. Besides aiding in tracking trips or enhancing the local search ranking of a website, geotagging also entails privacy considerations; smartphones, by default, geo tag photos taken, a feature that can be disabled for privacy.<\/p>\n<p>For example, you can <a href=\"https:\/\/www.bhphotovideo.com\/explora\/photography\/tips-and-solutions\/how-geotag-your-photos\">set up<\/a> your iPhone or Android device to add GPS location data, but your images will be saved with EXIF metadata, which includes geo tag <a href=\"https:\/\/en.wikipedia.org\/wiki\/Exif\">EXIF<\/a> data. As the GPS data is embedded within the binary data of the image, it can\u2019t be used for searching and categorizing. In this blog post, I\u2019ll show you how to extract, translate, and expose the location details so that you can search for and categorize your image assets.\n\u200b\nTo achieve this, we\u2019ll:\n\u200b<\/p>\n<ol>\n<li>Create the metadata definition.<\/li>\n<li>Create an upload preset on Cloudinary to extract the EXIF information.<\/li>\n<li>Set the latitude, longitude, and altitude information as <a href=\"https:\/\/cloudinary.com\/documentation\/dam_admin_structured_metadata\">structured metadata<\/a>.<\/li>\n<li>Translate the latitude and longitude to a city, state, and country.<\/li>\n<li>Finally, set the city, state, and country as additional structured metadata.<\/li>\n<\/ol>\n<p>Not using Cloudinary right now? You can <a href=\"https:\/\/cloudinary.com\/users\/register\/free\">sign up for Cloudinary for free and for life<\/a>. You\u2019ll get the ability to add geo-tags to images and all of Cloudinary, too, so you can do everything discussed in this article for free.<\/p>\n<p>Let\u2019s get started!\n\u200b<\/p>\n<h2>Geo Tag Photo With Location Information<\/h2>\n<p>\u200b\nThe simplest way to get a geo tagged image is from your cell phone. If you\u2019ve enabled geo-tagging, images should already have the location data. I\u2019ll use the following image:\n\u200b\n<img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/dbmataac4\/image\/upload\/v1685557684\/location.jpg\" alt=\"Image showing road winding through woods and hills to be used for the how to get geotag photo project\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"3024\" height=\"4032\"\/><\/p>\n<p>To verify, I\u2019ll use the <a href=\"https:\/\/exiftool.org\/\">exiftool<\/a> installed on my laptop. Alternatively, you could use the <a href=\"https:\/\/exifinfo.org\/\">web version<\/a> of the tool.\n\u200b<\/p>\n<pre class=\"js-syntax-highlighted\"><code>$ exiftool location_test.jpg | grep -i gps | sort\n\u200b\nGPS Altitude                    : 21.8 m Below Sea Level\nGPS Altitude Ref                : Below Sea Level\nGPS Date Stamp                  : 2023:06:04\nGPS Date\/Time                   : 2023:06:04 03:15:14Z\nGPS Latitude                    : 37 deg 33' 49.66&quot; N\nGPS Latitude Ref                : North\nGPS Longitude                   : 122 deg 2' 5.04&quot; W\nGPS Longitude Ref               : West\nGPS Position                    : 37 deg 33' 49.66&quot; N, 122 deg 2' 5.04&quot; W\nGPS Time Stamp                  : 03:15:14\n<\/code><\/pre>\n<p>\u200b\nAs you can see, the image has been geo-tagged. For our purpose, we only need the latitude and longitude.\n\u200b<\/p>\n<h2>Add Geo Tag to Image Step 1: Create Metadata Definitions<\/h2>\n<p>\u200b\nI want to automate the process of extracting the latitude and longitude from the geotag EXIF data, and insert them as structured metadata fields. For this, I created metadata definitions for six fields: latitude, longitude, altitude, city, state, and country. This can be done using the <a href=\"https:\/\/cloudinary.com\/documentation\/admin_api\">create metadata field<\/a> Admin API.\n\u200b<\/p>\n<pre class=\"js-syntax-highlighted\"><code>cld admin add_metadata_field  '{&quot;external_id&quot;: &quot;city&quot;, &quot;label&quot;: &quot;City&quot;, &quot;type&quot;: &quot;string&quot;}'\n<\/code><\/pre>\n<p>\u200b<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">{\n  <span class=\"hljs-attr\">\"type\"<\/span>: <span class=\"hljs-string\">\"string\"<\/span>,\n  <span class=\"hljs-attr\">\"external_id\"<\/span>: <span class=\"hljs-string\">\"city\"<\/span>,\n  <span class=\"hljs-attr\">\"label\"<\/span>: <span class=\"hljs-string\">\"City\"<\/span>,\n  <span class=\"hljs-attr\">\"mandatory\"<\/span>: <span class=\"hljs-literal\">false<\/span>,\n  <span class=\"hljs-attr\">\"default_value\"<\/span>: <span class=\"hljs-literal\">null<\/span>,\n  <span class=\"hljs-attr\">\"validation\"<\/span>: <span class=\"hljs-literal\">null<\/span>,\n  <span class=\"hljs-attr\">\"default_disabled\"<\/span>: <span class=\"hljs-literal\">false<\/span>,\n  <span class=\"hljs-attr\">\"restrictions\"<\/span>: {\n    <span class=\"hljs-attr\">\"readonly_ui\"<\/span>: <span class=\"hljs-literal\">false<\/span>\n  }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>\u200b\nYou should have metadata definitions like this:\n\u200b<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/akshayranganath-res.cloudinary.com\/image\/upload\/c_crop,g_north,h_650,w_1060,f_auto,q_auto\/blog\/metadata-definitions.png\" alt=\"metadata definitions\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1060\" height=\"650\"\/>\n\u200b<\/p>\n<h2>Add Geo Tag to Image Step 2: Create an Upload Preset<\/h2>\n<p>\u200b\nNext, we\u2019ll need to extract the location information from geotag EXIF and insert it into the metadata fields <code>latitude<\/code>, <code>longitude<\/code>, and <code>altitude<\/code>. To do so, I used the <a href=\"https:\/\/cloudinary.com\/documentation\/analysis_on_upload#evaluating_and_modifying_upload_parameters\"><code>eval<\/code><\/a> within an <a href=\"https:\/\/cloudinary.com\/documentation\/admin_api#create_an_upload_preset\">upload preset<\/a>.\n\u200b<\/p>\n<pre class=\"js-syntax-highlighted\"><code>cld -C react admin create_upload_preset \\\nname=gps1 eval=&quot;upload_options.metadata = \\\n'altitude=' + (resource_info.image_metadata.GPSAltitude || 0) + \\\n'|latitude=' + (resource_info.image_metadata.GPSLatitude || 0) + \\\n'|longitude=' + (resource_info.image_metadata.GPSLongitude || 0)&quot;```\n\u200b\n```json\n{\n  &quot;message&quot;: &quot;created&quot;,\n  &quot;name&quot;: &quot;gps&quot;\n}\n<\/code><\/pre>\n<p>\u200b<\/p>\n<h2>Add Geo Tag to Image Step 3: Upload the Image and Set Metadata<\/h2>\n<p>\u200b\nOnce we have the metadata definitions and the upload preset, the next step is to <a href=\"https:\/\/cloudinary.com\/documentation\/image_upload_api_reference#upload\">upload the test image<\/a>. While uploading, we\u2019ll need to specify our preset <code>gps<\/code> to ensure Cloudinary\u2019s backend will extract the EXIF and apply it as metadata.\n\u200b\nIn my case, the test image is on my local system with the name <code>location.jpg<\/code>. Using the CLI, here\u2019s how I uploaded the image.\n\u200b\n<img decoding=\"async\" src=\"https:\/\/akshayranganath-res.cloudinary.com\/image\/upload\/f_auto,q_auto\/blog\/gps_workflow_1.png\" alt=\"Image of a flowchart showing how geotag EXIF data flows from a photo to Cloudinary via upload presets in the how to get geotag photo project\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1278\" height=\"449\"\/>\n\u200b<\/p>\n<pre class=\"js-syntax-highlighted\"><code>cld -C train uploader upload location_test.jpg upload_preset=gps exif=true\n<\/code><\/pre>\n<p>\u200b\nIn this case, I\u2019ll set the option <code>exif=true<\/code> to force the backend to include the entire set of EXIF information in the upload response, which can help validate if our presets are working. Here\u2019s the simplified response.\n\u200b<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">{\n  <span class=\"hljs-string\">\"asset_id\"<\/span>: <span class=\"hljs-string\">\"9604d41650ba87d03fe08fbaa6281635\"<\/span>,\n  <span class=\"hljs-string\">\"public_id\"<\/span>: <span class=\"hljs-string\">\"bx6e3lx6mehu2kmzsiti\"<\/span>,\n  <span class=\"hljs-string\">\"version\"<\/span>: <span class=\"hljs-number\">1686636650<\/span>,\n  \n  <span class=\"hljs-string\">\"metadata\"<\/span>: {\n    <span class=\"hljs-string\">\"altitude\"<\/span>: <span class=\"hljs-string\">\"14.61 m\"<\/span>,\n    <span class=\"hljs-string\">\"latitude\"<\/span>: <span class=\"hljs-string\">\"37 deg 35' 29.53\\\" N\"<\/span>,\n    <span class=\"hljs-string\">\"longitude\"<\/span>: <span class=\"hljs-string\">\"121 deg 55' 58.85\\\" W\"<\/span>    \n  },\n  <span class=\"hljs-string\">\"exif\"<\/span>: {\n    ..\n    <span class=\"hljs-string\">\"GPSAltitude\"<\/span>: <span class=\"hljs-string\">\"1461\/100\"<\/span>,\n    <span class=\"hljs-string\">\"GPSAltitudeRef\"<\/span>: <span class=\"hljs-string\">\"0\"<\/span>,\n    <span class=\"hljs-string\">\"GPSDateStamp\"<\/span>: <span class=\"hljs-string\">\"2023:05:28\"<\/span>,\n    <span class=\"hljs-string\">\"GPSImgDirection\"<\/span>: <span class=\"hljs-string\">\"144\/1\"<\/span>,\n    <span class=\"hljs-string\">\"GPSImgDirectionRef\"<\/span>: <span class=\"hljs-string\">\"M\"<\/span>,\n    <span class=\"hljs-string\">\"GPSInfo\"<\/span>: <span class=\"hljs-string\">\"963\"<\/span>,\n    <span class=\"hljs-string\">\"GPSLatitude\"<\/span>: <span class=\"hljs-string\">\"37\/1, 35\/1, 2953\/100\"<\/span>,\n    <span class=\"hljs-string\">\"GPSLatitudeRef\"<\/span>: <span class=\"hljs-string\">\"N\"<\/span>,\n    <span class=\"hljs-string\">\"GPSLongitude\"<\/span>: <span class=\"hljs-string\">\"121\/1, 55\/1, 5885\/100\"<\/span>,\n    <span class=\"hljs-string\">\"GPSLongitudeRef\"<\/span>: <span class=\"hljs-string\">\"W\"<\/span>,\n    <span class=\"hljs-string\">\"GPSTimeStamp\"<\/span>: <span class=\"hljs-string\">\"2\/1, 20\/1, 41\/1\"<\/span>    \n  },\n  <span class=\"hljs-string\">\"original_filename\"<\/span>: <span class=\"hljs-string\">\"location\"<\/span>,\n  <span class=\"hljs-string\">\"api_key\"<\/span>: <span class=\"hljs-string\">\"NNNNN\"<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>\u200b\nAs you can see, we get the raw latitude and longitude data. However, we\u2019ll need to translate this information to make it easier to read. So let\u2019s do that next.\n\u200b<\/p>\n<h2>Add Geo Tag to Image Step 4: Translate Latitude and Longitude to City, State, and Country<\/h2>\n<p>\u200b\nAPIs like <a href=\"https:\/\/developers.google.com\/maps\/apis-by-platform\">Google Maps API<\/a> can easily translate the latitude and longitude information to city, state, and country. In this case, I wanted to keep the lookup local for performance and simplicity, so I\u2019ll use the <a href=\"https:\/\/github.com\/thampiman\/reverse-geocoder\">reverse-geocoder<\/a> library for Python. Using this library and <a href=\"https:\/\/fastapi.tiangolo.com\/\">FastAPI<\/a>, I created a self-documented API service that could run the translation. Please check the code at <a href=\"https:\/\/github.com\/akshay-ranganath\/get-geo-detils\">get-geo-details<\/a>.\n\u200b\nFor example, here\u2019s a translation request\/response.\n\u200b<\/p>\n<pre class=\"js-syntax-highlighted\"><code>curl -s http:\/\/127.0.0.1:8000\/coords\\?coords\\=73%20deg%2056%27%206.87%22%20W:40%20deg%2043%27%2050.19%22%20N | jq\n<\/code><\/pre>\n<p>\u200b<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">{\n  <span class=\"hljs-attr\">\"lat\"<\/span>: <span class=\"hljs-string\">\"40.74482\"<\/span>,\n  <span class=\"hljs-attr\">\"lon\"<\/span>: <span class=\"hljs-string\">\"-73.94875\"<\/span>,\n  <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"Long Island City\"<\/span>,\n  <span class=\"hljs-attr\">\"admin1\"<\/span>: <span class=\"hljs-string\">\"New York\"<\/span>,\n  <span class=\"hljs-attr\">\"admin2\"<\/span>: <span class=\"hljs-string\">\"Queens County\"<\/span>,\n  <span class=\"hljs-attr\">\"cc\"<\/span>: <span class=\"hljs-string\">\"US\"<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>\u200b<\/p>\n<h2>Add Geo Tag to Image Step 5: Set the City, State, and Country Metadata<\/h2>\n<p>\u200b\nThe last step is to use the translation service above; get the city, state, and country information; and set this information as the image\u2019s metadata fields. You can do this step in Cloudinary using <a href=\"https:\/\/cloudinary.com\/documentation\/notifications\">Webhook notifications<\/a>. Just build an AWS Lambda function that\u2019s triggered whenever a new image is uploaded. Using the upload API response, the Lambda can extract the latitude and longitude data. It can then either translate locally or call a service and add the metadata for the asset using the <a href=\"https:\/\/cloudinary.com\/documentation\/image_upload_api_reference#metadata\">update metadata<\/a> API.<\/p>\n<p>However, in my case, I wanted to provide the translation as a <a href=\"https:\/\/cloudinary.com\/documentation\/dam_admin_account_options#apps_for_dam\">DAM app<\/a>, so the workflow will look like the below.\n\u200b\n<img decoding=\"async\" src=\"https:\/\/akshayranganath-res.cloudinary.com\/image\/upload\/f_auto,q_auto\/blog\/gps_workflow_2.png\" alt=\"gps workflow\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1201\" height=\"685\"\/>\n\u200b\nWhen a user selects an image and fires the DAM app, it will:<\/p>\n<ul>\n<li>Call the translation service with the image\u2019s <code>latitude<\/code> and <code>longitude<\/code> metadata parameters. The translation service will respond back with the city, state, and country in JSON format.<\/li>\n<li>The DAM app will read the JSON response and fire a call to update the asset\u2019s metadata.\n\u200b\nOnce the DAM app completes, the image will have all its location metadata populated. This can be further used for search, tagging, or any kind of categorization.\n\u200b\nYou can see the entire flow in action in this <a href=\"https:\/\/akshayranganath-res.cloudinary.com\/video\/upload\/f_auto,q_auto,w_1024\/blog\/geo_location.mp4\">short video<\/a>.\n\u200b<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>\u200b\nIn this blog post, we used Cloudinary, different tools, and APIs to build a solution to geo-tag your visual media files. <a href=\"https:\/\/cloudinary.com\/users\/register_free\">Sign up for a free account today<\/a> and check out Cloudinary\u2019s full suite of features.<\/p>\n<\/div>\n\n<div class=\"wp-block-cloudinary-markdown \"><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":87,"featured_media":30640,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[332,364],"class_list":["post-29544","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-api","tag-meta-data"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Geo Tag Images | Everything You Need to Know And How Cloudinary Helps<\/title>\n<meta name=\"description\" content=\"Understand how to geo tag images and how to handle geo tagging on your website using Cloudinary for free.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps\" \/>\n<meta property=\"og:description\" content=\"Understand how to geo tag images and how to handle geo tagging on your website using Cloudinary for free.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-26T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-06T23:26:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"melindapham\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps\",\"datePublished\":\"2023-07-26T14:00:00+00:00\",\"dateModified\":\"2025-11-06T23:26:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\"},\"wordCount\":12,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA\",\"keywords\":[\"API\",\"Meta Data\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2023\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\",\"url\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\",\"name\":\"Geo Tag Images | Everything You Need to Know And How Cloudinary Helps\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA\",\"datePublished\":\"2023-07-26T14:00:00+00:00\",\"dateModified\":\"2025-11-06T23:26:30+00:00\",\"description\":\"Understand how to geo tag images and how to handle geo tagging on your website using Cloudinary for free.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA\",\"width\":2000,\"height\":1100,\"caption\":\"Image showing Tower Bridge with location metadata stating London, England and geotag EXIF data for the how to get geotag photo project\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\",\"name\":\"melindapham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"caption\":\"melindapham\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Geo Tag Images | Everything You Need to Know And How Cloudinary Helps","description":"Understand how to geo tag images and how to handle geo tagging on your website using Cloudinary for free.","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:\/\/cloudinary.com\/blog\/geo-tag-your-images","og_locale":"en_US","og_type":"article","og_title":"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps","og_description":"Understand how to geo tag images and how to handle geo tagging on your website using Cloudinary for free.","og_url":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images","og_site_name":"Cloudinary Blog","article_published_time":"2023-07-26T14:00:00+00:00","article_modified_time":"2025-11-06T23:26:30+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA","type":"image\/jpeg"}],"author":"melindapham","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps","datePublished":"2023-07-26T14:00:00+00:00","dateModified":"2025-11-06T23:26:30+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images"},"wordCount":12,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA","keywords":["API","Meta Data"],"inLanguage":"en-US","copyrightYear":"2023","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images","url":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images","name":"Geo Tag Images | Everything You Need to Know And How Cloudinary Helps","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA","datePublished":"2023-07-26T14:00:00+00:00","dateModified":"2025-11-06T23:26:30+00:00","description":"Understand how to geo tag images and how to handle geo tagging on your website using Cloudinary for free.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/geo-tag-your-images"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA","width":2000,"height":1100,"caption":"Image showing Tower Bridge with location metadata stating London, England and geotag EXIF data for the how to get geotag photo project"},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/geo-tag-your-images#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Geo Tag Images | Everything You Need to Know and How Cloudinary Helps"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9","name":"melindapham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","caption":"melindapham"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1690223663\/Blog-geotagging_assets\/Blog-geotagging_assets.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/29544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=29544"}],"version-history":[{"count":24,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/29544\/revisions"}],"predecessor-version":[{"id":39128,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/29544\/revisions\/39128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/30640"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=29544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=29544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=29544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}