diff --git a/frontend/src/metabase-lib/viz/display.ts b/frontend/src/metabase-lib/viz/display.ts
index b82c5c3df1f86f66512a0db750a7e802dacb9063..ca3bba2dda42044605df49e6b11473c7eb11645a 100644
--- a/frontend/src/metabase-lib/viz/display.ts
+++ b/frontend/src/metabase-lib/viz/display.ts
@@ -99,10 +99,23 @@ export const defaultDisplay = (query: Lib.Query): DefaultDisplay => {
       return Lib.isCoordinate(column);
     });
     if (areBreakoutsCoordinates) {
+      const binningOne = Lib.binning(breakouts[0]);
+      const binningTwo = Lib.binning(breakouts[1]);
+      const areBothBinned = binningOne !== null && binningTwo !== null;
+
+      if (areBothBinned) {
+        return {
+          display: "map",
+          settings: {
+            "map.type": "grid",
+          },
+        };
+      }
+
       return {
         display: "map",
         settings: {
-          "map.type": "grid",
+          "map.type": "pin",
         },
       };
     }
diff --git a/frontend/src/metabase-lib/viz/display.unit.spec.ts b/frontend/src/metabase-lib/viz/display.unit.spec.ts
index e60e8fa0595b91978c29ae79e86fd66e06b88048..a6585e9879f10d3b47fc40cf12fa095774b56484 100644
--- a/frontend/src/metabase-lib/viz/display.unit.spec.ts
+++ b/frontend/src/metabase-lib/viz/display.unit.spec.ts
@@ -182,7 +182,32 @@ describe("defaultDisplay", () => {
     expect(defaultDisplay(query)).toEqual({ display: "line" });
   });
 
-  it("returns 'map' display for queries with 1 aggregation and 2 breakouts by coordinates", () => {
+  it("returns 'map' display with 'grid' type for queries with 1 aggregation and 2 binned breakouts by coordinates", () => {
+    const query = createQueryWithClauses({
+      aggregations: [{ operatorName: "count" }],
+      breakouts: [
+        {
+          columnName: "LATITUDE",
+          tableName: "PEOPLE",
+          binningStrategyName: "Auto bin",
+        },
+        {
+          columnName: "LONGITUDE",
+          tableName: "PEOPLE",
+          binningStrategyName: "Auto bin",
+        },
+      ],
+    });
+
+    expect(defaultDisplay(query)).toEqual({
+      display: "map",
+      settings: {
+        "map.type": "grid",
+      },
+    });
+  });
+
+  it("returns 'map' display with 'pin' type for queries with 1 aggregation and 2 un-binned breakouts by coordinates", () => {
     const query = createQueryWithClauses({
       aggregations: [{ operatorName: "count" }],
       breakouts: [
@@ -194,7 +219,28 @@ describe("defaultDisplay", () => {
     expect(defaultDisplay(query)).toEqual({
       display: "map",
       settings: {
-        "map.type": "grid",
+        "map.type": "pin",
+      },
+    });
+  });
+
+  it("returns 'map' display with 'pin' type for queries with 1 aggregation and 2 breakouts by coordinates - 1 binned, 1 unbinned", () => {
+    const query = createQueryWithClauses({
+      aggregations: [{ operatorName: "count" }],
+      breakouts: [
+        {
+          columnName: "LATITUDE",
+          tableName: "PEOPLE",
+          binningStrategyName: "Auto bin",
+        },
+        { columnName: "LONGITUDE", tableName: "PEOPLE" },
+      ],
+    });
+
+    expect(defaultDisplay(query)).toEqual({
+      display: "map",
+      settings: {
+        "map.type": "pin",
       },
     });
   });