{"id":46643,"date":"2021-04-20T00:00:00","date_gmt":"2021-04-20T07:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/blog\/using-geographical-queries-based-on-bounding-boxes\/"},"modified":"2025-11-13T12:55:20","modified_gmt":"2025-11-13T20:55:20","slug":"using-geographical-queries-based-on-bounding-boxes","status":"publish","type":"post","link":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/","title":{"rendered":"Using Geographical Queries Based On Bounding Boxes"},"content":{"rendered":"<p>In a past <a href=\"https:\/\/griddb.net\/en\/blog\/geospatial-analysis-of-nyc-crime-data-with-griddb\/\">New York Crime blog<\/a>, we covered querying geospatial data with GridDB&#8217;s Geometry features.<\/p>\n<p>While the Geometry and WKT (Well-known text representation of geometry) querying works well, there are two downsides: it is more computationally intensive than numerical comparison, and it is only available in C and Java APIs. If you wish to use Python or JDBC, you need to use a different method. In this blog, we&#8217;ll showcase querying the same dataset with simple bounding boxes and also demonstrate how you can partition geospatial data into multiple containers.<\/p>\n<h2>Partition Data<\/h2>\n<p>To make use of GridDB&#8217;s Key-Container architecture, we&#8217;ll partition data into different containers. This allows the binary search trees to be very short while distributing data evenly.<\/p>\n<p>There are several ways we could do this and in this post we&#8217;ll showcase the simplest method, by rounding latitude and longitude.<\/p>\n<p>With Java this is accomplished with DecimalFormat while Python uses math.ceil() and if<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">DecimalFormat df = new DecimalFormat(\"#\");\ndf.setRoundingMode(RoundingMode.CEILING);\ndf.setNegativePrefix(\"n\");\nString cName = \"geo_\"+df.format(c.Latitude*100)+\"_\"+df.format(c.Longitude*100);\n<\/code><\/pre>\n<\/div>\n<div class=\"clipboard\">\n<pre><code class=\"language-py\">cname = \"geo_\"+re.sub('-','n', str(math.ceil(lat*100)))+\"_\"+re.sub('-','n',str(math.ceil(lon*100)))))\n<\/code><\/pre>\n<\/div>\n<p>We modified Ingest.java from our first blog in which we used Geometry data types to query the data.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-py\">DecimalFormat df = new DecimalFormat(\"#\");\ndf.setRoundingMode(RoundingMode.CEILING);\ndf.setNegativePrefix(\"n\");\nfor (CSVRecord record : records) {\n    try {\n        if (i++ % 1000 == 0) System.out.println(\"Ingesting \"+ i);\n        Complaint c = parseCsvRecord(record);\n        if(c != null) {\n            String cName = \"geo_\"+df.format(c.Latitude*100)+\"_\"+df.format(c.Longitude*100);\n            System.out.println(\"adding \"+c+\" to \"+cName); \n            Collection&lt;String, Complaint> col = store.putCollection(cName, Complaint.class);\n            col.setAutoCommit(false);\n            col.put(c);\n            col.commit();\n        }\n    } catch(Exception e) {\n        System.out.println(\"Failed to ingest \"+i);\n        System.out.println(e);\n    }\n}\n\n<\/code><\/pre>\n<\/div>\n<p>Which produces the following output:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-bash\">adding 927207428: Fri Jan 03 13:30:00 GMT 2014 @ (40.745241809, -73.894253382) to geo_4075_n7389\nadding 492142357: Wed Apr 13 00:00:00 BST 2016 @ (40.810351863, -73.924942326) to geo_4082_n7392\nadding 572616350: Mon Aug 18 14:30:00 BST 2014 @ (40.683659778, -73.85154207) to geo_4069_n7385\n... snip ...\n<\/code><\/pre>\n<\/div>\n<h2>Bounding Box<\/h2>\n<p>Now that we have data stored in GridDB we can query it. The first step is to find the boundaries, with Python we can use the geopy distance module.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-py\">import geopy\nfrom geopy import distance\n\nd = geopy.distance.geodesic(meters=radius)\nstart = geopy.Point(lat, lon)\n\nnorth = d.destination(point=start, bearing=0)[0]\nsouth = d.destination(point=start, bearing=180)[0]\neast = d.destination(point=start, bearing=90)[1]\nwest = d.destination(point=start, bearing=270)[1]\n<\/code><\/pre>\n<\/div>\n<p>Since the data is partitioned the next step is to generate a possible list of containers that may need to be queried.<\/p>\n<p>If your query area distance is always smaller than the partition size, you can simply define the containers as a set:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-py\">containers = {  re.sub('-', 'n', re.sub('.', '', \"geo_%d_%d\" %(math.ceil(north*100), math.ceil(east*100)))),\n                re.sub('-', 'n', re.sub('.', '', \"geo_%d_%d\" %(math.ceil(north*100), math.ceil(west*100)))),\n                re.sub('-', 'n', re.sub('.', '', \"geo_%d_%d\" %(math.ceil(south*100), math.ceil(east*100)))),\n                re.sub('-', 'n', re.sub('.', '', \"geo_%d_%d\" %(math.ceil(south*100), math.ceil(west*100))))};\n\n<\/code><\/pre>\n<\/div>\n<p>But if your query area is larger than the partition size, you will need to iterate through all possible containers:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-py\">containers=[]\nclat = math.ceil(south*100)\nwhile clat &lt;= math.ceil(north*100):\n    clon = math.ceil(west*100)\n    while clon &lt;= math.ceil(east*100):\n        containers.append(\"geo_\"+re.sub('-','n', str(clat))+\"_\"+re.sub('-','n',str(clon)))\n        clon+=1\n    clat+=1\n<\/code><\/pre>\n<\/div>\n<p>With a list of containers set, we can now query them with a simple TQL statement that searches for points within the bounding box:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-py\">tql = \"select * where Latitude > %f and Latitude &lt; %f and Longitude &lt; %f and Longitude > %f\" %(south, north, east, west)\n\n\nfor container in containers:\n    ts = gridstore.get_container(container)\n    try:\n        query = ts.query(tql) \n        rs = query.fetch(False) \n\n        while rs.has_next():\n            complaints.append(rs.next()\n    except:\n        pass\n<\/code><\/pre>\n<\/div>\n<p>It is important to catch exception within the loop while performing this kind of search as it is quite likely first containers do not have any results and will throw an exception while there are results in containers queried later.<\/p>\n<h2>Conclusion<\/h2>\n<p>Using bounding boxes is a simple method of finding data near a given location. The source code for this blog is &#8212; as always &#8212; available in the <a href=\"https:\/\/github.com\/griddbnet\/\">GridDB.net GitHub<\/a> repository.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a past New York Crime blog, we covered querying geospatial data with GridDB&#8217;s Geometry features. While the Geometry and WKT (Well-known text representation of geometry) querying works well, there are two downsides: it is more computationally intensive than numerical comparison, and it is only available in C and Java APIs. If you wish to [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":27438,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-46643","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using Geographical Queries Based On Bounding Boxes | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"In a past New York Crime blog, we covered querying geospatial data with GridDB&#039;s Geometry features. While the Geometry and WKT (Well-known text\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Geographical Queries Based On Bounding Boxes | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"In a past New York Crime blog, we covered querying geospatial data with GridDB&#039;s Geometry features. While the Geometry and WKT (Well-known text\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-20T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-13T20:55:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2021\/04\/geo_lg-1024x573.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"573\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Owen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Owen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\"},\"author\":{\"name\":\"Owen\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66\"},\"headline\":\"Using Geographical Queries Based On Bounding Boxes\",\"datePublished\":\"2021-04-20T07:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\"},\"wordCount\":383,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2021\/04\/geo_lg.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\",\"url\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\",\"name\":\"Using Geographical Queries Based On Bounding Boxes | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2021\/04\/geo_lg.png\",\"datePublished\":\"2021-04-20T07:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:20+00:00\",\"description\":\"In a past New York Crime blog, we covered querying geospatial data with GridDB's Geometry features. While the Geometry and WKT (Well-known text\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2021\/04\/geo_lg.png\",\"contentUrl\":\"\/wp-content\/uploads\/2021\/04\/geo_lg.png\",\"width\":2400,\"height\":1344},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66\",\"name\":\"Owen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g\",\"caption\":\"Owen\"},\"url\":\"https:\/\/griddb.net\/en\/author\/owen\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Geographical Queries Based On Bounding Boxes | GridDB: Open Source Time Series Database for IoT","description":"In a past New York Crime blog, we covered querying geospatial data with GridDB's Geometry features. While the Geometry and WKT (Well-known text","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:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/","og_locale":"en_US","og_type":"article","og_title":"Using Geographical Queries Based On Bounding Boxes | GridDB: Open Source Time Series Database for IoT","og_description":"In a past New York Crime blog, we covered querying geospatial data with GridDB's Geometry features. While the Geometry and WKT (Well-known text","og_url":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2021-04-20T07:00:00+00:00","article_modified_time":"2025-11-13T20:55:20+00:00","og_image":[{"width":1024,"height":573,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2021\/04\/geo_lg-1024x573.png","type":"image\/png"}],"author":"Owen","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"Owen","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/"},"author":{"name":"Owen","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66"},"headline":"Using Geographical Queries Based On Bounding Boxes","datePublished":"2021-04-20T07:00:00+00:00","dateModified":"2025-11-13T20:55:20+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/"},"wordCount":383,"commentCount":0,"publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2021\/04\/geo_lg.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/","url":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/","name":"Using Geographical Queries Based On Bounding Boxes | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2021\/04\/geo_lg.png","datePublished":"2021-04-20T07:00:00+00:00","dateModified":"2025-11-13T20:55:20+00:00","description":"In a past New York Crime blog, we covered querying geospatial data with GridDB's Geometry features. While the Geometry and WKT (Well-known text","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/blog\/using-geographical-queries-based-on-bounding-boxes\/#primaryimage","url":"\/wp-content\/uploads\/2021\/04\/geo_lg.png","contentUrl":"\/wp-content\/uploads\/2021\/04\/geo_lg.png","width":2400,"height":1344},{"@type":"WebSite","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66","name":"Owen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g","caption":"Owen"},"url":"https:\/\/griddb.net\/en\/author\/owen\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/comments?post=46643"}],"version-history":[{"count":1,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46643\/revisions"}],"predecessor-version":[{"id":51318,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46643\/revisions\/51318"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media\/27438"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media?parent=46643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/categories?post=46643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/tags?post=46643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}