{"id":2516,"date":"2017-01-30T20:09:53","date_gmt":"2017-01-30T20:09:53","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2516"},"modified":"2025-06-13T20:15:24","modified_gmt":"2025-06-14T03:15:24","slug":"getting-started-with-geojson-couchbase-net-and-google-maps","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/getting-started-with-geojson-couchbase-net-and-google-maps\/","title":{"rendered":"Primeros pasos con GeoJSON, Couchbase, .NET y Google Maps"},"content":{"rendered":"<div class=\"paragraph\">\n<p><em>This is a guest post by Calvin Allen. Calvin is a .NET developer in Columbus, OH that enjoys designing software that not only solves business problems, but it easy to use, on budget, and on time. If he isn\u2019t designing software, he\u2019s learning how to be a better software developer. This isn\u00e2\u20ac\u2122t just a career for him \u00e2\u20ac\u201c it\u00e2\u20ac\u2122s also a lifestyle.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Follow along with Calvin\u2019s post by <a href=\"https:\/\/github.com\/CalvinAllen\/geojson-with-couchbase-and-dotnet\">checking out the source code and GitHub<\/a> and <a href=\"https:\/\/couchbase.com\/download?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">downloading the latest developer preview release of Couchbase<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>What is GeoJSON? <a href=\"https:\/\/geojson.org\/\">GeoJSON.org<\/a> defines it as:<br \/>\n&#8220;GeoJSON is a format for encoding a variety of geographic data structures&#8221;<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>What does that really mean, though? Essentially, it\u2019s a standard format, using the JSON structure, for defining geographic objects. These &#8220;geographic objects&#8221; can be a number of various items, ranging from a simple &#8220;Point&#8221;, to a more complex object, such as a &#8220;Polygon&#8221;.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Here is a simple example of a &#8220;point on a map&#8221; for the &#8220;Dinagat Islands&#8221;:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">{\r\n  \"type\": \"FeatureCollection\",\r\n  \"features\": [\r\n    {\r\n      \"type\": \"Feature\",\r\n      \"geometry\": {\r\n        \"type\": \"Point\",\r\n        \"coordinates\": [\r\n          125.6,\r\n          10.1\r\n        ]\r\n      },\r\n      \"properties\": { }\r\n    }\r\n  ]\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Now that you have all the backstory, you may be asking, &#8220;Why do I even need GeoJSON?&#8221;. The simple answer is that it\u2019s a standard currently supported in a variety of mapping technologies, such as Google Maps. With your data already in the GeoJSON format, you can provide that data <strong>directly<\/strong> to Google Maps, and render your object as described. Not only does it save you from having to &#8220;roll your own&#8221; format, but other providers are already supporting it, which you can leverage as desired.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Let\u2019s get to some code!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>I\u2019m going to demonstrate the GeoJSON format using a .NET MVC application, Couchbase (Community) Server (and the .NET SDK), and Google Maps &#8211; I\u2019m going to have to assume that you have some working knowledge of all of these utilities.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>I won\u2019t go into details on how to create the MVC project, or installing\/configuring Couchbase, as there are plenty of other tutorials\/articles out there describing how to accomplish these items, especially on <a href=\"https:\/\/www.couchbase.com\/blog\/facet\/Author\/Matthew+Groves\/\">Matthew Groves Couchbase blog<\/a>.<br \/>\nOne thing I will mention now, is that I called the Couchbase bucket &#8220;features&#8221;, and have pre-loaded it (all through the Couchbase Console) with two documents &#8211; one for a polygon around Rome, and one with a point over the Dinagat Islands (as seen above). Both of these json files can be found in the github repository that I\u2019ll link to later in the article.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>With the new MVC website loaded up in Visual Studio, open the NuGet package manager console, and type the following command to load the Couchbase .NET SDK:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>Install-Package couchbasenetclient<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Once the Couchbase .NET SDK has finished installing, run the following command to install the geojson library:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>Install-Package geojson.net<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>The first package, &#8220;couchbasenetclient&#8221;, will be used to communicate to our local Couchbase server for managing our GeoJSON documents. This is a library created \/ supported by the Couchbase Team. The next, &#8220;geojson.net&#8221;, is a helper library to create \/ read GeoJSON documents. Under the hood, the geojson.net library utilizes JSON.Net for json serialization \/ deserialization of the .NET types that the library provides to us. You could definitely get away without this package\/library, and manage the types yourself, but to keep thing simple, I\u2019m choosing to utilize it.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The first thing we need to do is wire up our controller. I\u2019m going to reuse the &#8220;HomeController&#8221; that already exists in the project.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>First, I\u2019ll add a constructor, which we\u2019ll use to store our bucket:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class HomeController : Controller {\r\n\r\n    private readonly IBucket _bucket;\r\n\r\n    public HomeController() {\r\n        _bucket = ClusterHelper.GetBucket(\"features\");\r\n    }\r\n\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Now, I\u2019m going to need three endpoints &#8211;<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>One to get a list of all features<\/li>\n<li>One that will act as a simple routing to the map page (you\u2019ll see what I mean)<\/li>\n<li>And, lastly, one that the Google Maps API will make a direct call to, in order to get the JSON for the feature.<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>Here are all three:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>First &#8211; is the action that returns the entire list of features in my Couchbase bucket. This is just a simple N1QL query to get the Feature Ids as a list of strings. (I only care about the ID of the feature in the list page)<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public ActionResult Features() {\r\n\tvar request = QueryRequest.Create(\"SELECT META().id as `id` FROM `features` as f\");\r\n\r\n\trequest.ScanConsistency(ScanConsistency.RequestPlus);\r\n\r\n\tvar featureIds = _bucket\r\n\t\t\t.Query&lt;dynamic&gt;(request)\r\n\t\t\t.Rows\r\n\t\t\t.Select(x =&gt; x.id.ToString())\r\n\t\t\t.ToList();\r\n\r\n\treturn View(featureIds);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>This is the simple routing method that I utilize while navigating from the list page to hold the ID of the requested feature the user clicked on.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public ActionResult MapFeature(string id) {\r\n    ViewBag.FeatureId = id;\r\n    return View();\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>And, finally, this method gets called via the Google Maps API in the MapFeature page to get the JSON of the feature the user wishes to map (again, using the FeatureCollection object from the geojson.net library &#8211; this uses Json.Net to serialize that object, which comes with its own serializers in the library as well).<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public ContentResult GetFeatureJson(string id) {\r\n    var feature = _bucket.Get&lt;FeatureCollection&gt;(id).Value;\r\n\tvar json = JsonConvert.SerializeObject(feature);\r\n\r\n\treturn Content(json, \"application\/json\");\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Now, onto the view pages themselves (there\u2019s only two)<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>On the &#8220;Features&#8221; page, which is just a listing of the features in our Couchbase bucket &#8211; we just output each of the feature IDs into an action link inside of an unordered list:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">@model List&lt;string&gt;\r\n\r\n&lt;h2&gt;Features&lt;\/h2&gt;\r\n\r\n&lt;ul&gt;\r\n\t@foreach (var feature in Model) {\r\n\t\t&lt;li&gt;@Html.ActionLink(feature, \"MapFeature\", \"Home\", new { id = feature }, null)&lt;\/li&gt;\r\n\t}\r\n&lt;\/ul&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>The last page, MapFeature, is the one that does the &#8220;heavy lifting&#8221;:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">&lt;h2&gt;Map Feature&lt;\/h2&gt;\r\n@{\r\n\tvar id = ViewBag.FeatureId;\r\n}\r\n\r\n<\/code><\/pre>\n<div id=\"map_wrap\"><code class=\"language-C#\"><code class=\"language-C#\"><\/code><\/code><\/p>\n<div id=\"map\" style=\"width: 100%;height: 100%\"><\/div>\n<p><code class=\"language-C#\"><br \/>\n&lt;\/div&gt;<\/p>\n<p>\t$(function () {<br \/>\n\t\tvar map = new google.maps.Map(document.getElementById('map'), {<br \/>\n\t\t\tzoom: 6<br \/>\n\t\t});<\/p>\n<p>\t\tmap.data.loadGeoJson('\/Home\/GetFeatureJson\/@id');<\/p>\n<p>\t\t\/\/the callback for each of the features in the loop - last one wins<br \/>\n\t\tfunction forEachGeometry(feature) {<br \/>\n\t\t\tfeature.getGeometry().forEachLatLng(resetCenter);<br \/>\n\t\t};<\/p>\n<p>\t\t\/\/takes the Latitute and Longitude from each Geometry and resets the center point on the map - last one wins - totally inefficient<br \/>\n\t\tfunction resetCenter(latLng) {<br \/>\n\t\t\tmap.setCenter(latLng);<br \/>\n\t\t};<\/p>\n<p>\t\t\/\/every time a feature is added to the map, loop over the collection - completely inefficient, but should provide an idea<br \/>\n\t\tmap.data.addListener('addfeature', function (e) {<br \/>\n\t\t\tmap.data.forEach(forEachGeometry);<br \/>\n\t\t});<\/p>\n<p>\t});<\/p>\n<p><a href=\"https:\/\/maps.googleapis.com\/maps\/api\/js?key=YOUR_API_KEY\">https:\/\/maps.googleapis.com\/maps\/api\/js?key=YOUR_API_KEY<\/a><\/code><\/div>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>As this page loads up, we get the ID of the feature that the user clicked on (stored in ViewBag), and then dive right into our HTML markup. You\u2019ll notice the two divs, which are placeholders (especially the interior one), that the Google Maps API will utilize to display the map\/features.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Then we get into the Javascript &#8211; most of this is pretty basic, and <a href=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\/\">straight from the documents Google provides<\/a>, except for the few bolt-on methods I added, which we\u2019ll look at.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The very first thing we do is &#8216;new up&#8217; our map object, and tell it what DOM element to utilize, and what the default zoom level will be. Then you can see that we are using a built-in method of Google Maps, loadGeoJson, that takes our local URL for grabbing the JSON out of our Couchbase bucket.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The next few methods are quick bolt-on\u2019s I added for the sake of the demo, which are not meant to be utilized in a production environment, as they are very inefficient. They reset the center of the map to the last Latitude\/Longitude object we find in the data we loaded into the map. This is not precise logic, but it will &#8220;center&#8221; the map over top of whichever feature we are rendering.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The last thing we do is load the Google Maps API from their CDN.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>This is a very simple example of storing\/querying GeoJSON data from a Couchbase instance, and loading it into a mapping product. And, although I chose Google Maps, other providers, such as MapBox, support GeoJSON as well.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>And, lastly, if you need to see the example in its entirety, <a href=\"https:\/\/github.com\/CalvinAllen\/geojson-with-couchbase-and-dotnet\">check out the code over on github<\/a>. You\u2019ll simply need to modify the MapFeature.cshtml page to include your own Google Maps API Key (visit <a href=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\/\"> https:\/\/developers.google.com\/maps\/documentation\/javascript\/<\/a>, log in with your Google account, and click the &#8220;Get A Key&#8221; button on the top-right) and that should be it! Feel free to drop me a line if you have further questions &#8211; I\u2019m on Twitter as <a href=\"https:\/\/twitter.com\/CalvinAllen_\">CalvinAllen_<\/a>, or check out my personal blog at <a href=\"https:\/\/www.calvinallen.net\/\">https:\/\/www.calvinallen.net<\/a>.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This is a guest post by Calvin Allen. Calvin is a .NET developer in Columbus, OH that enjoys designing software that not only solves business problems, but it easy to use, on budget, and on time. If he isn\u2019t designing [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,1816,9327],"tags":[1803,1543],"ppma_author":[8937],"class_list":["post-2516","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-couchbase-server","category-javascript","tag-google-maps","tag-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>GeoJSON, Couchbase, .NET &amp; Google Maps - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn through a very simple example of storing\/querying GeoJSON data from a Couchbase instance &amp;loading it into a mapping product.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/getting-started-with-geojson-couchbase-net-and-google-maps\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with GeoJSON, Couchbase, .NET, and Google Maps\" \/>\n<meta property=\"og:description\" content=\"Learn through a very simple example of storing\/querying GeoJSON data from a Couchbase instance &amp;loading it into a mapping product.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/getting-started-with-geojson-couchbase-net-and-google-maps\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-30T20:09:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:15:24+00:00\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Getting Started with GeoJSON, Couchbase, .NET, and Google Maps\",\"datePublished\":\"2017-01-30T20:09:53+00:00\",\"dateModified\":\"2025-06-14T03:15:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/\"},\"wordCount\":1203,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Google Maps\",\"javascript\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"Couchbase Server\",\"JavaScript\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/\",\"name\":\"GeoJSON, Couchbase, .NET & Google Maps - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-30T20:09:53+00:00\",\"dateModified\":\"2025-06-14T03:15:24+00:00\",\"description\":\"Learn through a very simple example of storing\\\/querying GeoJSON data from a Couchbase instance &loading it into a mapping product.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/getting-started-with-geojson-couchbase-net-and-google-maps\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with GeoJSON, Couchbase, .NET, and Google Maps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\\\/\\\/crosscuttingconcerns.com\",\"https:\\\/\\\/x.com\\\/mgroves\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/matthew-groves\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GeoJSON, Couchbase, .NET & Google Maps - The Couchbase Blog","description":"Learn through a very simple example of storing\/querying GeoJSON data from a Couchbase instance &loading it into a mapping product.","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:\/\/www.couchbase.com\/blog\/es\/getting-started-with-geojson-couchbase-net-and-google-maps\/","og_locale":"es_MX","og_type":"article","og_title":"Getting Started with GeoJSON, Couchbase, .NET, and Google Maps","og_description":"Learn through a very simple example of storing\/querying GeoJSON data from a Couchbase instance &loading it into a mapping product.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/getting-started-with-geojson-couchbase-net-and-google-maps\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-30T20:09:53+00:00","article_modified_time":"2025-06-14T03:15:24+00:00","author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Getting Started with GeoJSON, Couchbase, .NET, and Google Maps","datePublished":"2017-01-30T20:09:53+00:00","dateModified":"2025-06-14T03:15:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/"},"wordCount":1203,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Google Maps","javascript"],"articleSection":[".NET","ASP.NET","Couchbase Server","JavaScript"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/","url":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/","name":"GeoJSON, Couchbase, .NET & Google Maps - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-30T20:09:53+00:00","dateModified":"2025-06-14T03:15:24+00:00","description":"Learn through a very simple example of storing\/querying GeoJSON data from a Couchbase instance &loading it into a mapping product.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-with-geojson-couchbase-net-and-google-maps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with GeoJSON, Couchbase, .NET, and Google Maps"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"acf":[],"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2516"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2516\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2516"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}