"http://maps.google.com/maps?q=@lat@,+@long@&iwloc=A&hl=en",
"Google Earth" => "@wwwroot@/mod/data/field/latlong/kml.php?d=@dataid@&fieldid=@fieldid@&rid=@recordid@",
"Geabios" => "http://www.geabios.com/html/services/maps/PublicMap.htm?lat=@lat@&lon=@long@&fov=0.3&title=Moodle%20data%20item",
"OpenStreetMap" => "http://www.openstreetmap.org/index.html?lat=@lat@&lon=@long@&zoom=11",
"Multimap" => "http://www.multimap.com/map/browse.cgi?scale=200000&lon=@long@&lat=@lat@&icon=x"
);
// Other map sources listed at http://kvaleberg.com/extensions/mapsources/index.php?params=51_30.4167_N_0_7.65_W_region:earth
// Parameter data used:
// "param1" is a comma-separated list of the linkout service names that are enabled for this instance
// "param2" indicates the label that will be used in generating Google Earth KML files: -1 for item #, -2 for lat/long, positive number for the (text) field to use.
function data_field_latlong($field=0, $data=0) {
parent::data_field_base($field, $data);
}
function display_add_field($recordid=0){
global $CFG;
$lat = '';
$long = '';
if ($recordid){
if ($content = get_record('data_content', 'fieldid', $this->field->id, 'recordid', $recordid)) {
$lat = $content->content;
$long = $content->content1;
}
}
$str = '
';
$str .= '';
$str .= '
';
return $str;
}
function display_browse_field($recordid, $template) {
global $CFG;
if ($content = get_record('data_content', 'fieldid', $this->field->id, 'recordid', $recordid)){
$lat = empty($content->content)? '':$content->content;
$long = empty($content->content1)? '':$content->content1;
if (empty($lat) or empty($long)) {
return '';
}
if($lat < 0) {
$compasslat = "" . sprintf('%01.4f', 0 - $lat) . '°S';
} else {
$compasslat = "" . sprintf('%01.4f', $lat) . "°N";
}
if($long < 0) {
$compasslong = "" . sprintf('%01.4f', 0 - $long) . '°W';
} else {
$compasslong = "" . sprintf('%01.4f', $long) . "°E";
}
$str = '';
return $str;
}
return false;
}
function update_content($recordid, $value, $name='') {
$content = new object;
$content->fieldid = $this->field->id;
$content->recordid = $recordid;
$names = explode('_', $name);
switch ($names[2]){
case 0: // update lat
$content->content = (float)$value;
break;
case 1: // update long
$content->content1 = (float)$value;
break;
default:
break;
}
if ($oldcontent = get_record('data_content','fieldid', $this->field->id, 'recordid', $recordid)) {
$content->id = $oldcontent->id;
return update_record('data_content', $content);
} else {
return insert_record('data_content', $content);
}
}
function get_sort_sql($fieldname) {
global $CFG;
switch ($CFG->dbtype) {
case 'mysql': // string in an arithmetic operation is converted to a floating-point number
return '('.$fieldname.'+0.0)';
default:
return 'CAST('.$fieldname.' AS REAL)';
}
}
}
?>