SlideShare a Scribd company logo
25 -27 April, 2014 http://camp2014.drupal.dn.ua
Drupal and Outer
Space
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
A Game Changer for the Geospatial Data Market
Dauria Aerospace
develops new ways in
building low cost
satellites, thus reducing
costs for earth
observation data
drastically.
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Game Changer for the Geospatial Data Market
Affordable Geo data allow
small businesses to pioneer
new business models.
Example:
Low cost parcel monitoring
service for local farmers
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Building Satellites with Smartphone Technology
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Building Lightweight Satellites
Conventional Satellite
New Satellite
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Less Expensive Launches
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
We need a Configurable Product with a Map
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Commerce's Standard Handling of Product Variations
http://demo.commerceguys.com/ck/tops/guy-short-sleeve-tee
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Customizable Products Module
As the ancient
Drupal Proverb goes:
There's a module
for that
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Configuration of References
Content Type for the
Product Display
Configuration:
Add Product Reference
Set „Product Types that
can be referenced“
to Product Type;
Set „Add to Cart Line
Item Type“
to Line Item Type
Product Display Node
Configuration:
Set „Product Reference“
to Product
Product
Configuration:
Set „Referenced by“
to Product
Display Node
Product Type
Configuration:
Set „Default Reference“
to Content Type
Line Item Type
Configuration:
Set „Add to Cart Line
Item Type“
to itself (self reference!)
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Validating User Inputs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Validating User Inputs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Validating User Inputs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Validating User Inputs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Validating User Inputs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Utilizing PostGIS
PostGIS extends PostgreSQL Databases with geodetic functio
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The PostGIS Module integrates this Functions into Drupal
function validate() {
$geo = is_null($this->wkt) ? $this->geometry : $this->wkt;
try {
$result = db_query("SELECT ST_GeometryType(:geo), ST_IsValid(:geo), ST_IsValidReason(:geo) as reason",
array(':geo' => $geo))->fetchAssoc();
// Return reason if geometry is not valid.
if (!$result['st_isvalid']) {
return array(
'error' => 'postgis_unparsable',
'message' => t('Not a valid geometry: @reason.', array('@reason' => $result['reason'])),
);
}
...
}
catch (PDOException $e) {
// TODO: catch only WKT parse errors.
return array(
'error' => 'postgis_unparsable',
'message' => t('Unable to parse WKT: ' . $geo),
);
}
}
class PostgisGeometry {
...
class PostgisGeometry {
...
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
But the PostGIS Module has some Weaknesses
/**
* Calculates diffrence to a given geometry.
*
* @param PostgisGeometry $geometry
* Geometry which this instance will be compared to.
*
* @return PostgisGeometry
* Geometry of diffrence.
*/
function diff($geometry) {
...
$geo_diff = db_query("SELECT ST_Union(ST_Difference(:geo_a, :geo_b), ST_Difference(:geo_b, :geo_a))",
array(':geo_a' => $geo_a, ':geo_b' => $geo_b))->fetchField();
$geo_type = db_query("SELECT GeometryType(:geo_diff)",
array(':geo_diff' => $geo_diff))->fetchField();
$diff = new PostgisGeometry($geo_type, $this->srid);
$diff->fromGeometry($geo_diff);
return $diff;
}
- Some important geodetic functions are not implemented
- Error handling is inconsistent
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Extending and Overwriting the PostGIS Module
class PostgisGeometries extends PostgisGeometry {
...
function intersects($geometry) {
if ((get_class($geometry) !== 'postgis_geometry') && (get_class($geometry) !== 'PostgisGeometries')) {
throw new PostgisGeometryException('not postgis_geometry');
}
try {
$geo_a = $this->getText();
if(stripos($geo_a,'GEOMETRYCOLLECTION(' ) === 0) {
$geo_a = substr(strstr($geo_a, '('),1, -1);
}
$geo_b = $geometry->getText();
if(stripos($geo_b,'GEOMETRYCOLLECTION(' ) === 0) {
$geo_b = substr(strstr($geo_b, '('),1, -1);
}
$intersects = db_query("SELECT ST_Intersects(text :geo_a, text :geo_b)",
array(':geo_a' => $geo_a, ':geo_b' => $geo_b))->fetchField();
return $intersects;
}
catch (PDOException $e) {
throw new PostgisGeometryException( $e->getMessage( ) , (int)$e->getCode( ) );
}
}
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Writing a module to validate the AOI and calculate the price
function water_quality_form_alter(&$form, &$form_state, $form_id) {
...
$coverage_region_comparison->transform($aoi->getSrid());
$coverage_region_comparison->dump();
$intersects_google_projection = $coverage_region_comparison->intersects($aoi_comparison);
if ($intersects_google_projection){
// Convert aoi to srid of the region.
$aoi_comparison->transform($coverage_region['region']->getSrid());
$aoi_comparison->dump();
// check if the aoi intersects with the region. This needs to be
// done in the SRID of the coverage region for accuracy.
$within = $aoi_comparison->within($coverage_region['region']);
if ($within){
...
...
$form['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt']['#element_validate'][] =
'water_quality_aoi_validate';
...
function water_quality_aoi_validate($element, &$form_state) {
...
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Open Layers Editor has some Bugs
What it
should
deliver
POLYGON((1066993.16984217 4873953.49407963,
1340943.47921804 5392502.29411237,
1810572.58092165 5382718.35450175,
1979345.539345157 5106322.0602720035,
1849708.33939679 4776114.09813913,
1066993.16984217 4873953.49407963))
GEOMETRYCOLLECTION(
POLYGON((1066993.16984217 4873953.49407963,
1340943.47921804 5392502.29411237,
1810572.58092165 5382718.35450175,
1979345.539345157 5106322.0602720035,
1849708.33939679 4776114.09813913,
1066993.16984217 4873953.49407963)),
POINT(1203968.324530105 5133227.894096),
POINT(1575758.0300698448 5387610.32430706),
POINT(1894959.0601334036 5244520.207386877),
POINT(1914526.9393709735 4941218.079205567),
POINT(1458350.75461948 4825033.79610938),
POINT(1066993.16984217 4873953.49407963),
POINT(1340943.47921804 5392502.29411237),
POINT(1810572.58092165 5382718.35450175),
POINT(1979345.539345157 5106322.0602720035),
POINT(1849708.33939679 4776114.09813913))
What it
sometime
s
delivers
GEOMETRYCOLLECTION()
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Open Layers Editor has some Bugs
Caching and the
Open Layers
Editor
have an awkward
relationship
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Open Layers Editor has some Bugs
function water_quality_subscription_type_validate($element, &$form_state) {
if(!isset($element['#value']) || empty($element['#value'])){
drupal_rebuild_form($form_state['build_info']['form_id'], $form_state);
}
}
function eomap_eula_validate($element, &$form_state) {
if(!isset($element['#value']) || empty($element['#value'])){
drupal_rebuild_form($form_state['build_info']['form_id'], $form_state);
form_set_error('field_line_item_map', t('Agreement to Product EULA must be checked'));
}
}
function water_quality_form_alter(&$form, &$form_state, $form_id) {
...
...
$form['line_item_fields']['field_subscription_type'][LANGUAGE_NONE]['#element_validate'][] =
'water_quality_subscription_type_validate';
$form['line_item_fields']['field_eomap_eula_agreement'][LANGUAGE_NONE]['#element_validate'][] =
'eomap_eula_validate';
...
...
}
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Open Layers Editor has some Bugs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Open Layers Editor has some Bugs
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The Open Layers Editor has some Bugs
$form_state['no_cache'] = TRUE;
if (isset($form_state['values']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'])){
$form_state['input']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'] =
$form_state['values']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'];
} else {
if (isset($form_state['input']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'])){
$wkt = $form_state['input']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'];
if(stripos($wkt, 'POINT') !== false){
$wkt = substr(strstr($wkt, '('), 1,(stripos($wkt, ',POINT') - stripos($wkt, '(') -1));
}
$form['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt']['#value'] = $wkt;
}
}
Some form fields mysteriously loose
their value and need to be refilled
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Wrapping it up: Placing the Geo 
Data Product in the Shopping Cart
A Rule
overwrites
the line item
price with
the calculated
price
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Wrapping it up: Placing the Geo 
Data Product in the Shopping Cart
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
What it's all about...
You can build some such thing
and even more sophisticated
sites with Drupal modules
and a little coding!
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
Any Questions?
Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org
The End
Спасибі за увагу
Спасибо за внимание
Danke für Ihre Aufmerksamkeit
Thank you for your attention
Translated to a select
choice of languages
observed on planet Earth:

More Related Content

PDF
Drupal in aerospace - selling geodetic satellite data with Commerce - Martin ...
PPSX
Where the %$#^ Is Everybody? Geospatial Solutions For Oracle APEX
PDF
May the parallelity be with you! Distributed computing using Erlang language ...
PPT
Drupal Perfomance issues, tips & tricks. Антон Иванов.
PDF
DrupalGap. How to create native application for mobile devices based on Drupa...
PPT
How to? Drupal developer toolkit. Dennis Povshedny.
PPT
Презентация модуля YandexMoney - Yury Glushkov
PDF
Diplom bichih udirdamj
Drupal in aerospace - selling geodetic satellite data with Commerce - Martin ...
Where the %$#^ Is Everybody? Geospatial Solutions For Oracle APEX
May the parallelity be with you! Distributed computing using Erlang language ...
Drupal Perfomance issues, tips & tricks. Антон Иванов.
DrupalGap. How to create native application for mobile devices based on Drupa...
How to? Drupal developer toolkit. Dennis Povshedny.
Презентация модуля YandexMoney - Yury Glushkov
Diplom bichih udirdamj

Similar to Drupal and Outer space - Martin Mayer (20)

PDF
Moose: how to solve real problems without reading code
PPTX
Platform agnostic information systems development
PDF
(PHPers Wrocław #5) How to write valuable unit test?
PPTX
Best Practices with ODI : Flexibility
PPTX
Deep learning
PDF
AlphaEarth Foundations and the Satellite Embedding dataset
PDF
Gmaps Railscamp2008
PDF
Android swedroid
PDF
Why is crud a bad idea - focus on real scenarios
PDF
Machine Learning Model for M.S admissions
PPTX
Running Intelligent Applications inside a Database: Deep Learning with Python...
KEY
Saving Gaia with GeoDjango
PPTX
Angular Workshop_Sarajevo2
PDF
Informatics Practices (new) solution CBSE 2021, Compartment, improvement ex...
PDF
Spark Summit EU talk by Francois Garillot and Mohamed Kafsi
PDF
Mobility insights at Swisscom - Understanding collective mobility in Switzerland
PDF
Building Large jQuery Applications
PDF
Seeing Like Software
PDF
Scaling up data science applications
PDF
Scaling Up: How Switching to Apache Spark Improved Performance, Realizability...
Moose: how to solve real problems without reading code
Platform agnostic information systems development
(PHPers Wrocław #5) How to write valuable unit test?
Best Practices with ODI : Flexibility
Deep learning
AlphaEarth Foundations and the Satellite Embedding dataset
Gmaps Railscamp2008
Android swedroid
Why is crud a bad idea - focus on real scenarios
Machine Learning Model for M.S admissions
Running Intelligent Applications inside a Database: Deep Learning with Python...
Saving Gaia with GeoDjango
Angular Workshop_Sarajevo2
Informatics Practices (new) solution CBSE 2021, Compartment, improvement ex...
Spark Summit EU talk by Francois Garillot and Mohamed Kafsi
Mobility insights at Swisscom - Understanding collective mobility in Switzerland
Building Large jQuery Applications
Seeing Like Software
Scaling up data science applications
Scaling Up: How Switching to Apache Spark Improved Performance, Realizability...
Ad

More from DrupalCampDN (20)

PDF
Drupal - Changing the Web by Connecting Open Minds - Josef Dabernig
ODP
Dependency Injection in Drupal 8 - Стадник АндрейQweqwe
PDF
Our AWS Cloud Journey - Andrew Boag
PDF
Guzzle in Drupal 8 and as a REST client - Артем Мирошник
PDF
Blocks & Layouts in D7 - Josef Dabernig
PPTX
CKEditor в Drupal: тонкая настройка и кастомизация - Osman Seferov
PDF
Drush - use full power - Alexander Schedrov
PPTX
Это Drupal, %username%! - Андрей Черноус
PDF
Migrate - new way site upgrade
PPTX
Caching on highload Drupal site - Alexander Shumenko
PPTX
Rich Text in Drupal - Вадим Валуев
PDF
Panels как философия - Alexander Danilenko
PPTX
Twig internals - Maksym MoskvychevTwig internals maksym moskvychev
PPT
Boost your theming skills - Artem Shymko
PDF
Continious integration - Иван Лещёв
PPT
Rules - Yaroslav Doroshuk
PPT
Системы управления взаимоотношениями с клиентами. Drupal CRM Core. - Вадим Ми...
PPT
Render API - Pavel Makhrinsky
PPT
Темизация Drupal7. Omega theme. Александр Даниленко.
PPT
Управление отображением материалов с помощью Display Suite. Илья Станкевич.
Drupal - Changing the Web by Connecting Open Minds - Josef Dabernig
Dependency Injection in Drupal 8 - Стадник АндрейQweqwe
Our AWS Cloud Journey - Andrew Boag
Guzzle in Drupal 8 and as a REST client - Артем Мирошник
Blocks & Layouts in D7 - Josef Dabernig
CKEditor в Drupal: тонкая настройка и кастомизация - Osman Seferov
Drush - use full power - Alexander Schedrov
Это Drupal, %username%! - Андрей Черноус
Migrate - new way site upgrade
Caching on highload Drupal site - Alexander Shumenko
Rich Text in Drupal - Вадим Валуев
Panels как философия - Alexander Danilenko
Twig internals - Maksym MoskvychevTwig internals maksym moskvychev
Boost your theming skills - Artem Shymko
Continious integration - Иван Лещёв
Rules - Yaroslav Doroshuk
Системы управления взаимоотношениями с клиентами. Drupal CRM Core. - Вадим Ми...
Render API - Pavel Makhrinsky
Темизация Drupal7. Omega theme. Александр Даниленко.
Управление отображением материалов с помощью Display Suite. Илья Станкевич.
Ad

Recently uploaded (20)

PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PDF
WebRTC in SignalWire - troubleshooting media negotiation
PPTX
E -tech empowerment technologies PowerPoint
PDF
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PDF
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
PPTX
Introuction about WHO-FIC in ICD-10.pptx
PPTX
innovation process that make everything different.pptx
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PPTX
Digital Literacy And Online Safety on internet
PPTX
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
PDF
Cloud-Scale Log Monitoring _ Datadog.pdf
PDF
SASE Traffic Flow - ZTNA Connector-1.pdf
PPTX
Internet___Basics___Styled_ presentation
PPTX
presentation_pfe-universite-molay-seltan.pptx
PPTX
Power Point - Lesson 3_2.pptx grad school presentation
PPTX
522797556-Unit-2-Temperature-measurement-1-1.pptx
INTERNET------BASICS-------UPDATED PPT PRESENTATION
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
WebRTC in SignalWire - troubleshooting media negotiation
E -tech empowerment technologies PowerPoint
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
Introuction about WHO-FIC in ICD-10.pptx
innovation process that make everything different.pptx
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Digital Literacy And Online Safety on internet
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
Job_Card_System_Styled_lorem_ipsum_.pptx
Design_with_Watersergyerge45hrbgre4top (1).ppt
An introduction to the IFRS (ISSB) Stndards.pdf
Cloud-Scale Log Monitoring _ Datadog.pdf
SASE Traffic Flow - ZTNA Connector-1.pdf
Internet___Basics___Styled_ presentation
presentation_pfe-universite-molay-seltan.pptx
Power Point - Lesson 3_2.pptx grad school presentation
522797556-Unit-2-Temperature-measurement-1-1.pptx

Drupal and Outer space - Martin Mayer

  • 1. 25 -27 April, 2014 http://camp2014.drupal.dn.ua Drupal and Outer Space
  • 2. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org A Game Changer for the Geospatial Data Market Dauria Aerospace develops new ways in building low cost satellites, thus reducing costs for earth observation data drastically.
  • 3. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Game Changer for the Geospatial Data Market Affordable Geo data allow small businesses to pioneer new business models. Example: Low cost parcel monitoring service for local farmers
  • 4. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Building Satellites with Smartphone Technology
  • 5. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Building Lightweight Satellites Conventional Satellite New Satellite
  • 6. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Less Expensive Launches
  • 7. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org We need a Configurable Product with a Map
  • 8. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Commerce's Standard Handling of Product Variations http://demo.commerceguys.com/ck/tops/guy-short-sleeve-tee
  • 9. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Customizable Products Module As the ancient Drupal Proverb goes: There's a module for that
  • 10. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Configuration of References Content Type for the Product Display Configuration: Add Product Reference Set „Product Types that can be referenced“ to Product Type; Set „Add to Cart Line Item Type“ to Line Item Type Product Display Node Configuration: Set „Product Reference“ to Product Product Configuration: Set „Referenced by“ to Product Display Node Product Type Configuration: Set „Default Reference“ to Content Type Line Item Type Configuration: Set „Add to Cart Line Item Type“ to itself (self reference!)
  • 11. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Validating User Inputs
  • 12. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Validating User Inputs
  • 13. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Validating User Inputs
  • 14. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Validating User Inputs
  • 15. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Validating User Inputs
  • 16. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Utilizing PostGIS PostGIS extends PostgreSQL Databases with geodetic functio
  • 17. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The PostGIS Module integrates this Functions into Drupal function validate() { $geo = is_null($this->wkt) ? $this->geometry : $this->wkt; try { $result = db_query("SELECT ST_GeometryType(:geo), ST_IsValid(:geo), ST_IsValidReason(:geo) as reason", array(':geo' => $geo))->fetchAssoc(); // Return reason if geometry is not valid. if (!$result['st_isvalid']) { return array( 'error' => 'postgis_unparsable', 'message' => t('Not a valid geometry: @reason.', array('@reason' => $result['reason'])), ); } ... } catch (PDOException $e) { // TODO: catch only WKT parse errors. return array( 'error' => 'postgis_unparsable', 'message' => t('Unable to parse WKT: ' . $geo), ); } } class PostgisGeometry { ... class PostgisGeometry { ...
  • 18. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org But the PostGIS Module has some Weaknesses /** * Calculates diffrence to a given geometry. * * @param PostgisGeometry $geometry * Geometry which this instance will be compared to. * * @return PostgisGeometry * Geometry of diffrence. */ function diff($geometry) { ... $geo_diff = db_query("SELECT ST_Union(ST_Difference(:geo_a, :geo_b), ST_Difference(:geo_b, :geo_a))", array(':geo_a' => $geo_a, ':geo_b' => $geo_b))->fetchField(); $geo_type = db_query("SELECT GeometryType(:geo_diff)", array(':geo_diff' => $geo_diff))->fetchField(); $diff = new PostgisGeometry($geo_type, $this->srid); $diff->fromGeometry($geo_diff); return $diff; } - Some important geodetic functions are not implemented - Error handling is inconsistent
  • 19. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Extending and Overwriting the PostGIS Module class PostgisGeometries extends PostgisGeometry { ... function intersects($geometry) { if ((get_class($geometry) !== 'postgis_geometry') && (get_class($geometry) !== 'PostgisGeometries')) { throw new PostgisGeometryException('not postgis_geometry'); } try { $geo_a = $this->getText(); if(stripos($geo_a,'GEOMETRYCOLLECTION(' ) === 0) { $geo_a = substr(strstr($geo_a, '('),1, -1); } $geo_b = $geometry->getText(); if(stripos($geo_b,'GEOMETRYCOLLECTION(' ) === 0) { $geo_b = substr(strstr($geo_b, '('),1, -1); } $intersects = db_query("SELECT ST_Intersects(text :geo_a, text :geo_b)", array(':geo_a' => $geo_a, ':geo_b' => $geo_b))->fetchField(); return $intersects; } catch (PDOException $e) { throw new PostgisGeometryException( $e->getMessage( ) , (int)$e->getCode( ) ); } }
  • 20. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Writing a module to validate the AOI and calculate the price function water_quality_form_alter(&$form, &$form_state, $form_id) { ... $coverage_region_comparison->transform($aoi->getSrid()); $coverage_region_comparison->dump(); $intersects_google_projection = $coverage_region_comparison->intersects($aoi_comparison); if ($intersects_google_projection){ // Convert aoi to srid of the region. $aoi_comparison->transform($coverage_region['region']->getSrid()); $aoi_comparison->dump(); // check if the aoi intersects with the region. This needs to be // done in the SRID of the coverage region for accuracy. $within = $aoi_comparison->within($coverage_region['region']); if ($within){ ... ... $form['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt']['#element_validate'][] = 'water_quality_aoi_validate'; ... function water_quality_aoi_validate($element, &$form_state) { ...
  • 21. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Open Layers Editor has some Bugs What it should deliver POLYGON((1066993.16984217 4873953.49407963, 1340943.47921804 5392502.29411237, 1810572.58092165 5382718.35450175, 1979345.539345157 5106322.0602720035, 1849708.33939679 4776114.09813913, 1066993.16984217 4873953.49407963)) GEOMETRYCOLLECTION( POLYGON((1066993.16984217 4873953.49407963, 1340943.47921804 5392502.29411237, 1810572.58092165 5382718.35450175, 1979345.539345157 5106322.0602720035, 1849708.33939679 4776114.09813913, 1066993.16984217 4873953.49407963)), POINT(1203968.324530105 5133227.894096), POINT(1575758.0300698448 5387610.32430706), POINT(1894959.0601334036 5244520.207386877), POINT(1914526.9393709735 4941218.079205567), POINT(1458350.75461948 4825033.79610938), POINT(1066993.16984217 4873953.49407963), POINT(1340943.47921804 5392502.29411237), POINT(1810572.58092165 5382718.35450175), POINT(1979345.539345157 5106322.0602720035), POINT(1849708.33939679 4776114.09813913)) What it sometime s delivers GEOMETRYCOLLECTION()
  • 22. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Open Layers Editor has some Bugs Caching and the Open Layers Editor have an awkward relationship
  • 23. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Open Layers Editor has some Bugs function water_quality_subscription_type_validate($element, &$form_state) { if(!isset($element['#value']) || empty($element['#value'])){ drupal_rebuild_form($form_state['build_info']['form_id'], $form_state); } } function eomap_eula_validate($element, &$form_state) { if(!isset($element['#value']) || empty($element['#value'])){ drupal_rebuild_form($form_state['build_info']['form_id'], $form_state); form_set_error('field_line_item_map', t('Agreement to Product EULA must be checked')); } } function water_quality_form_alter(&$form, &$form_state, $form_id) { ... ... $form['line_item_fields']['field_subscription_type'][LANGUAGE_NONE]['#element_validate'][] = 'water_quality_subscription_type_validate'; $form['line_item_fields']['field_eomap_eula_agreement'][LANGUAGE_NONE]['#element_validate'][] = 'eomap_eula_validate'; ... ... }
  • 24. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Open Layers Editor has some Bugs
  • 25. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Open Layers Editor has some Bugs
  • 26. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The Open Layers Editor has some Bugs $form_state['no_cache'] = TRUE; if (isset($form_state['values']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'])){ $form_state['input']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'] = $form_state['values']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt']; } else { if (isset($form_state['input']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt'])){ $wkt = $form_state['input']['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt']; if(stripos($wkt, 'POINT') !== false){ $wkt = substr(strstr($wkt, '('), 1,(stripos($wkt, ',POINT') - stripos($wkt, '(') -1)); } $form['line_item_fields']['field_line_item_map'][LANGUAGE_NONE][0]['wkt']['#value'] = $wkt; } } Some form fields mysteriously loose their value and need to be refilled
  • 27. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Wrapping it up: Placing the Geo  Data Product in the Shopping Cart A Rule overwrites the line item price with the calculated price
  • 28. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Wrapping it up: Placing the Geo  Data Product in the Shopping Cart
  • 29. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org What it's all about... You can build some such thing and even more sophisticated sites with Drupal modules and a little coding!
  • 30. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org Any Questions?
  • 31. Martin Mayer, Diplom Systems Practitioner (Open) info@socialoom.org The End Спасибі за увагу Спасибо за внимание Danke für Ihre Aufmerksamkeit Thank you for your attention Translated to a select choice of languages observed on planet Earth: