]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-php/AddressDetails.php
add `state_code` field to response address details
[nominatim.git] / lib-php / AddressDetails.php
index 91e3d89fcfac21acf1120aea9aa58d2cf3d1d4a7..a1a2a636156e686843b4fcebc46f5a236383a85a 100644 (file)
@@ -1,4 +1,12 @@
 <?php
+/**
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * This file is part of Nominatim. (https://nominatim.org)
+ *
+ * Copyright (C) 2022 by the Nominatim developer community.
+ * For a full list of authors see the git log.
+ */
 
 namespace Nominatim;
 
@@ -84,6 +92,10 @@ class AddressDetails
                     || $aLine['class'] == 'place')
             ) {
                 $aAddress[$sTypeLabel] = $sName;
+
+                if ('state' === $sTypeLabel && !empty($aLine['name'])) {
+                    $this->addStateCode($aAddress, $aLine['name']);
+                }
             }
         }
 
@@ -166,4 +178,18 @@ class AddressDetails
     {
         return $this->aAddressLines;
     }
+
+    /**
+     * Add `state_code` field to address details to represent second part of ISO 3166-2 country subdivision code
+     */
+    private function addStateCode(&$aAddress, $nameDetails)
+    {
+        if (is_string($nameDetails)) {
+            $nameDetails = json_decode('{' . str_replace('"=>"', '":"', $nameDetails) . '}', true);
+        }
+
+        if (!empty($nameDetails['ref'])) {
+            $aAddress['state_code'] = $nameDetails['ref'];
+        }
+    }
 }