function osm_info($ret, $object, $param) { global $load_xml; global $object_elements; if(in_array("internal", $param["info_noshow"])) { $ret[]=array("internal", "X"); return; } $r=""; $r.="<h4>Info</h4>\n"; $r.="Type/ID: ".$object->id."<br>\n"; if($object->element!="coll") { $res_info=sql_query("select * from ".$object_elements[$object->element]."s where ". "id='$object->only_id'"); $elem_info=pg_fetch_assoc($res_info); $r.="Last changed: ".$elem_info[tstamp]." by ".$elem_info[user_name]."<br/>\n"; } $r.="<h4>Tags</h4>\n"; foreach($object->tags->data() as $k=>$v) { $r.="$k: $v<br/>\n"; } // Members of $qry="select 'rel' as element, relation_id as id, member_role from relation_members where member_id='$object->only_id' and member_type='$object->place_type_id' ". "union ". "select 'coll' as element, coll_id as id, member_role from coll_members where member_id='$object->only_id' and member_type='$object->place_type_id'"; $list=array(); $res=sql_query($qry); while($elem=pg_fetch_assoc($res)) { $list[]=$elem; } if(sizeof($list)) { $r.="<h4>Members of</h4>\n"; load_objects($list); foreach($list as $elem) { $ob=load_object($elem); $r.=list_entry($ob->id, $ob->long_name(), array($ob->tags->get("type"), ($elem[member_role]?"as $elem[member_role]":"no role"))); $load_xml[]=$ob->id; } } if($object->place()->members()) { $r.="<h4>Members</h4>\n"; foreach($object->place()->members() as $member) { $load_xml[]=$member[0]->id; $r.=list_entry($member[0]->id, $member[0]->long_name(), $member[1]?array($member[1]):null); } } $r.="<h4>".lang("head:actions")."</h4>\n"; if(($object->place_type=="node")||($object->place_type=="way")||($object->place_type=="rel")) { $r.="<li><a href='http://www.openstreetmap.org/browse/{$object_elements[$object->place_type]}/$object->only_id'>".lang("action_browse")."</a></li>\n"; } $geo=$object->place()->get_centre(); if(sizeof($geo)) { // $r.=print_r($geo, 1); $geo=goole_to_utm($geo, 1); $r.="<li><a href='http://www.openstreetmap.org/edit?lat=$geo[lat]&lon=$geo[lon]&zoom=16'>".lang("action_edit")."</a></li>\n"; } $ret[]=array("internal", $r); }
function routing($ret, $object, $param) { global $key_cloudmade_api; global $routing_gpx; global $routing_end_pos; global $ui_lang; if(in_array("routing", $param["info_noshow"])) { $ret[]=array("routing", "X"); return; } $ret[]=array("routing", "<h4>Actions</h4>"); if($param[pos_lon]) $r ="<a href='javascript:set_my_pos()'>".lang("geo_change_pos")."</a><br>\n"; else $r ="<button onClick='javascript:set_my_pos()'>".lang("geo_set_pos")."</button><br>\n"; $r.="Route type: <select id='route_type' onChange='change_route_type()'>"; foreach(array("car", "car_shortest", "bicycle", "foot") as $t) { $r.="<option value='$t'"; if($t==$param[route_type]) $r.=" selected"; $r.=">".lang("routing_type_$t")."</option>\n"; } $r.="</select><br>\n"; $ret[]=array("routing", $r); if($param[pos_lon]) { $poss=goole_to_utm(array("lon"=>$param[pos_lon], "lat"=>$param[pos_lat])); // print_r($poss); if($param[routing_end_lon]) { $routing_end_pos=goole_to_utm(array("lon"=>$param[routing_end_lon], "lat"=>$param[routing_end_lat])); } else { $routing_end_pos=goole_to_utm($object->place()->get_centre()); // $res=sql_query("select astext(ST_Centroid(way)) as pos from geo where element='$object->element' and osm_id='$object->only_id'"); // $elem=pg_fetch_assoc($res); // if(ereg("POINT\(([0-9\.]*) ([0-9\.]*)\)", $elem["pos"], $m)) { // $routing_end_pos=goole_to_utm(array("lon"=>$m[1], "lat"=>$m[2])); // } } if(!$routing_end_pos) { $ret[]=array("routing", "Error: Could not determine destination"); return; } $ret[]=array("routing", "<h4>Route</h4>\n"); $url="http://routes.cloudmade.com/$key_cloudmade_api/api/0.3/". "$poss[lat],$poss[lon],$routing_end_pos[lat],$routing_end_pos[lon]/". implode("/", explode("_", $param[route_type])).".gpx?lang=$ui_lang"; if(!(@$r=file_get_contents($url))) { $ret[]=array("routing", "Error: Could not download route"); unset($routing_gpx); return; } //$ret[]=array("routing", "$url<br>\n"); if(substr($r, 0, 1)=="<") { $routing_gpx=$r; $routing_gpx=new DOMDocument(); $routing_gpx->loadXML($r); $text=""; $gpx=$routing_gpx->getElementsByTagname("gpx"); if($gpx) { $c=$gpx->item(0)->getElementsByTagname("extensions"); if($c) { $c=$c->item(0); $c1=$c->getElementsByTagname("distance"); $text.=lang("routing_distance").": ". $c1->item(0)->textContent."m<br>\n"; $c1=$c->getElementsByTagname("time"); $text.=lang("routing_time").": ". format_time($c1->item(0)->textContent)."<br/>\n"; $text.="<hr/>\n"; } $c=$gpx->item(0)->getElementsByTagname("rtept"); for($i=0; $i<$c->length; $i++) { $c1=$c->item($i)->getElementsByTagname("desc"); $text.="".($c1->item(0)->textContent)."<br/>\n"; } $text.="<hr/>\n"; $text.=lang("routing_disclaimer")."<br/>\n"; } // $c=$c->firstChild; // while($c) { // $r.="$c->textContent<br>\n"; // $c=$c->nextSibling; // } $ret[]=array("routing", $text); } else { $ret[]=array("routing", "Error: $r"); unset($routing_gpx); return; } } }