API-HINWEISE
Geofield-Felder enthalten neun Informationsspalten zu den gespeicherten geografischen Daten. Das Herzstück ist die Spalte "wkt", in der die vollständige Geometrie im WKT-Format (Well Known Text) gespeichert wird. Alle anderen Spalten sind Metadaten, die von der WKT-Spalte abgeleitet sind. Die Spalten lauten wie folgt:
'geom' Rohwert. Standardmäßig als WKB gespeichert, geladen als WKT
'geo_type' Geometrietyp (Punkt, Linienstreifen, Polygon usw.)
'lat' Schwerpunkt (Breite oder Y)
'lon' Schwerpunkt (Länge oder X)
'oben' Begrenzungsrahmen oben ( Breitengrad oder Max Y) 'unten' Begrenzungsrahmen Unten (Breitengrad oder Min Y)
'links' Begrenzungsrahmen links (Längengrad oder Min X)
'rechts' Begrenzungsrahmen rechts (Längengrad oder
max. X) 'Geohash' Geohash-Äquivalent des Geom-Spaltenwerts
Wenn ein Geofeld mit den bereitgestellten Widgets gespeichert wird, werden diese Werte über die Funktion geofield_compute_values übergeben, um abhängige Werte zu berechnen. Standardmäßig werden abhängige Werte basierend auf WKT berechnet. Dies kann jedoch überschrieben werden, um Werte basierend auf anderen Spalten zu berechnen. Zum Beispiel können geofield_compute_values wie folgt aufgerufen werden:
geofield_compute_values ($ values, 'latlon');
Dadurch wird das wkt-Feld (und alle anderen Felder) basierend auf den lat / lon-Spalten berechnet, was zu einem Punkt führt. Als Entwickler ist dies wichtig, wenn Sie Geofield-Informationen mit node_load und node_save ändern. Stellen Sie sicher, dass alle geänderten Geofield-Instanzen über geofield_compute_values ausgeführt werden, um alle Spalten konsistent zu machen.
geohash
?geohash
, bitte bestätige, danke.node__field_geo_field
hatgeohash
als letztes Feld ein (siehe API in der obigen Antwort). Das ist eine ASCII-Darstellung einer geografischen Region . Ich weiß nicht, ob sie obligatorisch oder optional sind, aber ich wollte ein Python-Programm erstellen, um sie zu generieren und (zusammen mit lat / long) in die Backend-Drupal-Datenbank einzufügen.geohash
Wert nicht vertraut , aber vielleicht können Sie diegeofield_compute_values
in der obigen Antwort erwähnte Funktion verwenden, um diesen Wert aus dem lat / lng zu erhalten.Eine wilde Vermutung: Sie können Ihren Knoten durch den
node-edit-form
Prozess führen, um die Geofeld-Magie abzufeuern.Schauen Sie sich drupal_form_submit () an , beobachten Sie die
$form_state['values']
gewöhnliche manuelle Übermittlung des Formulars "Inhalt hinzufügen" Ihres Knotentyps und erstellen Sie es programmgesteuert neu, um es in derdrupal_form_submit()
Funktion zu senden .Ich frage mich, ob das funktionieren würde ...
Auf der anderen Seite können Sie einfach die Struktur des Werts Ihres Geofelds überprüfen und diese neu erstellen, indem Sie programmgesteuert die
geocoder()
Funktion der API des Geocoder- Moduls nutzen.quelle
Sie können die unter https://www.drupal.org/node/905814#comment-4931016 beschriebene Methode verwenden .
Erstellen Sie eine Datenbanksicherung
Machen Sie sich einen Überblick über Ihre Inhalte. Fügen Sie einen Filter hinzu, um den Inhalt auszuwählen, bei dem der geofield-Breitengrad leer ist.
Fügen Sie das Modul Ansichten-Massenoperationen hinzu, fügen Sie ein Feld für Massenoperationen hinzu und wählen Sie als Aktion "Beliebiges PHP ausführen".
Dieser Ansatz funktioniert einwandfrei, außer dass Datumsfelder, die die Datums-Popup-Anzeige verwenden, leer werden. Seien Sie also vorsichtig, wenn Sie Datumsfelder haben.
Beachten Sie auch, dass der Google-Geocoder ein 24-Stunden-Limit von 2500 Adressen für den Geocode hat.
quelle
Es gibt ein Drupal 7-Modul, das genau das für Sie mit dem Cron erledigt. Sie können die Anzahl der Knoten festlegen, die pro Cron-Lauf verarbeitet werden sollen, und auswählen, gegen welche Inhaltstypen sie ausgelöst werden sollen.
Probieren Sie es aus: https://www.wutime.com/downloads/automatic-geofield-update-to-render-gmaps/
quelle