2

I am using the following PHP code in order to read data from PostGIS and save it in KML format as a file. When I load the page a document with ".PHP" extension is returned (not .kml) which inside has the data in KML format. The page returns no error, but the console of the developer tools gives the following note:

Resource interpreted as Document but transferred with MIME type application/vnd.google-earth.kml+xml: http://mydomain.com/....

Does anyone have any idea what the problem could be?

The PHP code:

<?php
$dbconn = pg_connect("dbname='nyc' user='postgres' password='****' host='localhost'");
if (!$dbconn) {
 echo "Not connected : " . pg_error();
 exit;
}
$sql = 'SELECT *, ST_AsKML(ST_Transform(geom,26918)) AS kmlgm FROM nyc_census_blocks LIMIT 5';
 # Try query or error
$query_result = pg_query($dbconn, $sql);
if (!$query_result) {
 echo "An SQL error occured.\n";
 exit;
}
$kml ="<kml><Document>";
for ($i = 0; $i < pg_numrows($query_result); $i++) {
 $townname = pg_result($query_result, $i, 0);
 $townkml = pg_result($query_result, $i, 1);
 $kml .= "<Placemark><name>Town: ".$townname."</name><description>".$townname."</description>".$townkml."</Placemark>\n";
}
$kml .= "</Document></kml>";
header('Content-Type: application/vnd.google-earth.kml+xml');
echo $kml;
pg_close($dbconn);
?>

and the kml data returned inside a file with ".php" suffix!!:

<kml><Document><Placemark><name>Town: 1</name><description>1</description>360850009001000</Placemark>
<Placemark><name>Town: 2</name><description>2</description>360850020011000</Placemark>
<Placemark><name>Town: 3</name><description>3</description>360850040001000</Placemark>
<Placemark><name>Town: 4</name><description>4</description>360850074001000</Placemark>
<Placemark><name>Town: 5</name><description>5</description>360850096011000</Placemark>
</Document></kml>
asked Feb 24, 2014 at 17:28

1 Answer 1

4

If you want to make browser download the generated KML, an extra header is needed:

header("Content-Disposition: attachment; filename=MY_KML_FILENAME.kml");

Otherwise, just ignore the message, it's harmless. Chrome doesn't recognize the KML-specific Content-Type, and expects ordinary text/xml or application/xml, but since it's all XML, it should be parsed correctly. Do you have any trouble displaying the KML in map application or Google Earth?

answered Feb 24, 2014 at 17:59
6
  • Thanks for the tip. That actually worked, but now there is another problem with the code. when I check the generated kml file with geojson.io , gives me an error of 0(zero) features imported. Do you have any idea how to fix this? Commented Feb 25, 2014 at 10:52
  • Now I see that the generated KML doesn't contain any geometry. First, remove the ST_Transform part (ST_AsKML will automagically transform the geometry to EPSG:4326) and run the query in some non-GIS software like pgAdmin or Postgres shell. Then inspect the results and post here. Commented Feb 25, 2014 at 12:01
  • Just did what you said, and queried in pgAdmin, returns the rows with correct information. For example, the value for the first row for kmlgm (the geometry field) is: Commented Feb 25, 2014 at 12:39
  • "<MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>-74.079205770132376,40.6434307837456 -74.079135046476281,40.64333789954803 -74.079907504924435,40.642973348520506 -74.080594280570295,40.643841897111301 -74.080808877568955,40.644115449954064 -74.081942655209758,40.644028080539293 -74.082072684564423,40.644207605437828 -74.082371181489705,40.644645079984301 -74.080281982569403,40.644793215660968 -74.079205770132376,40.6434307837456</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>" Commented Feb 25, 2014 at 12:40
  • I also made the changes in the php code, loaded it again, but the generated .kml file has the same problem as before... Any clue what's causing the problem? Commented Feb 25, 2014 at 12:41

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.