Re: [mapserver-users] Best way to do a batch reprojection (on windows)
On Aug 7, 2013, at 2:47 PM, Mark Korver mwkor...@gmail.com wrote: If you are serving to many, and are not doing cached tiled requests, On a tangential note, tiling is so trivially easy that you should always be tiling. TileCache takes about 10 mins to set up, and is worth every one of those 10 mins. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Error on mapserver
On Jul 10, 2013, at 7:15 AM, ciska...@tiscali.it ciska...@tiscali.it wrote: Warning: ms_newMapObj(): [MapServer Error]: msLoadMap(): First token must be MAP, this doesn't look like a mapfile.\n in http://www.mapserver.org/introduction.html#introduction -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] mapserver-users Digest, Vol 65, Issue 54
Dear MapServer admin, Could you please drop the responder's email from the mailing list temporarily, until the responder returns on Aug 5? Many thanks, On Jun 28, 2013, at 8:43 AM, s...@planyukon.ca wrote: Sorry I missed you, but I am on parental leave/holiday/training until August 5th. Urgent YLUPC business can be sent to the YLUPC director at r...@planyukon.ca. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Combined spatial and attribute query
On Feb 8, 2013, at 8:01 AM, Bistrais, Bob bob.bistr...@maine.gov wrote: Does anyone have advice on the best or most efficient way to query data, involving both a spatial and an attribute query. I need to query several layers, selecting based on an area, then select from that selection based on an attribute value. It would be OK to query by the attribute first, then spatial. This is a very generic, broad question that would have very specific case-by-case answers. It all depends on your query and, more importantly, your indexes. Why don't you just time both strategies and then figure out which one you could tune further. Depending on the attributes, you could possibly have more latitude playing around with the various indexes instead of just the spatial index. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Rendering Hindi Characters
On Jan 23, 2013, at 12:17 PM, Stephen Woodbridge wood...@swoodbridge.com wrote: On 1/23/2013 2:20 PM, Peter Mallen wrote: Hello Everyone, I am having issues rendering certain Hindi characters. I am using UTF-8 encoding. When attempting to display the following Hindi character in MapServer: र्ट It is rendered in MapServer as the following two characters: र् ट I believe these characters form what is called a conjunct consonant, of which there appear to be thousands of and most of them do not render using MapServer. Also, It appears that MapServer is having an issue displaying these conjunct consonants and wants to display these characters separately rather than to form them as one combined character. Here is a link describing more about the Devanagari alphabet: http://www.omniglot.com/writing/devanagari.htm Can anyone please help with this? Thank You, Peter Mallen Hi Peter, I can not speak to this specific problem but I can give you and overview. Mapserver uses fribidi library for rending this data and I know from working with Arabic that a lot depends on the font you are using, in additional to the capabilities and version of fribidi library. Isn't fribidi specifically for bidirectional languages? Hindi is strictly LTR. This kind of question is probably best asked on the fribidi list as they will know more about what is supported or not for any given language and they might be able to point you to a better font. http://www.fribidi.org/ You should probably make sure you are using a recent version of the library like 0.19.2 or better and be aware the 0.19.5 was released in Dec 2012. Peter, I forget where you and I left our off-list conversation re. the issues you were having with rendering Devnagari. Did you try feeding MapServer the correct Unicode characters? Hope you figure this out. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Rendering Hindi Characters
(adding the list back to cc so brains better than mine may help) On Jan 23, 2013, at 3:47 PM, Peter Mallen peter.mal...@airborne.aero wrote: Hi Puneet, I have passed the codes you have provided into MapServer (U+0930 U+094D U+091F ) and it displays the characters separately, not as one character. This is how Map Server displays it: र् ट hmmm... well, then this is definitely above my pay grade. Seems like you are doing the right thing, but my guess is MapServer's Unicode implementation is not working properly. I don't see any mention of Unicode on mapserver docs page. The only potentially relevant bit I see is (http://www.mapserver.org/installation/unix.html#obtaining-the-necessary-software) that libgd should be compiled against the iconv library which provides full support for Unicode. On my MBA I get $ ~ gdlib-config --libs -lXpm -lX11 -ljpeg -lfontconfig -lfreetype -lpng -lz -liconv Thank You, Peter Mallen -Original Message- From: Mr. Puneet Kishor [mailto:punk.k...@gmail.com] Sent: Wednesday, January 23, 2013 3:36 PM To: Peter Mallen Subject: Re: [mapserver-users] Rendering Hindi Characters On Jan 23, 2013, at 3:00 PM, Peter Mallen peter.mal...@airborne.aero wrote: Hi Puneet, I did try feeding MapServer the correct Unicode characters, and it did fix the characters using what I believe is called the Reph symbol (ि) but I could not get the conjunct consonants to display correctly. I have no idea what the above means ;-), but, did you try passing U+0930 U+094D U+091F to MapServer? See http://www.unicode.org/charts/PDF/U0900.pdf U+0930 - र - r U+094D - ् - halves the previously typed r 091F - ट - thick t U+sound Also, I have posted on the fribidi list and I believe it does only help with bidirectional languages, but I could be wrong. Thank You, Peter Mallen -Original Message- From: mapserver-users-boun...@lists.osgeo.org [mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Mr. Puneet Kishor Sent: Wednesday, January 23, 2013 12:27 PM To: mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] Rendering Hindi Characters On Jan 23, 2013, at 12:17 PM, Stephen Woodbridge wood...@swoodbridge.com wrote: On 1/23/2013 2:20 PM, Peter Mallen wrote: Hello Everyone, I am having issues rendering certain Hindi characters. I am using UTF-8 encoding. When attempting to display the following Hindi character in MapServer: र्ट It is rendered in MapServer as the following two characters: र् ट I believe these characters form what is called a conjunct consonant, of which there appear to be thousands of and most of them do not render using MapServer. Also, It appears that MapServer is having an issue displaying these conjunct consonants and wants to display these characters separately rather than to form them as one combined character. Here is a link describing more about the Devanagari alphabet: http://www.omniglot.com/writing/devanagari.htm Can anyone please help with this? Thank You, Peter Mallen Hi Peter, I can not speak to this specific problem but I can give you and overview. Mapserver uses fribidi library for rending this data and I know from working with Arabic that a lot depends on the font you are using, in additional to the capabilities and version of fribidi library. Isn't fribidi specifically for bidirectional languages? Hindi is strictly LTR. This kind of question is probably best asked on the fribidi list as they will know more about what is supported or not for any given language and they might be able to point you to a better font. http://www.fribidi.org/ You should probably make sure you are using a recent version of the library like 0.19.2 or better and be aware the 0.19.5 was released in Dec 2012. Peter, I forget where you and I left our off-list conversation re. the issues you were having with rendering Devnagari. Did you try feeding MapServer the correct Unicode characters? Hope you figure this out. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Rendering Hindi Characters
Peter, My guru in all things Hindi fonts tells me that the problem lies at the level where encodings are converted into font renderings. Apparently, र् ट is a perfectly correct alternate rendering of the unicode, just not Correct (with a capital C). I have no idea where this happens with MapServer. Thankfully I've never had to create a map with Hindi labels (I would be curious to learn, perhaps off-list, who wants to see maps with Hindi labels), but I too would like to see this resolved. Hope someone knowledgable chimes in. On Jan 23, 2013, at 3:58 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: (adding the list back to cc so brains better than mine may help) On Jan 23, 2013, at 3:47 PM, Peter Mallen peter.mal...@airborne.aero wrote: Hi Puneet, I have passed the codes you have provided into MapServer (U+0930 U+094D U+091F ) and it displays the characters separately, not as one character. This is how Map Server displays it: र् ट hmmm... well, then this is definitely above my pay grade. Seems like you are doing the right thing, but my guess is MapServer's Unicode implementation is not working properly. I don't see any mention of Unicode on mapserver docs page. The only potentially relevant bit I see is (http://www.mapserver.org/installation/unix.html#obtaining-the-necessary-software) that libgd should be compiled against the iconv library which provides full support for Unicode. On my MBA I get $ ~ gdlib-config --libs -lXpm -lX11 -ljpeg -lfontconfig -lfreetype -lpng -lz -liconv Thank You, Peter Mallen -Original Message- From: Mr. Puneet Kishor [mailto:punk.k...@gmail.com] Sent: Wednesday, January 23, 2013 3:36 PM To: Peter Mallen Subject: Re: [mapserver-users] Rendering Hindi Characters On Jan 23, 2013, at 3:00 PM, Peter Mallen peter.mal...@airborne.aero wrote: Hi Puneet, I did try feeding MapServer the correct Unicode characters, and it did fix the characters using what I believe is called the Reph symbol (ि) but I could not get the conjunct consonants to display correctly. I have no idea what the above means ;-), but, did you try passing U+0930 U+094D U+091F to MapServer? See http://www.unicode.org/charts/PDF/U0900.pdf U+0930 - र - r U+094D - ् - halves the previously typed r 091F - ट - thick t U+sound Also, I have posted on the fribidi list and I believe it does only help with bidirectional languages, but I could be wrong. Thank You, Peter Mallen -Original Message- From: mapserver-users-boun...@lists.osgeo.org [mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Mr. Puneet Kishor Sent: Wednesday, January 23, 2013 12:27 PM To: mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] Rendering Hindi Characters On Jan 23, 2013, at 12:17 PM, Stephen Woodbridge wood...@swoodbridge.com wrote: On 1/23/2013 2:20 PM, Peter Mallen wrote: Hello Everyone, I am having issues rendering certain Hindi characters. I am using UTF-8 encoding. When attempting to display the following Hindi character in MapServer: र्ट It is rendered in MapServer as the following two characters: र् ट I believe these characters form what is called a conjunct consonant, of which there appear to be thousands of and most of them do not render using MapServer. Also, It appears that MapServer is having an issue displaying these conjunct consonants and wants to display these characters separately rather than to form them as one combined character. Here is a link describing more about the Devanagari alphabet: http://www.omniglot.com/writing/devanagari.htm Can anyone please help with this? Thank You, Peter Mallen Hi Peter, I can not speak to this specific problem but I can give you and overview. Mapserver uses fribidi library for rending this data and I know from working with Arabic that a lot depends on the font you are using, in additional to the capabilities and version of fribidi library. Isn't fribidi specifically for bidirectional languages? Hindi is strictly LTR. This kind of question is probably best asked on the fribidi list as they will know more about what is supported or not for any given language and they might be able to point you to a better font. http://www.fribidi.org/ You should probably make sure you are using a recent version of the library like 0.19.2 or better and be aware the 0.19.5 was released in Dec 2012. Peter, I forget where you and I left our off-list conversation re. the issues you were having with rendering Devnagari. Did you try feeding MapServer the correct Unicode characters? Hope you figure this out. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Mapserver useful for ordinary sites or not?
On Dec 5, 2012, at 9:40 AM, Saka Royban sakaroy...@yahoo.com wrote: Hi guys After a lot of effort to use CGI mapserver in my own site and finally leaving hope to find a solution, i came here to ask whether maserver is useful just for dedicated servers or VPSs really? I (and as it sounds, most of users) have just bought some space from a host provider (i.e Linux) with a CGI-bin directory which as my host provider says is able to run CGI applications written in perl and C/C++. I have searched a lot but as it appears no one has been successful to run CGI mapserver in its CGI-bin folder. Am i right? You are not right. MapServer is surprisingly easy to set up and get working, at least for basic and mid-complexity use cases. CGI mapserver is useful just when shell access is available? Should i switch to Mapscript? Or maybe, buy a windows host with CGI capability? Unless you figure out what you are doing wrong, you can't set it right. Why don't you post your issues here in detail (how you are setting things up, have you followed the tutorial, etc.) along with the errors you are getting (general description as well as specific error messages. I am sure one of us will be able to help you. Your help would nicely be appreciated. I'm really got stuck and confused. Yup, frustration is a common feeling when things don't work, but really, no need to give up. You can do it, we can help -- Puneet Kishor Science and Data Policy at Creative Commons ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Mapserver useful for ordinary sites or not?
On Dec 5, 2012, at 10:48 AM, Saka Royban sakaroy...@yahoo.com wrote: Hi Stephen It's CentOS and i've extracted that file from Enterprise Linux GIS. I ONLY have cPanel in front myself. How can i run that command? If you don't have shell access, you can ask your web host to install it for you. Most decent web hosting providers will do it for you. If they don't, you should consider moving to one who will. Sorry but i really don't know. Thanks - Original Message - From: Stephen Woodbridge wood...@swoodbridge.com To: mapserver-users@lists.osgeo.org Cc: Sent: Wednesday, December 5, 2012 10:01 PM Subject: Re: [mapserver-users] Mapserver useful for ordinary sites or not? It is probably failing because of missing dependency. Try this from the command line: /path/to/cgi-bin/mapserver -v This will give a more useful error message you can read. That said, extracting the binary and copying it to the cgi-bin is not going to work in most cases because the whole point of package systems like rpm it to find and install the dependencies. What version of linux is installed on your host? There is probably a one line command that we can give you to install mapserver the correct way. -Steve W On 12/5/2012 1:16 PM, Saka Royban wrote: Thanks for your answer After lots of try, i found that i can extract mapserver binary from rpm using 7zip. I put that executable file to cgi-bin and call it via address bar but no success, just 500 Internal Server Error. (I know mapserver has some dependencies but in spite of that it everything was right it should display a nice error) Contacting with guys in host provider, they pointed me to http://mapserver.org/installation/unix.html#installation and finally told me there is no shell access to run this commands. I'm familiar with structure of mapserver cause of working with MS4W in my own computer. In addition, i've checked CGI-bin directory by running some perl script and everything is O.K. They really provide CGI capability. Now, i don't know what can i do more. (I'm not familiar with Linux, although i know what running a shell command means. I've been around computer since DOS age) Thanks in advance for helpful advices. Regards - Original Message - From: Mr. Puneet Kishor punk.k...@gmail.com To: MapServer OSGEO mapserver-users@lists.osgeo.org Cc: Sent: Wednesday, December 5, 2012 9:24 PM Subject: Re: [mapserver-users] Mapserver useful for ordinary sites or not? On Dec 5, 2012, at 9:40 AM, Saka Royban sakaroy...@yahoo.com mailto:sakaroy...@yahoo.com wrote: Hi guys After a lot of effort to use CGI mapserver in my own site and finally leaving hope to find a solution, i came here to ask whether maserver is useful just for dedicated servers or VPSs really? I (and as it sounds, most of users) have just bought some space from a host provider (i.e Linux) with a CGI-bin directory which as my host provider says is able to run CGI applications written in perl and C/C++. I have searched a lot but as it appears no one has been successful to run CGI mapserver in its CGI-bin folder. Am i right? You are not right. MapServer is surprisingly easy to set up and get working, at least for basic and mid-complexity use cases. CGI mapserver is useful just when shell access is available? Should i switch to Mapscript? Or maybe, buy a windows host with CGI capability? Unless you figure out what you are doing wrong, you can't set it right. Why don't you post your issues here in detail (how you are setting things up, have you followed the tutorial, etc.) along with the errors you are getting (general description as well as specific error messages. I am sure one of us will be able to help you. Your help would nicely be appreciated. I'm really got stuck and confused. Yup, frustration is a common feeling when things don't work, but really, no need to give up. You can do it, we can help -- Puneet Kishor Science and Data Policy at Creative Commons ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] [mapserver-dev] MapServer 6.2 released
As my work focuses more and more on the outer envelope of science and data, this reminds me more and more of how much we all owe to the work you guys do at the core. Much gratitude and respect. -- Puneet Kishor Science and Data Policy at Creative Commons On Nov 14, 2012, at 7:15 AM, Lime, Steve D (DNR) steve.l...@state.mn.us wrote: And on GIS Day no less… nice timing. Fabulous work by all those that contributed code. A special shout out to Thomas for handling the release manager role. Thanks everyone! Steve From: mapserver-dev-boun...@lists.osgeo.org [mailto:mapserver-dev-boun...@lists.osgeo.org] On Behalf Of thomas bonfort Sent: Wednesday, November 14, 2012 9:03 AM To: MapServer Dev Mailing List; MapserverList OSGEO; osgeo-discuss (disc...@lists.osgeo.org) Subject: [mapserver-dev] MapServer 6.2 released The MapServer team is pleased to announce the release of MapServer 6.2, along with the joint release of tinyOWS 1.1.0 and MapCache 1.0.0. Details of the new features, migration instructions, and download links can be found on the dedicated announcement page at http://www.mapserver.org/development/announce/6-2.html . cheers, The MapServer PSC ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapServer and shapefile
On Oct 4, 2012, at 10:56 PM, Fabio Brolese fabiobrolese-fo...@yahoo.it wrote: Trying using shapefile as base layer I didn't find where to put my shapefile and to let them seen by MapServer. The examples say me to set the map file correctly but not where to save the shp files how to say to MapServer where thay are. Is there a directive in the main map file where to set the location of shp files like I set the log file path and etc. http://mapserver.org/mapfile/map.html MAP SHAPEPATH [filename] Path to the directory holding the shapefiles or tiles. There can be further subdirectories under SHAPEPATH. http://mapserver.org/mapfile/layer.html LAYER DATA [filename]|[sde parameters][postgis table/column][oracle table/column] Full filename of the spatial data to process. No file extension is necessary for shapefiles. Can be specified relative to the SHAPEPATH option from the Map Object. Da: Cristiano Sumariva sumar...@gmail.com A: Fabio Brolese fabiobrolese-fo...@yahoo.it Inviato: Martedì 2 Ottobre 2012 13:14 Oggetto: Re: [mapserver-users] MapServer and shapefile If your map vector is not huge, and processing time is not a problem - something greater then a few seconds for a tile - you can use a WMS layer as base. Just add isBaseLayer true to parameter options on layer. This should be minimal to change. At my sites I did not note WMS overhead on requests. You should know that OpenLayers is greed and will issue several concurrent requests to server. Processing spikes will happen. For larger sets you maybe at the need of some cache stuff. Consider using one in a programming language you know in case you need do maintenance in source code. Or if confortable with some, create your particular simple cache maybe an option. 2012/10/2 Fabio Brolese fabiobrolese-fo...@yahoo.it Yes, sorry, I was talking about OpenLayers. I understood and is like I did with all the layers I set pointing on PostGIS. I have also a base layer set as OpenLayers.Layer.TMS that load image tiles to show the city map. What we want to do is to change the base layer to read the city map from shapfile instead of reading image tiles. Do you know if there is a way to do what we want or do I have to reconsider my structure and consider and use it as OpenLayers.Layer.WMS? Fabio Da: Rahkonen Jukka jukka.rahko...@mmmtike.fi A: mapserver-users@lists.osgeo.org mapserver-users@lists.osgeo.org Inviato: Martedì 2 Ottobre 2012 9:05 Oggetto: Re: [mapserver-users] MapServer and shapefile Hi, Because you talk about base layer I think that you are perhaps going to show your map in OpenLayers. If that is the case then the answer is yes and this OpenLayers example shows how it can be done. http://dev.openlayers.org/releases/OpenLayers-2.12/examples/wms-untiled.html On the Mapserver side you must configure a WMS layer that is using shapefile as input data. http://www.mapserver.org/ogc/wms_server.html -Jukka Rahkonen- Fabio Brolese wrote: Hello everybody, after a long search on Google I'm here to ask you if it's possible to use a shapefile as base layer. Everything I found was on exporting to shapefile or drawing objects from shapefile but nothing saying that I can use it as base layer. Can anyone help me? TIA Fabio ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapServer vs ArcGIS server
On Jul 4, 2012, at 6:03 AM, Wang, Ya wrote: Mike: Thank you very much for the sharing. It is really great information. I have another question now. How does MapServer compare with ArcGIS server in terms of providing API or service layers to support the enthusiasm of the online development community? .. Why don't you summarize for us how and what ArcGIS Server provides in terms of API or service layers and how it supports the enthusiasm of its online development community? That knowledge would benefit several of us, I believe. Also, try asking the same question on the ArcGIS Server email list, if there is one, and then summarize the responses you get there. I would be very curious to read those. Finally, wrt MapServer's programming hooks and APIs, have you visited the docs at http://mapserver.org? Lots of great, entirely community developed information there. Remember, no one owns MapServer -- you and I and others and everyone owns it. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Curved Lines
On Jun 27, 2012, at 2:13 AM, juliap wrote: Hi all, I have the following layer of type line : LAYER NAME line STATUS ON TYPE LINE CONNECTIONTYPE OGR CONNECTION MSSQL:server=server;database=database;uid=id;pwd=pwd DATA SELECT geometry::STLineFromText('LINESTRING (' +CAST(Geo.STX AS VARCHAR(54)) +' ' +CAST(Geo.STY AS VARCHAR(54)) +', ' +CAST(Geo.STX AS VARCHAR(54)) +' ' +CAST(Geo.STY AS VARCHAR(54)) +')' ,4326) FROM column WHERE DATEDIFF(mi, CreatedON, CURRENT_TIMESTAMP) ='%x%' CLASS STYLE WIDTH 3 SIZE 1 COLOR 0 0 128 END # end of style END # end of class PROJECTION init=epsg:4326 END # end of projection END # end of layer I was wondering how to get a curved line from this data. I tried using angle and gap, but I don't see any changes. Any suggestions? Your understanding of geometry is a bit off here. In a query result set, each row is a feature, and a line feature would be made up of two or points; a curved line feature, of course, would be made up of three or more points. What you are getting in the result set above is a bunch of features, each of which are a point repeated twice. I think what you really want is to create a single line feature from all these points. So, you would probably do some kind of an aggregate on these points. I don't know the functions available in SQL Server, but there must be an analog for Postgres's aggregate functions. You want to collect all the points and make a line feature from them, and then pass that to MapServer to draw. You could make a view that does all this, and then call the view from MapServer. Hope this helps. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Curved Lines
On Jun 27, 2012, at 8:17 PM, Rahkonen Jukka wrote: Hi, The question, if I understand is correctly, is relevant. In EPSG:4326 shortest distance between two points is better expressed as a curve than as a straight linestring. However, Mapserver does not support curves of any kind. Interesting spin; didn't think of that. However, note that, as Brent pointed out, the OP is SELECTing the same coords twice, so, in effect, they are two coincident points of line length zero. You may find some workaround from GDAL. Ogr2ogr is having a segmentize option for this purpose. It does not support real curves either, but it creates intermediate points so that linestrings are shorter and thus follow the curve better. See http://gdal.org/ogr2ogr.html -Jukka Rahkonen- -Alkuperäinen viesti- Lähettäjä: mapserver-users-boun...@lists.osgeo.org [mailto:mapserver-users-boun...@lists.osgeo.org] Puolesta Mr. Puneet Kishor Lähetetty: 27. kesäkuuta 2012 17:39 Vastaanottaja: juliap Kopio: mapserver-users@lists.osgeo.org Aihe: Re: [mapserver-users] Curved Lines On Jun 27, 2012, at 2:13 AM, juliap wrote: Hi all, I have the following layer of type line : LAYER NAME line STATUS ON TYPE LINE CONNECTIONTYPE OGR CONNECTION MSSQL:server=server;database=database;uid=id;pwd=pwd DATA SELECT geometry::STLineFromText('LINESTRING (' +CAST(Geo.STX AS VARCHAR(54)) +' ' +CAST(Geo.STY AS VARCHAR(54)) +', ' +CAST(Geo.STX AS VARCHAR(54)) +' ' +CAST(Geo.STY AS VARCHAR(54)) +')' ,4326) FROM column WHERE DATEDIFF(mi, CreatedON, CURRENT_TIMESTAMP) ='%x%' CLASS STYLE WIDTH 3 SIZE 1 COLOR 0 0 128 END # end of style END # end of class PROJECTION init=epsg:4326 END # end of projection END # end of layer I was wondering how to get a curved line from this data. I tried using angle and gap, but I don't see any changes. Any suggestions? Your understanding of geometry is a bit off here. In a query result set, each row is a feature, and a line feature would be made up of two or points; a curved line feature, of course, would be made up of three or more points. What you are getting in the result set above is a bunch of features, each of which are a point repeated twice. I think what you really want is to create a single line feature from all these points. So, you would probably do some kind of an aggregate on these points. I don't know the functions available in SQL Server, but there must be an analog for Postgres's aggregate functions. You want to collect all the points and make a line feature from them, and then pass that to MapServer to draw. You could make a view that does all this, and then call the view from MapServer. Hope this helps. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] elevation profile
The elevation profile widget is finally implemented at http://earth-base.org/geomaps Click on the fourth button from the top on the left, then draw a line on the map to see the profile. As with all my apps, the values themselves can be retrieved by querying for them directly from the browser or from the command line. For example http://earth-base.org/geomaps/elevation.json?linestring=LINESTRING(-118.706+37.933%2C-109.477+42.494) This one is dedicated to Steve Woodbridge, Brent Wood and David Fawcett. .. -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Inefficient rendering of layer
On Mar 27, 2012, at 12:17 PM, juliap wrote: SELECT geom , VotingFor FROM dbo.[BF_PROV_ELECTORAL_DIVISION] AS elec WITH (INDEX(ogr_geom_sidx)) JOIN dbo.[Survey] ON GeoL.STWithin(geom) = 1 WHERE PartyVotingFor = ( SELECT TOP 1 [VotingFor] FROM dbo.[BF_PROV_ELECTORAL_DIVISION] AS elec2 WITH (INDEX(ogr_geom_sidx)) JOIN dbo.[Survey] ON GeoL.STWithin(geom) = 1 WHERE VotingFor = '4' AND elec.ID = elec2.ID GROUP BY VotingFor ORDER BY COUNT(VotingFor)DESC You should analyze that query directly against the database, that is, not via a mapfile query, to figure out where it is taking time. Perhaps it is looping unnecessarily, perhaps it is not using the indexes where you expect them to... only EXPLAIN ANALYZE will tell for sure. Once you have the query running quick, it will be quick in MapServer as well. -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: from kml styles to mapserver layer classification
On Feb 20, 2012, at 4:44 PM, Puneet Kishor wrote: I have a kml with a bunch of styles to color polygons. Is there a quick/easy way to extract them and convert them to MapServer layer classification rules? the above actually turned out to be a lot easier than I thought... about 4 lines of Perl. Now, I have a table with geometry, and colors for each feature. CREATE TABLE t (attr, hex_color, the_geom); How can I color the polys in the layer with the hex_color values? Looking at the map file docs, I came up with something like so LAYER NAME foo DATA the_geom FROM (SELECT gid, rgb(hex_color) AS rgb_color, the_geom FROM t) tmp USING UNIQUE gid USING srid=4326 STATUS ON TYPE POLYGON CLASS STYLE COLOR [rgb_color] OUTLINECOLOR 68 68 68 END END END END where rgb() converts hex_color to a string of RGB triplets. So, 00 becomes 0 0 0. Is the above correct? For now, it doesn't seem to be working for me. Many tia, -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Re: from kml styles to mapserver layer classification
Hi Richard, On Feb 20, 2012, at 9:21 PM, Richard Greenwood wrote: On Mon, Feb 20, 2012 at 8:05 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: How can I color the polys in the layer with the hex_color values? COLOR #ff So, I can use the hex values directly. Cool. But, will the following be sufficient in the map file? LAYER NAME foo DATA the_geom FROM (SELECT gid, hex_color, the_geom FROM t) tmp USING UNIQUE gid USING srid=4326 STATUS ON TYPE POLYGON CLASS STYLE COLOR [hex_color] END END END END -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Re: from kml styles to mapserver layer classification
Mike (and Richard), Thanks for the advice, but I didn't have to use gdal. As I wrote in another email, 5 or so lines of Perl code extracted the hex color values and inserted them in the Postgres table. From there, it was just a matter of knowing the correct map file syntax. Richard's suggestion of prefixing the # sign was spot on, which I added right in the Pg column. Then, the CLASS STYLE shown below worked really well. Many thanks all. On Feb 20, 2012, at 9:27 PM, Smith, Michael ERDC-CRREL-NH wrote: Puneet, A very recent version of gdal, last couple of weeks, can convert KML styles into OGR style strings. MapServer can use those OGR Style strings with the AUTO style option. Mike -- Michael Smith US Army Corps Remote Sensing GIS/Center On 2/20/12 10:23 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: Hi Richard, On Feb 20, 2012, at 9:21 PM, Richard Greenwood wrote: On Mon, Feb 20, 2012 at 8:05 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: How can I color the polys in the layer with the hex_color values? COLOR #ff So, I can use the hex values directly. Cool. But, will the following be sufficient in the map file? LAYER NAME foo DATA the_geom FROM (SELECT gid, hex_color, the_geom FROM t) tmp USING UNIQUE gid USING srid=4326 STATUS ON TYPE POLYGON CLASS STYLE COLOR [hex_color] END END END END ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] time enabled WMS with video/ elements instead of img/ elements
Tim, (top posting because I have a more generic response) I have tackled this very much like you did with multiple images and opacity, etc. I too considered a movie, but the problem with a movie is that you can't zoom in. The images are geo-referenced, so you can zoom in and out and pan and drag. I was using OpenLayers, so I created a scrubber (a jQuery slider) and tied it to layer loading and unloading. I would query for an image and draw it only if the user moved slider to request a specific image. It was not very smooth, but it did work. You can decrease the weight of the images by using GIFs, at least, that is what I did. I remember I had 100 images (one for each year for a century's worth of model run) and the performance was quite good. I did pre-calculate the images at different zoom levels -- I believe there were 12 zoom levels, so I generated 1200 images and then used OL's layer image type. Wish it were possible to zoom, pan, drag a movie as if it were a map. On Jan 11, 2012, at 8:10 PM, Tim-Hinnerk Heuer wrote: Hi, Interested in HTML5 + MapServer and visualisation, read on. Happy new year to you all! I'm working on a rather interesting project at the moment where we need to map data over time. We tried experimenting with having one layer for each time unit and essentially overlaying them, manipulating their opacity to have a mini movie, but we noticed that the downloads of all the images become quite significant (61MB for a test extent!). I then implemented a proof of concept page (HTML5) where I took an extent's images and concatenated them in a webm video over time and then played all the videos at the same time, giving me a nice visualisation of that area at a relatively low cost (2.3MB per that extent) and the advantage of streaming. I have already written a script that generates all the videos, so I have invested considerable amounts of time into this. It would be great now if I could use the Apache module mapcache to serve up these videos listening and responding to WMS requests. So, all I need to change about mapcache is to serve a .webm file with MIME type video/webm instead of a .png file at the given extent. I guess I could write something in PHP or even with MapScript to serve up those files, but A) I don't know how mapcache finds the right image for an extent and B) Although I know C, my knowledge of it is a bit rusty and I don't know the interface(s) for writing Apache modules in C, let alone a plugin for mapcache I'm keen on learning, but if someone knows where in the code I would have to look for this change/feature enhancement it would be really helpful. Has something like that been done already or is in experiment/planning? If you could give me some hints of how to approach this in the quickest way possible I would be very grateful. Of course this is a project which needs to be done quickly but I want to do it anyway, because it's fun. Thanks for reading and hopefully you have an answer! Regards, Tim ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] problem with MapServer as WMS client
On Oct 16, 2011, at 3:00 PM, Rahkonen Jukka wrote: Hi, Have you tried to do it like it is suggested in the documentation http://mapserver.org/ogc/wms_client.html? LAYER NAME country_bounds TYPE RASTER STATUS ON CONNECTION http://demo.mapserver.org/cgi-bin/wms?; CONNECTIONTYPE WMS METADATA wms_srs EPSG:4326 wms_namecountry_bounds wms_server_version 1.1.1 wms_format image/gif END END Thus no PROJECTION for the layer and only EPSG:4326 in wms_srs. EPSG:900913 must be included in the MAP level wms_srs but that should be enough. That was it. Thanks no PROJECTION for the layer, and only EPSG:4326 in wms_srs. Additionally, I was too smart for my own good and had set the TYPE to POLYGON. I guess it should be RASTER because, from the perspective of MapServer, it is getting back an image, no? Including name of the remote mapfile into CONNECTION string is OK. Perhaps addind DEBUG 5 into your WMS layer definition writes the request into log file but I do not know. Try and see if it helps. I did bump the DEBUG level to 5, but that doesn't show the WMS calls. At least you can run some local proxy like Fiddled and let it log the web traffic. In that case you will need to add wms_proxy_host and wms_proxy_port into layer metadata. -Jukka Rahkonen- Lähettäjä: mapserver-users-boun...@lists.osgeo.org [mapserver-users-boun...@lists.osgeo.org] k#228;ytt#228;j#228;n Puneet Kishor [punk.k...@gmail.com] puolesta Lähetetty: 16. lokakuuta 2011 2:57 Vastaanottaja: mapserver-users@lists.osgeo.org Aihe: [mapserver-users] problem with MapServer as WMS client I am going from OpenLayers to MapServer acting as a WMS client to a remote server. OL is requesting SRS 900913, and the remote server is sending data in 4326, and I want to send it back to OL in 900913. My layer definition is like so LAYER NAME foo TYPE POLYGON STATUS ON CONNECTION http://server/cgi-bin/mapserv?map=mapfile.map; CONNECTIONTYPE WMS PROJECTION init=epsg:4326 END METADATA wms_srs EPSG:900913 EPSG:4326 wms_namefoo wms_server_version 1.1.1 wms_format image/png wms_enable_request * wms_extent -180 -90 180 90 END END I am getting the following error msWMSLoadGetMapParams(): WMS server error. Invalid SRS given: SRS must be valid for all requested layers. I have three questions: 1. The docs at http://mapserver.org/ogc/wms_client.html state that the connection should not have any query params, but I don't see any options to pass the map file name. Is it ok the way I am doing it above? 2. How do I get around the above error? 3. Is there a way I can see the actual request that MapServer is making to the remote server, perhaps in the error.log? -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] output template trimlast doesn't work
On Sep 27, 2011, at 6:15 PM, jjwang wrote: This is my template file. The *trimlast=','* statement doesn't work. Any idea on this? // mapserver template [resultset layer=pd] [ [feature trimlast=','] { id: [id], description: [description], venue: [venue], year: [year] }, [/feature] ] [/resultset] I experienced the same. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Parameter substitution problem
On Sep 29, 2011, at 8:22 AM, Asad Ullah wrote: Steve, Thanks very much for your help. Adding quote did not change anything. However, if I change file name from, for example, OMI-Aura_L3-OMCLDRRclpWMSNRT_20110922.png to OMI_OMCLDRRclpWMSNRT_20110922.png and do the substitution as: /cgi-bin/mapserv.cgi?map_layer[OMI_CP]=DATA+OMI_OMCLDRRclpWMSNRT_+ amsreDate + .png It would work. Where the validation block is same as: VALIDATION 'DATA' '^OMI_.*\.png$' END So, do you think the problem is with validation definition? Could it be the dashes (-) in the problematic file name? Thanks, Asad -Original Message- From: Steve Lime [mailto:sdl...@gmail.com] Sent: Wednesday, September 28, 2011 11:27 PM To: Asad Ullah; mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] Parameter substitution problem What happens if you quote the variable in the CGI call, that is: /cgi-bin/mapserv.cgi?map_layer[OMI_CP]=DATA+'OMI-Aura_L3-OMCLDRRclpWMSNRT_+ amsreDate + .png' Note the single quotes in the DATA value... I'll try to whip up local test case. Steve On Tue, Sep 27, 2011 at 4:28 PM, Asad Ullah asad.ul...@sigmaspace.com wrote: Steve, DATA in the URL has quotes as: /cgi-bin/mapserv.cgi?map_layer[OMI_CP]=DATA+OMI-Aura_L3-OMCLDRRclpWMSNRT_+ amsreDate + .png I unquoted the value in mapfile but there was no error. Any more suggestion? Thanks, Asad From: Steve Lime [mailto:sdl...@gmail.com] Sent: Friday, September 23, 2011 4:55 AM To: Asad Ullah Cc: mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] Parameter substitution problem My guess is the validation is correct but the syntax of the URL parameter is is wrong in that the value passed for DATA is not quoted. If you unquote the default value in your mapfile does that result in a error? That would be an easy way to test the need for quotes. One last idea, while map_layer... should work, try map.layer... instead as you variable name. If you're really are just replacing the date part you could do that by doing a runtime sub... DATA OMI-Aura_L3-OMCLDRRclpWMSNRT_%date%.png VALIDATION date 'regex' END And then you pass date as a CGI variable. Steve On Thursday, September 22, 2011, Asad Ullah asad.ul...@sigmaspace.com wrote: List, I am trying to substitute DATA parameter in my mapfile with a call from Openlayers as follow: map_layer[OMI_CP]=DATA+OMI-Aura_L3-OMCLDRRclpWMSNRT_+ amsreDate + .png The mapfile is: LAYER NAME OMI_CP TYPE RASTER STATUS DEFAULT OFFSITE 0 0 0 PROJECTION init=epsg:4326 END DATA OMI-Aura_L3-OMCLDRRclpWMSNRT_20110922.png VALIDATION 'DATA' '^OMI_.*\.png$' END The call should change the date part (20110922) of the png filename but it is not doing it. Can anyone point to what I am doing wrong here? Thanks, Asad ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] arrow head doesn't draw at the end
On Sep 28, 2011, at 3:11 AM, Havard Tveite wrote: GEOMTRANSFORM end only works for the lines of a line layer. Is your layer a line layer? Sigh. No, my layer is a POINT layer. Where on this page [http://mapserver.org/mapfile/style.html] is it documented that GEOMTRANSFORM is only for LINE layers? I could be wrong, but nowhere do I see that mentioned. In other words, is GEOMTRANSFORM simply not working at all because my layer is a POINT layer? That would explain why the symbol is not being produced at the end point of the symbol, even though I have specified GEOMTRANSFORM end Thanks Håvard. I will lose GEOMTRANSFORM from that STYLE definition. Håvard On 9/27/2011 4:48 PM, Puneet Kishor wrote: On Sep 27, 2011, at 2:18 AM, Havard Tveite wrote: Have you seen: http://mapserver.org/mapfile/symbology/construction.html#changing-the-center-of-a-point-symbol Yup, seen and read it from end to end until my eyes glazed. Perhaps it is clear as crystal to the rest of the world, but I can't fathom anything there applicable to me. I am facing four problems -- 1. As I mentioned below, per the docs, I am supposed to be able to declare ANGLE AUTO in my STYLE definition. That simply does not work for me. I *have* to declare the angle the same as the angle of the stem of the arrow ANGLE [az] in order to get arrow heads headed in the same direction as the arrow stems. 2. From the docs on GEOMTRANSFORM, end: produces the last point of the geometry. When used with ANGLE AUTO, it can for instance be used to render an arrowhead. Well, no... it is *not* producing the *last point of the geometry* as I understand it. Instead, it is producing the middle point of the geometry. And it sure as as I can see is not working with ANGLE AUTO (see #1 above). 3. I have tried several variations on my arrow head to try shift its center, but I am failing to translate the information in the above document to be able to do it correctly. 4. Perhaps most important: the length of the arrow is varying based on [rate]. In other words, I want only the stem to be shorter or longer, but the arrow head to be the same size, and to be at the end of the stem always. In fact, there are instances in which [rate] could be equal to zero. In those instances I don't want any arrow to be drawn at all. *** In other words, I want an arrow stem to be as long as the varying [rate], and if the stem has a length greater than zero then and only then do I want an arrow head at the end of the stem pointing in the same direction as the stem. *** I even tried using a truetype font symbol, but I get no image at all but no error as well. I even tried using a SYMBOL of TYPE pixmap pointing to an image of an arrow. I realize that if I could make that work, it would still be unsatisfactory because as MapServer would scale my arrow image, it would make the attached arrow head also larger, and that would look ugly. In any case, I couldn't get that to work as well... no image at all, but no error as well. Could be my compilation of MapServer was buggy, but I didn't see any compilation time errors, and other than the above oddities, it works quite well. $./mapserv -v MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=GEOS INPUT=POSTGIS INPUT=GDAL INPUT=SHAPEFILE I would love to know if my *** objective *** above can be accomplished with MapServer. If not, I would look at other workaround. I am currently rendering arrows using OpenLayers vector layer... it works quite well, but is slow... MapServer is much faster, and could be cached, hence my desire to use MapServer. Thanks. Håvard Tveite On 9/27/2011 4:12 AM, Puneet Kishor wrote: My arrows look like so instead of with declarations like so SYMBOL NAME vert-line TYPE vector POINTS 0 1 0 0 END END SYMBOL NAME up TYPE vector POINTS 0 1 0.5 0 1 1 END END CLASS STYLE SYMBOL 'vert-line' ANGLE [az] SIZE [rate] COLOR 0 0 0 WIDTH 1 END STYLE SYMBOL up ANGLE [az] SIZE 5 GEOMTRANSFORM end COLOR 0 0 0 END END But, at least the arrow heads are aligned correctly. Because, if I use ANGLE auto as prescribed in the docs instead of ANGLE [az] as shown above, my arrows draw like so --^--. The heads are always pointed up, and are in the middle. Suggestions? -- Håvard Tveite Department of Mathematical Sciences and Technology, UMB Drøbakveien 31, POBox 5003, N-1432 Ås, NORWAY Phone: +47 64965483 Fax: +47 64965401 http://www.umb.no/imt/
Re: [mapserver-users] arrow head doesn't draw at the end
Hi luis, Thanks for helping out. I will try OVERLAYSYMBOL, but from the docs it seems it is no different that using two stacked symbols. I did try GAP, but that doesn't help at all. As I mentioned below, I am drawing these points, not unlike the recent thread started by Brent on drawing wind barbs. Except, in my case, these are GPS sensor readings. The reading values are always 0 or more (actually, they are close to 0, but let's say, the really tiny ones are identifiable). The readings have two values... rate and azimuth. The length of the arrows has to be drawn proportional to the rate, and arrows have to be pointed toward the azimuth. First, I don't want arrows on the 0 (or, close to 0) readings but I still want to show them. So, I've decided I will just select them out and draw them as a separate layer with just dots. Easy. Now, the ones that are to be drawn with an arrow: the problem I am facing is that I want the arrow head at the end of the arrow stem that is of a non-predictable length. Even though the docs imply that I can achieve this with GEOMTRANSFORM, I have failed to do so. And, of course, just now I learned that perhaps that could be because GEOMSTRANSFORM applies *only* to LINE layers. Seems to me the *only* reasonable way to achieve this would be to have a GEOMTRANSFORM kind of capability for POINT layers as well, so that the last (or first or whatever... the specified) point of the symbol geometry could be decorated with another symbol. I am open to all kinds of suggestions at this point. On Sep 28, 2011, at 3:04 AM, luis peinado wrote: Hi, just trying to help. I used some trick with arrows than maybe can help you with some variation. I use mapserver-5.X and the way it worked for me was a LINE type layer using a normal class (continous line) with an OVERLAYSYMBOL, using a character. Maybe changin some parameters like GAP may be useful to you. This is my class on a TYPE LINE layer CLASS NAME capa_tub SYMBOL continous SIZE 2 COLOR 6 79 167 OVERLAYSYMBOL arrow OVERLAYSIZE 30 OVERLAYCOLOR 6 79 167 END And my continous and arrow are SYMBOL NAME arrow TYPE TRUETYPE FONT arial CHARACTER '#62;' FILLED true ANTIALIAS true GAP -100 END SYMBOL NAME continous TYPE ELLIPSE POINTS 1 1 END END Hope it helps. Lluís 2011/9/27 Puneet Kishor punk.k...@gmail.com On Sep 27, 2011, at 2:18 AM, Havard Tveite wrote: Have you seen: http://mapserver.org/mapfile/symbology/construction.html#changing-the-center-of-a-point-symbol Yup, seen and read it from end to end until my eyes glazed. Perhaps it is clear as crystal to the rest of the world, but I can't fathom anything there applicable to me. I am facing four problems -- 1. As I mentioned below, per the docs, I am supposed to be able to declare ANGLE AUTO in my STYLE definition. That simply does not work for me. I *have* to declare the angle the same as the angle of the stem of the arrow ANGLE [az] in order to get arrow heads headed in the same direction as the arrow stems. 2. From the docs on GEOMTRANSFORM, end: produces the last point of the geometry. When used with ANGLE AUTO, it can for instance be used to render an arrowhead. Well, no... it is *not* producing the *last point of the geometry* as I understand it. Instead, it is producing the middle point of the geometry. And it sure as as I can see is not working with ANGLE AUTO (see #1 above). 3. I have tried several variations on my arrow head to try shift its center, but I am failing to translate the information in the above document to be able to do it correctly. 4. Perhaps most important: the length of the arrow is varying based on [rate]. In other words, I want only the stem to be shorter or longer, but the arrow head to be the same size, and to be at the end of the stem always. In fact, there are instances in which [rate] could be equal to zero. In those instances I don't want any arrow to be drawn at all. *** In other words, I want an arrow stem to be as long as the varying [rate], and if the stem has a length greater than zero then and only then do I want an arrow head at the end of the stem pointing in the same direction as the stem. *** I even tried using a truetype font symbol, but I get no image at all but no error as well. I even tried using a SYMBOL of TYPE pixmap pointing to an image of an arrow. I realize that if I could make that work, it would still be unsatisfactory because as MapServer would scale my arrow image, it would make the attached arrow head also larger, and that would look ugly. In any case, I couldn't get that to work as well... no image at all, but no error as well. Could be my compilation of MapServer was buggy, but I didn't see any compilation time errors, and other than the above oddities, it works quite well. $./mapserv -v MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE
Re: [mapserver-users] arrow head doesn't draw at the end
Hi Thomas, On Sep 28, 2011, at 8:15 AM, thomas bonfort wrote: On Wed, Sep 28, 2011 at 15:09, Mr. Puneet Kishor punk.k...@gmail.com wrote: Hi luis, Thanks for helping out. I will try OVERLAYSYMBOL, but from the docs it seems it is no different that using two stacked symbols. I did try GAP, but that doesn't help at all. As I mentioned below, I am drawing these points, not unlike the recent thread started by Brent on drawing wind barbs. Except, in my case, these are GPS sensor readings. The reading values are always 0 or more (actually, they are close to 0, but let's say, the really tiny ones are identifiable). The readings have two values... rate and azimuth. The length of the arrows has to be drawn proportional to the rate, and arrows have to be pointed toward the azimuth. First, I don't want arrows on the 0 (or, close to 0) readings but I still want to show them. So, I've decided I will just select them out and draw them as a separate layer with just dots. Easy. Now, the ones that are to be drawn with an arrow: the problem I am facing is that I want the arrow head at the end of the arrow stem that is of a non-predictable length. Even though the docs imply that I can achieve this with GEOMTRANSFORM, I have failed to do so. And, of course, just now I learned that perhaps that could be because GEOMSTRANSFORM applies *only* to LINE layers. The docs have *never* implied that, even if you might have wanted them to. end: produces the last point of the geometry: the last point of a point geometry is the point itself, which is what is happening. Now it makes crystal clear sense. Nevertheless, consider that until as of this moment, I did take the docs to imply that the geometry in this case was the geometry of the symbol. When I say imply, I am not accusing anyone of misleading. I am asserting that the way a truth has been stated in the document can and has appeared as another truth to someone else. Just changing the docs to what you explained above would be fantastic. Additionally, per Havard, GEOMTRANSFORM apparently doesn't even apply to POINTs. Which now makes sense, since a point geometry's start, middle and end are exactly the same. However, again, stating this in the docs would be super helpful. Seems to me the *only* reasonable way to achieve this would be to have a GEOMTRANSFORM kind of capability for POINT layers as well, so that the last (or first or whatever... the specified) point of the symbol geometry could be decorated with another symbol. again, geomtransform applies to the underlying feature, not the symbol you are rendering on top of the feature. geomtransform will not help in your case. as paul suggested, you need to classify your data with a different symbol depending on your [rate], and use the azimuth for the orientation. Hmmm I am trying to figure out which Paul suggested where in this thread. Perhaps you are referring to the wind barb thread. In any case, I am not sure what you mean by classify your data with a different symbol depending on your [rate]. The way I am understanding that sentence is that I should have an actual different symbol for every different rate. Well, that will not only not work for me, it would defeat the purpose of all this automation. I have ~3000 points, each with a different rate. I can't possibly have 3000 symbols. Not just that, these rates change on a daily basis. Background -- these are readings from almost 3000 stations around the world reporting the rates daily. I get new values on a daily basis, so every day I would have a different map. (actually, it is a lot more complicated than that, but that is a good depiction of the problem). Many thanks again for your assistance, but I hope the above clarifies the issues. I am open to all kinds of suggestions at this point. On Sep 28, 2011, at 3:04 AM, luis peinado wrote: Hi, just trying to help. I used some trick with arrows than maybe can help you with some variation. I use mapserver-5.X and the way it worked for me was a LINE type layer using a normal class (continous line) with an OVERLAYSYMBOL, using a character. Maybe changin some parameters like GAP may be useful to you. This is my class on a TYPE LINE layer CLASS NAME capa_tub SYMBOL continous SIZE 2 COLOR 6 79 167 OVERLAYSYMBOL arrow OVERLAYSIZE 30 OVERLAYCOLOR 6 79 167 END And my continous and arrow are SYMBOL NAME arrow TYPE TRUETYPE FONT arial CHARACTER '#62;' FILLED true ANTIALIAS true GAP -100 END SYMBOL NAME continous TYPE ELLIPSE POINTS 1 1 END END Hope it helps. Lluís 2011/9/27 Puneet Kishor punk.k...@gmail.com On Sep 27, 2011, at 2:18 AM, Havard Tveite wrote: Have you seen: http://mapserver.org/mapfile/symbology/construction.html#changing-the-center-of-a-point-symbol Yup, seen and read it from end to end until my eyes glazed. Perhaps it is clear as crystal
Re: [mapserver-users] passing cgi query params to wms layers
On Sep 26, 2011, at 11:04 PM, Stephen Woodbridge wrote: On 9/26/2011 10:29 PM, Puneet Kishor wrote: I am using OpenLayers as the front-end, requesting a WMS layer from MapServer that is getting data from Pg. My DATA statement is like so DATA the_geom FROM (SELECT gid, pc, the_geom FROM table) t USING UNIQUE gid USING srid=4326 FILTER pc = 'na' The above works fine. However, I would like to send the value of pc from OpenLayers (that is another problem that I am experiencing; I have asked on OL list on how to send query params to WMS layers, but if any of you know the solution, I would welcome that). In any case, I thought (naively), that I could change my FILTER statement like so FILTER pc = '[pc]' I tried sending a WMS query directly to test the above like so [http://server/cgi-bin/app?.. blah ..pc=na] but no joy. Forcing a query error showed me that MapServer was executing the following select .. from (..) t where the_geom GeomFromText(..) and (pc = '[pc]') How can I dynamically supply MapServer a filter value? Does this doc answer your question? http://mapserver.org/cgi/runsub.html Yes it does. I had not seen that doc (hence, I was naively trying [var] kinda sub). Man, this is hairy shiiite. Maybe I should concentrate on trying to get WMS via MapScript working again so I can work within the more familiar and comfy environs of the Perl DBI. MapServer is fast as heck and basically joy to the world, but its Pg interface is a foreign world to me. This should help from the mapserver side of things. In the OpenLayers side of things you will need to propagate the parameter values into the base URL for the WMS request and get OpenLayers to propagate that change into the layer object. I see. Thanks for answering this, because this too had me stumped. The so called optional JS object that was supposed to pass arbitrary parameters to the OL layer constructor wasn't bringing any success. So, essentially, I should construct the base URL and then make my WMS layer as usual. If you expect the existing map to change when you change the values, then you will need to force OpenLayers to redraw the layer to request a new image or tiles based on the updated parameters. Yeah, of course. The idea is that the user clicks on the map, and based on the location of the click, a new map layer is generated. Hopefully I will have this all working soon and be able to show it to the world. Many thanks Steve (and you too Jukka). Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] little whiskers on my arrows
I have a simple arrowhead defined like soSTYLE SYMBOL 'horiz-line' ANGLE [Az] SIZE [Rate] COLOR 255 255 255 WIDTH 1ENDSTYLE ANGLE [Az] GEOMTRANSFORM "end" SYMBOL "to" COLOR 255 255 255 WIDTH 8ENDSYMBOL NAME "horiz-line" TYPE vector POINTS0 01 0 ENDENDSYMBOL NAME "to" TYPE vector POINTS0 01 0.50 1 ENDENDI have attached two images: arr.png and arr_zoom.png. They show the problem. My arrows have little whiskers coming out from behind the arrowhead. How can I get a clean symbol?Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] recommended tile caching mechanism with `mode=tile`
On Sep 17, 2011, at 11:43 PM, Daniel Morissette wrote: On 11-09-18 12:08 AM, Mr. Puneet Kishor wrote: I am using MapServer cgi with `mode=tile` with a Google Maps front-end, and am wondering what is a recommended tile cache server. Any suggestions from personal experience? MapServer MapCache of course! It is a fully featured, robust and fast tiling server. Only available in MapServer SVN trunk at the moment. http://mapserver.org/trunk/mapcache/ It was formerly known as Mod-Geocache until a few weeks ago... the website is in the process of being migrated to the above URL, but in the meantime you can still reach the old site: http://code.google.com/p/mod-geocache/ Very nice. I look forward to installing this; hopefully, it will be straightforward. A couple of questions -- 1. I was looking at mod_cache (mod_disk_cache and mod_mem_cache) yesterday and wondering if they could be used to cache the images. Is mod_geocache inspired/based on those modules? 2. Why wed this to Apache? By making it web-server agnostic, you open up the audience. Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] installing and configuring mapcache
installation mostly went well except for pixman. The install docs say, I should have the following incantation --with-pixman=[yes|no|/path/to/pkgconfig/pixman.pc] I installed pixman and have the following $ll /opt/local/include/pix* total 88 -rw-r--r-- 1 root admin 1739 Sep 18 11:35 pixman-version.h -rw-r--r-- 1 root admin 39608 Sep 18 11:35 pixman.h $ll /opt/local/lib/libpix* -rwxr-xr-x 1 root admin 474024 Sep 18 11:35 /opt/local/lib/libpixman-1.0.22.2.dylib* lrwxr-xr-x 1 root admin 24 Sep 18 11:35 /opt/local/lib/libpixman-1.0.dylib@ - libpixman-1.0.22.2.dylib -rw-r--r-- 1 root admin 550432 Sep 18 11:35 /opt/local/lib/libpixman-1.a lrwxr-xr-x 1 root admin 24 Sep 18 11:35 /opt/local/lib/libpixman-1.dylib@ - libpixman-1.0.22.2.dylib -rwxr-xr-x 1 root admin 866 Sep 18 11:35 /opt/local/lib/libpixman-1.la* I am not sure where I would find this pitman.pc. I tried configure-ing with `--with-pixman=/opt/local` but no luck. Suggestions on how I could include pixman? Anyway, in the meantime, I dropped pixman support and configured successfully. `make` and `sudo make install-module` added the module to my httpd.conf. But, now I am lost again. Per the docs --- Next, a geocache configuration is mapped to the server url with the following snippet IfModule geocache_module Directory /path/to/directory Order Allow,Deny Allow from all /Directory GeoCacheAlias /geocache /path/to/directory/geocache.xml /IfModule --- I can't really parse the above. What is the `path/to/directory` in Directory ...? I have the `geocache.xml` in my mapcache src tree; Should I place it somewhere special? Is this `path/to/directory` where the tiles are stored? And, finally, what should I do if I have the following mapserver URL where tile.x, tile.y and zoom are inserted dynamically? http://server/cgi-bin/mapcgi?layers=layermode=tiletilemode=mapcgitile=' + tile.x + '+' + tile.y + '+' + zoom ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] installing and configuring mapcache
On Sep 18, 2011, at 1:48 PM, thomas bonfort wrote: I am not sure where I would find this pitman.pc. I tried configure-ing with `--with-pixman=/opt/local` but no luck. Suggestions on how I could include pixman? /opt/local/lib/pkgconfig/pixman-1.pc Thanks, that worked, and compiled cleanly. And, finally, what should I do if I have the following mapserver URL where tile.x, tile.y and zoom are inserted dynamically? http://server/cgi-bin/mapcgi?layers=layermode=tiletilemode=mapcgitile=' + tile.x + '+' + tile.y + '+' + zoom you have to give the url to the *wms* service, not the tile one, i.e. http://server/cgi-bin/mapcgi?map=foo.map h... I am using Google Maps API v3, and haven't implemented a WMS tiling front-end and MapServer WMS backend that would support that. Which is why when I started the earlier thread inquiring about caching mechanisms, I specifically inquired for ones that supported MapServer's `mode=tile`, else I would have explored tilecache.org or geowebcache. So, now I would have to modify my frontend, and configure MapServer as WMS, before I can test mod-geocache. Will be a while, it seems. Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] recommended tile caching mechanism with `mode=tile`
I am using MapServer cgi with `mode=tile` with a Google Maps front-end, and am wondering what is a recommended tile cache server. Any suggestions from personal experience? -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: interesting thread on JSON-ish output from MapServer
Partial solution (phew, for now), but other problems persist -- (cc-ing to Steve Lime and Rich Greenwood) On Sep 10, 2011, at 11:42 PM, Mr. Puneet Kishor wrote: [http://osgeo-org.1803224.n2.nabble.com/GeoJSON-output-from-MapServer-td3188987.html] If I call my template template.html I get the output, but I get mime type warning and a syntax error in parsing the output. The above is now partially solved. I still get the mime type incorrectly set, but the syntax error was my mistake. However, it is something worthy of being documented. I was making a JSONP (cross-domain) call. Hence, the response coming back should have been wrapped in the callback as an argument. Since I am stuck using CGI for now, I don't know if I can get MapServer to recognize the callback param that is randomly generated by jQuery, and use that in the template. So, I prescribed a custom callback, and used that in the template. Before (doesn't work with JSONP) - $.ajax({ url : url, type: GET, data: , dataType: jsonp, error : function() { alert(Error loading html document); }, success : function(r) { .. } }); // mapserver template {gid:[gid],unit:[unit_abbre],rock type:[rocktype],lithology:[lithology],min age:[min_age],max age:[max_age],interval:[interval_name]} After (works fine, note addition of jsonpCallback in the request) --- $.ajax({ url : url, type: GET, data: , dataType: jsonp, jsonpCallback: foo, error : function() { alert(Error loading html document); }, success : function(r) { .. } }); // mapserver template foo({gid:[gid],unit:[unit_abbre],rock type:[rocktype],lithology:[lithology],min age:[min_age],max age:[max_age],interval:[interval_name]}) One issue I have not solved -- if no result is found, MapServer sends back the following -- HTML HEADTITLEMapServer Message/TITLE/HEAD !-- MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=GEOS INPUT=POSTGIS INPUT=GDAL INPUT =SHAPEFILE -- BODY BGCOLOR=#FF msQueryByPoint(): Search returned no results. No matching record(s) found. /BODY/HTML Well, that gums up the works. I really want MapServer to just send an empty JSON structure, something like foo({}). Suggestions on how I can prevent this HTML message from MapServer, and force it to use the template instead? If I rename the template template.json MapServer complains that the name is malformed. This one is interesting. Per Steve Lime's email earlier today, Issue 1: only certain extensions can be used for templates. I believe .js is legal but .json is not. We could change that in future releases. Could you file a ticket? Yet, the docs at [http://mapserver.org/output/template_output.html] very clearly mention the use of .json as a file extension. I quote OUTPUTFORMAT NAME geojson DRIVER TEMPLATE FORMATOPTION FILE=myTemplate.json END Fwiw, I using `NAME geojson` as above in my `OUTPUTFORMAT` block, but I am returning just plain vanilla JSON. If I change the NAME to json, I get back an unprocessed template. If I rename the template template.js MapServer complains that it is Unable to access file .js being legal notwithstanding, the fact is, if I change my template.html to template.js, MapServer errors with the above complaint Unable to access file, whatever that means. Exactly the same file, same file mode, everything identical, just the name change. If I add `qformat=geojson` to my query (as shown in the link above), the output contains the template with the place holders, no substitutions with the values. This is even more bizarre -- per the email thread at [[http://osgeo-org.1803224.n2.nabble.com/GeoJSON-output-from-MapServer-td3188987.html], it seems from Steve's comment that `qformat=geojson` is a valid query param (although I don't see it documented anywhere). Yet, if I add that, I get an unprocessed template. What gives? ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] querying in mode=tile
On Sep 11, 2011, at 8:03 AM, Richard Greenwood wrote: On Sat, Sep 10, 2011 at 1:35 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: Now that I have mode=tile working with Google Maps API v3, I am on my way to implement querying like so 0. Bind an infowindow.close() to a click event listener on the map 1. Bind an infowindow.open() to a click event listener on the MapServer layer 2. Fill the infowindow content with the result from an Ajax query to MapServer 3. When the user clicks on the MapServer layer, the Ajax query is fired 4. MapServer responds with the query result as a JSON object 5. Fill the infowindow with the JSON result 6. Close any already open infowindow via #0 above 7. Open a new infowindow with the result Is the general approach outlined above sound? Any pointers to existing code samples for the above? Puneet, I'm doing pretty much that here: http://records.sublettewyo.com/mapserver/map.html I'm using jQuery in this example and putting the info into a jQuery dialog, however I have used a standard browser window in the past. Only thing is that I don't thinnk you really need step 0, simply replace the contents of the container with the new info. Yup, I don't have to worry about #0. Howerver, #1 above is problematic, and I don't have a resolution for it yet. Seems like in Google Maps API v3 I can't addListener to an ImageMapType overlay. See, I am adding a MapServer layer as ImageMapType overlay like so mapserverLayer : new google.maps.ImageMapType({ .. }) map.overlayMapTypes.insertAt(0, mapserverLayer); If I do the following -- google.maps.event.addListener(map, click, function (event) { } it works, however, the following doesn't work at all google.maps.event.addListener(mapserverLayer, click, function (event) { } Which is silly, isn't it? I don't want the entire map to be listening to the click events. I just want the MapServer layer to be doing so. Haven't yet found a resolution to this. Also, if your data is in PostGIS you can skip mapserver for attribute queries and do an info query against the PostGIS db via PHP or other server-side tool. Ok, I am very interested in the above, but I am not sure I understand you. For the most part, I want to click on the map, and find out more about what I clicked on. In order to do that query via Perl MapScript (I don't know PHP) and Pg, I would need to create the $mapObj. I am able to do that fine, but I don't know how to run MapServer in `mode=tile` via MapScript. This is the question I have asked a couple of times -- if I have a pure MapScript app (no map files involved at all, which is what I want), how no earth do I tell the app to use `mode=tile`? Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] bad query result crashes Perl
I query Pg to grab the data with which I construct LAYER CLASSes like so (nothing fancy). SELECT class_name, class_expression, class_color FROM table; A few of the rows in the result set come back with class_color = '' (I can easily avoid those, but that is not the point of this post). The bad color crashes mapscript.bundle which takes down Perl as well, which should never happen. I am using Perl 5.14.1 on Mac OS X Lion. $ perl -V Summary of my perl5 (revision 5 version 14 subversion 1) configuration: Platform: osname=darwin, osvers=11.0.1, archname=darwin-multi-2level uname='darwin lucknow.local 11.0.1 darwin kernel version 11.0.1: wed jun 29 19:53:22 pdt 2011; root:xnu-1699.23.2~1release_x86_64 x86_64 .. blah blah .. Here is the crash report Process: perl5.14 [247] Path:/opt/local/bin/perl5.14 Identifier: perl5.14 Version: ??? (???) Code Type: X86-64 (Native) Parent Process: perl5.14 [246] Date/Time: 2011-09-11 11:25:29.138 -0500 OS Version: Mac OS X 10.7.1 (11B2118) Report Version: 9 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x VM Regions Near 0: -- __TEXT 00010ca28000-00010cb6a000 [ 1288K] r-x/rwx SM=COW /opt/local/bin/perl5.14 Application Specific Information: objc[247]: garbage collection is OFF Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 mapscript.bundle0x00010cdd2e84 _wrap_styleObj_color_set + 596 -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: interesting thread on JSON-ish output from MapServer
On Sep 11, 2011, at 12:46 PM, Steve Lime wrote: Sent from my iPad On Sep 11, 2011, at 9:36 AM, Mr. Puneet Kishor punk.k...@gmail.com wrote: Partial solution (phew, for now), but other problems persist -- .. One issue I have not solved -- if no result is found, MapServer sends back the following -- HTML HEADTITLEMapServer Message/TITLE/HEAD !-- MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=GEOS INPUT=POSTGIS INPUT=GDAL INPUT =SHAPEFILE -- BODY BGCOLOR=#FF msQueryByPoint(): Search returned no results. No matching record(s) found. /BODY/HTML Well, that gums up the works. I really want MapServer to just send an empty JSON structure, something like foo({}). Suggestions on how I can prevent this HTML message from MapServer, and force it to use the template instead? Any suggestion for the above? That is, force MapServer to not send back an error message of the above kind. Instead, send back an empty JSON structure based on the template? Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: interesting thread on JSON-ish output from MapServer
On Sep 11, 2011, at 4:18 PM, Steve Lime wrote: You could try the web object and the empty parameter. From TFM EMPTY [url] URL to forward users to if a query fails. If not defined the value for ERROR is used. H... I am not sure I want to forward the user to any URL. This is all Ajax, so I have to receive an empty data structure. I guess I could try exploiting the jQuery `$.ajax({ error: function() { popup an infowindow with regrets message } });` Sent from my iPad On Sep 11, 2011, at 1:33 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: On Sep 11, 2011, at 12:46 PM, Steve Lime wrote: Sent from my iPad On Sep 11, 2011, at 9:36 AM, Mr. Puneet Kishor punk.k...@gmail.com wrote: Partial solution (phew, for now), but other problems persist -- .. One issue I have not solved -- if no result is found, MapServer sends back the following -- HTML HEADTITLEMapServer Message/TITLE/HEAD !-- MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=GEOS INPUT=POSTGIS INPUT=GDAL INPUT =SHAPEFILE -- BODY BGCOLOR=#FF msQueryByPoint(): Search returned no results. No matching record(s) found. /BODY/HTML Well, that gums up the works. I really want MapServer to just send an empty JSON structure, something like foo({}). Suggestions on how I can prevent this HTML message from MapServer, and force it to use the template instead? Any suggestion for the above? That is, force MapServer to not send back an error message of the above kind. Instead, send back an empty JSON structure based on the template? Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] layer data sources more than one
On Sep 11, 2011, at 9:05 PM, JIAJIA WANG wrote: The data in the shapefile are suburb boundaries, but I got several shapefiles, one shapefile for one state. I want a map showing the whole country's suburb boundaries. That's can be done by defining several layers (one layer reads one shapefile) in one mapfile. But actually there are not conflicts between these shapefiles. So I want to know is there any way to define only one layer and read the data from all these shapefiles. I am pretty sure (but not 100%) that you can have only one data source per layer. That said, you could either combine all the shapefiles into a single countrywide shapefile, or you could create separate layers, and then create a layer group (I am pretty sure you can group the layers into one... its been a long time, and I am just coming back to MapServer, so check the docs). That way, all the different layers for different states will behave as if they are a single layer. From the docs -- GROUP [name] Name of a group that this layer belongs to. The group name can then be reference as a regular layer name in the template files, allowing to do things like turning on and off a group of layers at once. On Mon, Sep 12, 2011 at 11:17 AM, Mr. Puneet Kishor punk.k...@gmail.comwrote: On Sep 11, 2011, at 8:10 PM, jjwang wrote: Hi, I know that the DATA statement should be given a data source of the layer. What if the data comes from multi shapefiles? Can I give it a list of shapefiles and how to write it? Generally a LAYER maps to a shapefile or a table in a db. It is hard for me to imagine how one layer could have data from two or more shapefiles. Perhaps more explanation would help here. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] querying in mode=tile
On Sep 11, 2011, at 10:03 PM, Richard Greenwood wrote: On Sun, Sep 11, 2011 at 8:48 AM, Mr. Puneet Kishor punk.k...@gmail.com wrote: On Sep 11, 2011, at 8:03 AM, Richard Greenwood wrote: On Sat, Sep 10, 2011 at 1:35 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: Now that I have mode=tile working with Google Maps API v3, I am on my way to implement querying like so 0. Bind an infowindow.close() to a click event listener on the map 1. Bind an infowindow.open() to a click event listener on the MapServer layer 2. Fill the infowindow content with the result from an Ajax query to MapServer 3. When the user clicks on the MapServer layer, the Ajax query is fired 4. MapServer responds with the query result as a JSON object 5. Fill the infowindow with the JSON result 6. Close any already open infowindow via #0 above 7. Open a new infowindow with the result Is the general approach outlined above sound? Any pointers to existing code samples for the above? Puneet, I'm doing pretty much that here: http://records.sublettewyo.com/mapserver/map.html I'm using jQuery in this example and putting the info into a jQuery dialog, however I have used a standard browser window in the past. Only thing is that I don't thinnk you really need step 0, simply replace the contents of the container with the new info. Yup, I don't have to worry about #0. Howerver, #1 above is problematic, and I don't have a resolution for it yet. Seems like in Google Maps API v3 I can't addListener to an ImageMapType overlay. See, I am adding a MapServer layer as ImageMapType overlay like so mapserverLayer : new google.maps.ImageMapType({ .. }) map.overlayMapTypes.insertAt(0, mapserverLayer); If I do the following -- google.maps.event.addListener(map, click, function (event) { } it works, however, the following doesn't work at all google.maps.event.addListener(mapserverLayer, click, function (event) { } Which is silly, isn't it? I don't want the entire map to be listening to the click events. I just want the MapServer layer to be doing so. Haven't yet found a resolution to this. Also, if your data is in PostGIS you can skip mapserver for attribute queries and do an info query against the PostGIS db via PHP or other server-side tool. Ok, I am very interested in the above, but I am not sure I understand you. For the most part, I want to click on the map, and find out more about what I clicked on. In order to do that query via Perl MapScript (I don't know PHP) and Pg, I would need to create the $mapObj. I am able to do that fine, but I don't know how to run MapServer in `mode=tile` via MapScript. This is the question I have asked a couple of times -- if I have a pure MapScript app (no map files involved at all, which is what I want), how no earth do I tell the app to use `mode=tile`? Puneet. Puneet, I do not know how to bind an infowindow.open() to a click event listener on the MapServer layer (#1 above) because I do not use the Google API. But using Perl, PHP or whatever it is easy to query a PostGIS database, and even get GeoJSON back should you want to highlight the selected object on the map. I am using OpenLayers so I can easily convert the mouse click (or box) to a real-world coordinate(s). I pass the point or box to a PHP page which connects to a PostGIS db, does the query, and returns JSON. Does that help? I'm not sure that I understand everything that you're doing and maybe my approach is not appropriate in your case. I am assuming you are using OL with MapServer WMS. If I could get MapServer WMS (via MapScript) working, it would have been good, but after screwing around for a day and a half unsuccessfully, I gave up (for now). Then I tried `mode=tile` and it just worked. However, even that is not fully satisfactory as it is not via MapScript. Without MapScript I am severely hampered -- the complexity of the datasets makes for beastly map files. My map file with just one data source is already almost 9000 lines long. In fact, I generate the map file via MapScript, and then further tweak it by hand. Even with WMS or tile mode, I will have to implement some kind of tile caching either with tilecache or map proxy or some such to improve the performance. However, since I am not using MapScript (even though I would prefer to), I would have to implement both CGI and MapScript to do what you are suggesting above -- CGI to display the map and MapScript to do the query. For now, I have been able to get this clicky thing working -- I click on the map, do a `mode=query` and display the result in an infowindow. That part is working. Ideally, I would like to have a single technology -- MapScript to generate the maps that can be displayed via multiple front-ends -- OL, Gmaps, perhaps Leaflet, and MapScript to query the attributes via clicks and selects on the map. For now, I am
Re: [mapserver-users] querying in mode=tile
On Sep 11, 2011, at 10:52 PM, Richard Greenwood wrote: On Sun, Sep 11, 2011 at 9:37 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: However, since I am not using MapScript (even though I would prefer to), I would have to implement both CGI and MapScript to do what you are suggesting above -- CGI to display the map and MapScript to do the query. But my point was that you can do the query without mapserver at all if the data is in postgis. Use a server-side language such as Perl or PHP to pass the request to postgis, which can do a spatial query, and then Perl or PHP can format the result as JSON and return it to the page (via AJAX). On second reading, I now get what you are saying. Strange that it never occurred to me. Sounds very sensible, and I will implement it tomorrow. That way I can get away from CGI `mode=query` and its TEMPLATE-ing vagaries. Yes, my data are in Pg, so I can do all my querying with Perl. Wish I could do away with `mode=tile` and also get tiles back via MapScript. Then my solution would be complete. Thanks for this really useful hint (more like making me see the obvious that I was missing for some reason). Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: mode=tile and MapScript
knock, knock... any suggestions on the MapScript syntax for setting `mode=tiletilemode=gmaptile={X}+{Y}+{Z}` were X, Y, Z are received as http query params? On Sep 8, 2011, at 10:23 PM, Mr. Puneet Kishor wrote: I am trying out mode=tile as detailed at [http://mapserver.org/output/tile_mode.html], and actually, it works great! Might be able to avoid the pains of WMS completely. However, it works great with MapServer CGI. What if I want to use MapScript? In other words, instead of var urlTemplate = 'http://localhost/cgi-bin/myapp?'; urlTemplate += 'layers=layer1 layer2'; urlTemplate += 'mode=tile'; urlTemplate += 'tilemode=gmap'; urlTemplate += 'tile={X}+{Y}+{Z}'; I have var urlTemplate = 'http://localhost/myapp.cgi?'; urlTemplate += 'tile={X}+{Y}+{Z}'; and I add mode=tile and tilemode=gmap on the server side. My question is -- one, will the above work? and, how do I pass mode=tile and tilemode=gmap and the tile={X}+{Y}+{Z} parameters to the program? I didn't see any MapScript documentation for these parameters. I need to translate a call such as [http://localhost/cgi-bin/myapp?layers=layer1mode=tiletilemode=gmaptile=30+46+7] into a MapScript request. Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] updating docs
I would like to contribute some of my experiences and revelations to the MapScript docs on the mapserver.org. How do I go about doing that?___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] updating docs
On Sep 10, 2011, at 8:48 AM, Jeff McKenna wrote: On 11-09-10 10:11 AM, Mr. Puneet Kishor wrote: I would like to contribute some of my experiences and revelations to the MapScript docs on the mapserver.org. How do I go about doing that?___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users Hi Puneet! Sounds good. Which doc are you thinking of? Several -- the `mode=tile` page, and various, complete, working Perl MapScript examples and hints, etc. Also: the very easiest way to improve docs is to write all of your examples, notes, hints, advice, on a wiki page (such as http://trac.osgeo.org/mapserver/wiki/PHPMapScript). Hmmm... I didn't even realize there was a wiki. I guess, most folks, like me, tend to go to the main docs, and kinda stay around there. -jeff -- Jeff McKenna MapServer Consulting and Training Services http://www.gatewaygeomatics.com/ ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] querying in mode=tile
Now that I have mode=tile working with Google Maps API v3, I am on my way to implement querying like so 0. Bind an infowindow.close() to a click event listener on the map 1. Bind an infowindow.open() to a click event listener on the MapServer layer 2. Fill the infowindow content with the result from an Ajax query to MapServer 3. When the user clicks on the MapServer layer, the Ajax query is fired 4. MapServer responds with the query result as a JSON object 5. Fill the infowindow with the JSON result 6. Close any already open infowindow via #0 above 7. Open a new infowindow with the result Is the general approach outlined above sound? Any pointers to existing code samples for the above? Tia.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] querying with mode=tile
I am still struggling with querying with mode=tile. My layer definition is LAYER CLASSITEM foo CONNECTION host=localhost port=5432 dbname=db user=user password=password CONNECTIONTYPE POSTGIS PROCESSING CLOSE_CONNECTION=DEFER DATA the_geom FROM a_view USING UNIQUE gid USING srid=4326 NAME layer PROJECTION init=epsg:4326 END STATUS ON TYPE POLYGON TEMPLATE '/path/to/template.json' # lots of CLASS definitions CLASS .. END END # LAYER layer The template.json file looks like so // mapserver template [resultset layer=layer] { type: FeatureCollection, features: [ [feature trimlast=','] { attrib1: [attrib1], attrib2: [attrib2], attrib3: [attrib3] }, [/feature] ] } [/resultset] My query looks like so http://localhost/cgi-bin/app?layers=layermode=queryimg.x=430img.y=375imgext=59.781131+96.2920453+69.171756+91.588920 Issue 1: I really do have a feature at the point I clicked, yet I get no result. It is likely my query is ill-formed. Truth be told, I don't know the complete list of params that `mode=query` takes, and I can't really find a single place in the documentation where this information is available. One, could someone tell me what is wrong with my query above? Two, point me to the relevant documentation. Maybe I just don't know how to find the correct documentation. Issue 2: Because MapServer finds no result, it reports back as msQueryByPoint(): Search returned no results. No matching record(s) found. Well, no... what I really want is an empty JSON stream. In reality, I am sending the above query via Google Maps (which is why it is likely I have the wrong params, or wrong value for the right params) in my query. Once again, I would really appreciate hearing from someone who has solved this problem already. Specifically, I need to query from Google Maps API v3 to a MapServer backend running `mode=tile` Oh, and I still want to know if I can run the MapServer backend as a MapScript using `mode=tile` instead of CGI. Sadly, if I am unable to solve this, I will have to abandon MapServer and look at other options for this project, but I hope it won't come to that. Many thanks, Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] querying with mode=tile
On Sep 10, 2011, at 9:42 PM, Prabu Raja wrote: Try this, http://localhost/cgi-bin/app?layers=layermode=querymapxy=lng+lat where lng = clicked longitude lat = clicked latitude working for me. Neat! it does work. Many thanks. Where did you find this information? Could you please point me to the location in the documentation where I could read up on this? On Sun, Sep 11, 2011 at 6:58 AM, Mr. Puneet Kishor punk.k...@gmail.comwrote: http://localhost/cgi-bin/app?layers=layermode=queryimg.x=430img.y=375imgext=59.781131+96.2920453+69.171756+91.588920 -- Regards, Prabu Raja ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] querying with mode=tile
Couple of follow-ups (the following hint from Prabu Raja does work) -- If I change the name of the template from template.html to template.json I get the following error Content-type: text/html msReturnPage(): Web application error. Malformed template name (/Users/punkish/Documents/www/gmaps/lib/template.json). Another issue -- my template looks like so -- // mapserver template [resultset layer=layer] { type: FeatureCollection, features: [ [feature trimlast=','] { attrib1: [attrib1], attrib2: [attrib2], attrib3: [attrib2] }, [/feature] ] } [/resultset] When the above does work, I get back the following -- { type: FeatureCollection, features: [ { attrib1: foo, attrib2: bar, attrib3: baz }, ] } Hmmm... what's with that last , after the first element in the features array? From what it seems like, I thought the [feature trimlast=','] would get rid of the last comma. On Sep 10, 2011, at 9:52 PM, Mr. Puneet Kishor wrote: On Sep 10, 2011, at 9:42 PM, Prabu Raja wrote: Try this, http://localhost/cgi-bin/app?layers=layermode=querymapxy=lng+lat where lng = clicked longitude lat = clicked latitude working for me. Neat! it does work. Many thanks. Where did you find this information? Could you please point me to the location in the documentation where I could read up on this? On Sun, Sep 11, 2011 at 6:58 AM, Mr. Puneet Kishor punk.k...@gmail.comwrote: http://localhost/cgi-bin/app?layers=layermode=queryimg.x=430img.y=375imgext=59.781131+96.2920453+69.171756+91.588920 -- Regards, Prabu Raja ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] querying with mode=tile
On Sep 10, 2011, at 10:03 PM, Prabu Raja wrote: http://mapserver.org/cgi/controls.html?highlight=mapxy Thanks Prabu. To the MapServer developers/documenters -- On the page provided above, I note 5 instances of mapxy. Only the following one is vaguely indicative of being useful in queries because of the last three words User with queries. MAPXY [x] [y] , MAPXY (shape) A point, in the same coordinate system as the shapefiles, to be used in conjuction with a buffer or a scale to construct a map extent. Can be set to shape as an alternative option. In this case mapextent is set to the extent of a selected shape. Used with queries. I am curious as to how I could have figured out that mode=query combined with mapxy=lng+lat would have been sufficient for querying by point? I do genuinely want to know. Additionally, just below that MAPXY entry, there is the write-up no MODEs. Granted, the text warns that note that all of the query modes also support map-only modes, e.g. ITEMQUERYMAP, which for brevity are not all listed, where would I read up on mode=tile other than at [http://mapserver.org/output/tile_mode.html], the latter page strangely saying that it is revision 9817 updated on Date: $Date: 2010-02-20 11:35:53 -0800 (Sat, 20 Feb 2010) $ Last Updated: 2008/04/30 H... On Sun, Sep 11, 2011 at 8:22 AM, Mr. Puneet Kishor punk.k...@gmail.comwrote: On Sep 10, 2011, at 9:42 PM, Prabu Raja wrote: Try this, http://localhost/cgi-bin/app?layers=layermode=querymapxy=lng+lat where lng = clicked longitude lat = clicked latitude working for me. Neat! it does work. Many thanks. Where did you find this information? Could you please point me to the location in the documentation where I could read up on this? On Sun, Sep 11, 2011 at 6:58 AM, Mr. Puneet Kishor punk.k...@gmail.com wrote: http://localhost/cgi-bin/app?layers=layermode=queryimg.x=430img.y=375imgext=59.781131+96.2920453+69.171756+91.588920 -- Regards, Prabu Raja -- Regards, Prabu Raja ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] JSON template fail
I was unable to achieve success with the suggestion for template at [http://mapserver.org/output/template_output.html]. So, I simplified my template like so -- // mapserver template { gid: [gid], attrib1: [attrib1], attrib2: [attrib2], attrib3: [attrib3] } In my map file I have an output format declared like so OUTPUTFORMAT NAME json DRIVER TEMPLATE MIMETYPE application/json FORMATOPTION FILE=/Users/punkish/Documents/www/gmap/lib/template.html END Note: MapServer croaks if I name the template template.json The output from MapServer is 1: { 2: gid: 2676, 3: attrib1: foo, 4: attrib2: bar, 5: attrib3: baz 6: } gmap:-1 Resource interpreted as Script but transferred with MIME type text/html. gmap:2 SyntaxError: Parse error So, in spite of declaring the MIMETYPE as application/json, the result is sent back with a text/html mime type (could that be because the template ends in .html?). And, what on earth is the SyntaxError? I don't see any. Does anyone? ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] interesting thread on JSON-ish output from MapServer
[http://osgeo-org.1803224.n2.nabble.com/GeoJSON-output-from-MapServer-td3188987.html] If I call my template template.html I get the output, but I get mime type warning and a syntax error in parsing the output. If I rename the template template.json MapServer complains that the name is malformed. If I rename the template template.js MapServer complains that it is Unable to access file If I add `qformat=geojson` to my query (as shown in the link above), the output contains the template with the place holders, no substitutions with the values. What gives?___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Leaflet and MapServer
Has anyone got Leaflet working with MapServer `mode=tile`? While Leaflet also sends X, Y, Z (in a different order than Gmaps), its tile numbers are way different from those generated by Gmaps.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapScript WMS request
On Sep 9, 2011, at 8:39 AM, Fawcett, David (MPCA) wrote: Puneet, As far as I know, OpenLayers still has support for a layer based on MapServer CGI. Because MapServer can also serve up WMS well, this layer type isn't necessarily recommended or as well supported. http://dev.openlayers.org/docs/files/OpenLayers/Layer/MapServer-js.html Indeed David. Because, going by the docs, the MapServer CGI calls are discouraged (or so it seems), I'd rather not invest in that path. This is a long term project that I am working on, so the foundations have to be very robust. Besides, I may or may not use OL. While I like OL a lot, I am also looking at other frameworks (Gmaps, Leaflet, Polymaps), and it would be wise to decouple the backend from the front-end as much as possible. I have no issues with using WMS, but I just am unable to get MapServer WMS to work via MapScript. And, yes, I do have to use MapScript if I can help it -- my layer classification is generated on demand, and MapScript is the easiest way I can think of for doing that. I did find yesterday that `mode=tile` works really well, but I am trying to make that work with MapScript. A separate email thread for that question. David. -Original Message- From: mapserver-users-boun...@lists.osgeo.org [mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Mr. Puneet Kishor Sent: Thursday, September 08, 2011 9:32 PM To: Daniel Morissette Cc: mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] MapScript WMS request On Sep 8, 2011, at 8:28 PM, Daniel Morissette wrote: On 11-09-08 09:02 PM, Mr. Puneet Kishor wrote: On Sep 8, 2011, at 7:43 PM, Daniel Morissette wrote: Maybe call $map-save(/tmp/my.map) in your script after the map and layer have been populated and paste the result... that may give us a hint... wow! this is a super-awesome debugging technique. I have sent you the map file off list to not pollute the entire list serve. I was able to reproduce the issue with the copy of the mapfile you sent off-list. It turns out that mappostgis.c's msPostGISLayerGetExtent() is hardcoded to always return {minx = -2500, miny = -2500, maxx = 2500, maxy = 2500} ...and then it returns MS_SUCCESS. I think this function should either be left unimplemented (this way MapServer would fallback on other mechanisms), or return MS_FAILURE to indicate to the calling code that it didn't do anything useful. A quick search indicates an open ticket about the issue: http://trac.osgeo.org/mapserver/ticket/3585 You could bump the ticket and hope someone works on it at the FOSS4G code sprint next week. The short term fix for you would be to set the ows_extent metadata in your layer: METADATA ows_extent -180 -90 180 90 ... END Thanks Daniel. I will bump the ticket. For now, see below -- Using the my.map file I sent you, with no further modifications to it, I am able to successfully get an image back via [http://localhost.local/cgi-bin/gmna?SERVICE=WMSVERSION=1.1.1REQUEST=GetMapBBOX=-180,-90,180,90SRS=EPSG:4326WIDTH=1200HEIGHT=600LAYERS=gmnaSTYLES=FORMAT=image/pngTRANSPARENT=true] Note, no further modifications is required, that is, not even the ows_extent -180 -90 180 90 bit in the layer METADATA. and I still get a good image. However, if I use the following program to access the same map file, I get the spurious minx = -2500, miny = -2500, maxx = 2500, maxy = 2500 in the GetCapabilities. Finally, if I add the ows_extent -180 -90 180 90 line in the layer METADATA in the my.map file, the GetCapabilities returns the correct bounds now, however, the image is still blank. #!/opt/local/bin/perl use strict; use mapscript; my $wms = new mapscript::OWSRequest(); $wms-setParameter(SERVICE, WMS ); $wms-setParameter(VERSION, 1.1.1 ); $wms-setParameter(REQUEST, GetMap ); $wms-setParameter(BBOX, -180,-90,180,90 ); $wms-setParameter(LAYERS, gmna); $wms-setParameter(SRS, EPSG:4326); $wms-setParameter(WIDTH, 1200); $wms-setParameter(HEIGHT, 600); $wms-setParameter(FORMAT, image/png); $wms-setParameter(TRANSPARENT, true); my $map = new mapscript::mapObj(/Users/punkish/Sites/test/mapscript/my.map); if(!$map) { warn New mapObj() error: $mapscript::ms_error-{message}\n; } my $io = mapscript::msIO_installStdoutToBuffer(); my $dispatch_out = $map-OWSDispatch( $wms ); printf %s\n, mapscript::msIO_getStdoutBufferString(); I have now spent an enormous amount of time on this, and for now, I have to move on. This is just not working out. Maybe I will try some other technique, perhaps this mode=tile to see if I can get MapServer powered maps in my apps. Thanks much for your help. If you (or anyone
Re: [mapserver-users] MapScript WMS request
David, On Sep 9, 2011, at 9:47 AM, Fawcett, David (MPCA) wrote: Puneet, Using MapServer CGI and layer.MapServer would not set you up well for other client libraries, so I see your point. It can be viable though. In this app (just an imagemap, not OL), there are no attribute values associated with the spatial data. The classes are generated on-the-fly and the county id's for each class are passed in as URL vars. Same thing for the legend. This allows flexibility for compounds who's emissions may vary from tens of pounds to millions of pounds. This approach may not work for your case, but it is another way to slice it... Possibly. See, it is crucially important for me to be able to generate classes on the fly, and with a lot of flexibility. Not just that, the criteria for generating the classes can change. So, what I am doing actually is setting up a separate application that does nothing but respond with class information. The mapping application (and, any other application, for that matter), would query this class generating application and make the classes as per the latest information. Hence, my need for MapScripting. Well, there are other reasons as well, but this is an important one. http://www.pca.state.mn.us/index.php/topics/environmental-data/eda-environmental-data-access/eda-air-quality-searches/eda-air-quality-search-emissions-by-county-data.html By the way, the app above is not working. I get broken images, and the following errors in the web inspector (that might help you troubleshoot) GET http://www.pca.state.mn.us/oea/css/master.css 404 (Not Found) emissions.cfm:28 ReferenceError: Can't find variable: urchinTracker GET http://maps.pca.state.mn.us/cgi-bin/mapserv? ..snipped.. A server with the specified hostname could not be found. GET http://maps.pca.state.mn.us/cgi-bin/mapserv? ..snipped.. A server with the specified hostname could not be found. GET http://cf.pca.state.mn.us/data/edaAir/artwork/edaP2results_edaAmbientResultsPollutantsJuly_04.gif 404 (Not Found) master-print.cssGET http://www.pca.state.mn.us/oea/css/master-print.css 404 (Not Found) David. -Original Message- From: mapserver-users-boun...@lists.osgeo.org [mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Mr. Puneet Kishor Sent: Friday, September 09, 2011 9:35 AM To: mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] MapScript WMS request On Sep 9, 2011, at 8:39 AM, Fawcett, David (MPCA) wrote: Puneet, As far as I know, OpenLayers still has support for a layer based on MapServer CGI. Because MapServer can also serve up WMS well, this layer type isn't necessarily recommended or as well supported. http://dev.openlayers.org/docs/files/OpenLayers/Layer/MapServer-js.html Indeed David. Because, going by the docs, the MapServer CGI calls are discouraged (or so it seems), I'd rather not invest in that path. This is a long term project that I am working on, so the foundations have to be very robust. Besides, I may or may not use OL. While I like OL a lot, I am also looking at other frameworks (Gmaps, Leaflet, Polymaps), and it would be wise to decouple the backend from the front-end as much as possible. I have no issues with using WMS, but I just am unable to get MapServer WMS to work via MapScript. And, yes, I do have to use MapScript if I can help it -- my layer classification is generated on demand, and MapScript is the easiest way I can think of for doing that. I did find yesterday that `mode=tile` works really well, but I am trying to make that work with MapScript. A separate email thread for that question. David. -Original Message- From: mapserver-users-boun...@lists.osgeo.org [mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Mr. Puneet Kishor Sent: Thursday, September 08, 2011 9:32 PM To: Daniel Morissette Cc: mapserver-users@lists.osgeo.org Subject: Re: [mapserver-users] MapScript WMS request On Sep 8, 2011, at 8:28 PM, Daniel Morissette wrote: On 11-09-08 09:02 PM, Mr. Puneet Kishor wrote: On Sep 8, 2011, at 7:43 PM, Daniel Morissette wrote: Maybe call $map-save(/tmp/my.map) in your script after the map and layer have been populated and paste the result... that may give us a hint... wow! this is a super-awesome debugging technique. I have sent you the map file off list to not pollute the entire list serve. I was able to reproduce the issue with the copy of the mapfile you sent off-list. It turns out that mappostgis.c's msPostGISLayerGetExtent() is hardcoded to always return {minx = -2500, miny = -2500, maxx = 2500, maxy = 2500} ...and then it returns MS_SUCCESS. I think this function should either be left unimplemented (this way MapServer would fallback on other mechanisms), or return MS_FAILURE to indicate to the calling code that it didn't do anything
[mapserver-users] Re: MapScript WMS request
a bit more investigation on producing a WMS response via Perl MapScript reveals the following error ?xml version='1.0' encoding=ISO-8859-1 standalone=no ? !DOCTYPE ServiceExceptionReport SYSTEM http://schemas.opengis.net/wms/1.1.0/exception_1_1_0.dtd; ServiceExceptionReport version=1.1.0 ServiceException msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings. /ServiceException /ServiceExceptionReport So, it seems I have to somehow, somewhere enable 'ows_enable_request'. Looking at the documentation, seems like if I had a map file, I could add the following line to do so ows_enable_request '*' However, I am not using a map file at all. Not finding any documentation on this setting, I tried the following to no avail $map-{ows_enable_request} = '*'; Suggestions, anyone? On Sep 7, 2011, at 10:18 PM, Mr. Puneet Kishor wrote: I would really appreciate insight from someone well-versed in the ins and outs of WMS via MapScript. Looking at the discussion at [http://trac.osgeo.org/mapserver/ticket/670], the `img = wms_map.draw()` step seems to be a crucial part of drawing the image. So, I added `my $img = $map-draw();` to my code below, and indeed, the image was drawn and sent back to the browser. Is this something that should be added to the examples in the documentation? Is this the right way to do things? In any case, I am not write to STDOUT, and sending the buffer directly. Instead, my code is very much like a regular request (and it works) -- my $new_extent = $map-{extent}; my $req = new mapscript::OWSRequest(); $req-setParameter( SERVICE, WMS ); $req-setParameter( VERSION, 1.1.0 ); $req-setParameter( REQUEST, GetMap ); $req-setParameter( BBOX, -180,-90,180,90 ); $req-setParameter( LAYERS, layer_name); $req-setParameter( SRS, -1); $req-setParameter( WIDTH, 1200); $req-setParameter( HEIGHT, 600); my $dispatch_out = $map-OWSDispatch( $req ); my $img = $map-draw(); my $map_img = 'test_' . sprintf(%0.10d, rand(10)) . '.png'; $img-save(/path/to/$map_img); return send_file(/path/to/$map_img); Comments? Corrections? On Sep 7, 2011, at 6:12 PM, Mr. Puneet Kishor wrote: On Sep 7, 2011, at 5:49 PM, Mr. Puneet Kishor wrote: I am trying to convert my MapScript program to a WMS responder. I create my $map where I set all the layers and classes and colors, etc, just like for a normal, non-WMS request that works perfectly correctly. my $map = undef; $map = mapObj(name = 'mymap') unless defined $map; my $req = new mapscript::OWSRequest(); $req-setParameter( SERVICE, WMS ); $req-setParameter( VERSION, 1.1.0 ); $req-setParameter( REQUEST, GetCapabilities ); I changed the above line to $req-setParameter( REQUEST, GetMap); but, still no improvement. mapscript::msIO_installStdoutToBuffer(); my $dispatch_out = $map-OWSDispatch( $req ); printf %s\n, mapscript::msIO_getStdoutBufferString(); Except, the above doesn't really do anything for me. I get nothing in my browser. Suggestions? -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Re: MapScript WMS request
On Sep 8, 2011, at 1:03 PM, thomas bonfort wrote: it goes in map-web-metadata I guessed as much, but I can't fathom the syntax. The webObj doesn't seem to have any constructor, and I don't see any documentation. Could you please point me to an example? On Thu, Sep 8, 2011 at 19:48, Mr. Puneet Kishor punk.k...@gmail.com wrote: a bit more investigation on producing a WMS response via Perl MapScript reveals the following error ?xml version='1.0' encoding=ISO-8859-1 standalone=no ? !DOCTYPE ServiceExceptionReport SYSTEM http://schemas.opengis.net/wms/1.1.0/exception_1_1_0.dtd; ServiceExceptionReport version=1.1.0 ServiceException msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings. /ServiceException /ServiceExceptionReport So, it seems I have to somehow, somewhere enable 'ows_enable_request'. Looking at the documentation, seems like if I had a map file, I could add the following line to do so ows_enable_request '*' However, I am not using a map file at all. Not finding any documentation on this setting, I tried the following to no avail $map-{ows_enable_request} = '*'; Suggestions, anyone? On Sep 7, 2011, at 10:18 PM, Mr. Puneet Kishor wrote: I would really appreciate insight from someone well-versed in the ins and outs of WMS via MapScript. Looking at the discussion at [http://trac.osgeo.org/mapserver/ticket/670], the `img = wms_map.draw()` step seems to be a crucial part of drawing the image. So, I added `my $img = $map-draw();` to my code below, and indeed, the image was drawn and sent back to the browser. Is this something that should be added to the examples in the documentation? Is this the right way to do things? In any case, I am not write to STDOUT, and sending the buffer directly. Instead, my code is very much like a regular request (and it works) -- my $new_extent = $map-{extent}; my $req = new mapscript::OWSRequest(); $req-setParameter( SERVICE, WMS ); $req-setParameter( VERSION, 1.1.0 ); $req-setParameter( REQUEST, GetMap ); $req-setParameter( BBOX, -180,-90,180,90 ); $req-setParameter( LAYERS, layer_name); $req-setParameter( SRS, -1); $req-setParameter( WIDTH, 1200); $req-setParameter( HEIGHT, 600); my $dispatch_out = $map-OWSDispatch( $req ); my $img = $map-draw(); my $map_img = 'test_' . sprintf(%0.10d, rand(10)) . '.png'; $img-save(/path/to/$map_img); return send_file(/path/to/$map_img); Comments? Corrections? On Sep 7, 2011, at 6:12 PM, Mr. Puneet Kishor wrote: On Sep 7, 2011, at 5:49 PM, Mr. Puneet Kishor wrote: I am trying to convert my MapScript program to a WMS responder. I create my $map where I set all the layers and classes and colors, etc, just like for a normal, non-WMS request that works perfectly correctly. my $map = undef; $map = mapObj(name = 'mymap') unless defined $map; my $req = new mapscript::OWSRequest(); $req-setParameter( SERVICE, WMS ); $req-setParameter( VERSION, 1.1.0 ); $req-setParameter( REQUEST, GetCapabilities ); I changed the above line to $req-setParameter( REQUEST, GetMap); but, still no improvement. mapscript::msIO_installStdoutToBuffer(); my $dispatch_out = $map-OWSDispatch( $req ); printf %s\n, mapscript::msIO_getStdoutBufferString(); Except, the above doesn't really do anything for me. I get nothing in my browser. Suggestions? -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapScript WMS request
top posting, as most of the relevant info is self-contained in this email -- Ok, with the help of the suggestions from many of you, and by adding the following lines to my program, I am no longer getting any error. .. $map-setMetaData(ows_enable_request, *); .. $map-setProjection(init=epsg:4326); .. $layerOne-setProjection(init=epsg:4326); .. my $req = new mapscript::OWSRequest(); $req-setParameter(SERVICE, WMS ); $req-setParameter(VERSION, 1.1.0 ); $req-setParameter(REQUEST, GetMap ); $req-setParameter(BBOX, -180,-90,180,90 ); $req-setParameter(LAYERS, mylayer); $req-setParameter(SRS, EPSG:4326); $req-setParameter(WIDTH, 1200); $req-setParameter(HEIGHT, 600); $req-setParameter(FORMAT, image/png); my $io = mapscript::msIO_installStdoutToBuffer(); my $dispatch_out = $map-OWSDispatch( $req ); printf %s\n, mapscript::msIO_getStdoutBufferString(); The only problem is -- I am getting an image with nothing in it. This implies that I have likely got all the params for WMS correct, but now I am screwing up with some step in the layer creation. The interesting thing is, this is the same code that works fine as a regular MapServer request; makes an image fast and quick and correct. Is there a way I can add error logging to my WMS program to see what is going on at every step? Perhaps capture the database query being made, etc. On Sep 8, 2011, at 1:22 PM, Frank Warmerdam wrote: Puneet, I would add that there is a lot of other metadata that you need to set on a map in order to get WxS services like WMS working. If you haven't done that either you are going to be frustrated. I would suggest getting your script working initially with an actual mapfile and then if you really want to construct the map programmatically use that as a guide. Best regards, On Thu, Sep 8, 2011 at 11:15 AM, Armin Burger armin.bur...@gmx.net wrote: in PHP MapScript should be something like $map-setMetaData(ows_enable_request, *); in Python: map.setMetaData(ows_enable_request, *) armin On 08/09/2011 20:05, Mr. Puneet Kishor wrote: On Sep 8, 2011, at 1:03 PM, thomas bonfort wrote: it goes in map-web-metadata I guessed as much, but I can't fathom the syntax. The webObj doesn't seem to have any constructor, and I don't see any documentation. Could you please point me to an example? On Thu, Sep 8, 2011 at 19:48, Mr. Puneet Kishorpunk.k...@gmail.com wrote: a bit more investigation on producing a WMS response via Perl MapScript reveals the following error ?xml version='1.0' encoding=ISO-8859-1 standalone=no ? !DOCTYPE ServiceExceptionReport SYSTEM http://schemas.opengis.net/wms/1.1.0/exception_1_1_0.dtd; ServiceExceptionReport version=1.1.0 ServiceException msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings. /ServiceException /ServiceExceptionReport So, it seems I have to somehow, somewhere enable 'ows_enable_request'. Looking at the documentation, seems like if I had a map file, I could add the following line to do so ows_enable_request '*' However, I am not using a map file at all. Not finding any documentation on this setting, I tried the following to no avail $map-{ows_enable_request} = '*'; Suggestions, anyone? On Sep 7, 2011, at 10:18 PM, Mr. Puneet Kishor wrote: I would really appreciate insight from someone well-versed in the ins and outs of WMS via MapScript. Looking at the discussion at [http://trac.osgeo.org/mapserver/ticket/670], the `img = wms_map.draw()` step seems to be a crucial part of drawing the image. So, I added `my $img = $map-draw();` to my code below, and indeed, the image was drawn and sent back to the browser. Is this something that should be added to the examples in the documentation? Is this the right way to do things? In any case, I am not write to STDOUT, and sending the buffer directly. Instead, my code is very much like a regular request (and it works) -- my $new_extent = $map-{extent}; my $req = new mapscript::OWSRequest(); $req-setParameter( SERVICE, WMS ); $req-setParameter( VERSION, 1.1.0 ); $req-setParameter( REQUEST, GetMap ); $req-setParameter( BBOX, -180,-90,180,90 ); $req-setParameter( LAYERS, layer_name); $req-setParameter( SRS, -1); $req-setParameter( WIDTH, 1200); $req-setParameter( HEIGHT, 600); my $dispatch_out = $map-OWSDispatch( $req ); my $img = $map-draw(); my $map_img = 'test_' . sprintf(%0.10d, rand(10)) . '.png'; $img-save(/path/to/$map_img); return send_file(/path/to/$map_img); Comments? Corrections? On Sep 7, 2011, at 6:12 PM, Mr. Puneet Kishor wrote: On Sep 7, 2011, at 5:49 PM, Mr. Puneet Kishor wrote: I am trying
[mapserver-users] advice on best practice for MapServer layer in OL/Gmaps
In another tortured thread I am seeking advice on WMS with MapScript. My ultimate intent is to provide MapServer layers in OL/Gmaps/(some_other) web app. I need to use MapScript because of the flexibility and freedom it gives me in querying my datasources, and in constructing the map. Do I have to use WMS? What, if any, are the alternative? I notice that MapServer now has a `mode=tile` that is designed with Gmaps kinda app in mind. Is that a better mode? Would that work with OL as well? Or with Leaflet or some other client-side web mapping framework? Its been a while since I have used MapServer extensively for creating a full-fledged app, but the time to do is coming up now. I would really appreciate any advice on this front. Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapScript WMS request
fwiw, here is the pastebin link to the XML response to my GetCapabilities request. http://pastebin.com/zu8kjNDX On Sep 8, 2011, at 6:44 PM, Mr. Puneet Kishor wrote: Great suggestions Daniel. Here is what I have to report -- On Sep 8, 2011, at 6:27 PM, Daniel Morissette wrote: Hi Puneet, A few things to try: 1- Reduce your map to a single layer if that's not already the case for your first round of tests. It is already reduced to a single layer. 2- Try a GetCapabilities instead of GetMap, and make sure your layer shows up properly and with no WARNING in the GetCapabilities XML output. Make sure the name of the layer is not changed: if you have multiple layers with the same name then the WMS handler will rename them to make them unique (WMS spec requirement) That was very useful. No errors, but I do notice the following funky issue (see below) Layer queryable=0 opaque=0 cascaded=0 Namegmna/Name Titlegmna/Title SRSEPSG:4326/SRS LatLonBoundingBox minx=-2.5e+07 miny=-2.5e+07 maxx=2.5e+07 maxy=2.5e+07 / BoundingBox SRS=EPSG:4326 minx=-2.5e+07 miny=-2.5e+07 maxx=2.5e+07 maxy=2.5e+07 / Style Namedefault/Name Titledefault/Title LegendURL width=167 height=7029 Formatimage/png/Format OnlineResource xmlns:xlink=http://www.w3.org/1999/xlink; xlink:type=simple xlink:href=http://lucknow-2.local/test/mapscript/test3.cgi?version=1.1.0amp;service=WMSamp;request=GetLegendGraphicamp;layer=gmnaamp;format=image/pngamp;STYLE=default/ /LegendURL /Style Where the heck did that (+-)2.5e+07 business get into the BoundingBox? I didn't add that. All I did was query in lat/lon. Maybe that is where my error remains now. .. 4- Frank's earlier suggestion to start by making things work from a regular mapfile first and then converting/moving stuff to mapscript progressively still stands as a great option. .. Indeed, a great suggestion. Actually, that is exactly how I started. Got everything working with a Mapfile, then migrated to MapScript (I am touching MapScript after many years now, perhaps half a decade), got that working, and am now on to WMS. Anyway, I seem to be close to a resolution. Something is going on with my BoundingBox. Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapScript WMS request
On Sep 8, 2011, at 6:52 PM, Daniel Morissette wrote: On 11-09-08 07:44 PM, Mr. Puneet Kishor wrote: 2- Try a GetCapabilities instead of GetMap, and make sure your layer shows up properly and with no WARNING in the GetCapabilities XML output. Make sure the name of the layer is not changed: if you have multiple layers with the same name then the WMS handler will rename them to make them unique (WMS spec requirement) That was very useful. No errors, but I do notice the following funky issue (see below) Layer queryable=0 opaque=0 cascaded=0 Namegmna/Name Titlegmna/Title SRSEPSG:4326/SRS LatLonBoundingBox minx=-2.5e+07 miny=-2.5e+07 maxx=2.5e+07 maxy=2.5e+07 / BoundingBox SRS=EPSG:4326 minx=-2.5e+07 miny=-2.5e+07 maxx=2.5e+07 maxy=2.5e+07 / Style Namedefault/Name Titledefault/Title LegendURL width=167 height=7029 Formatimage/png/Format OnlineResource xmlns:xlink=http://www.w3.org/1999/xlink; xlink:type=simple xlink:href=http://lucknow-2.local/test/mapscript/test3.cgi?version=1.1.0amp;service=WMSamp;request=GetLegendGraphicamp;layer=gmnaamp;format=image/pngamp;STYLE=default/ /LegendURL /Style Where the heck did that (+-)2.5e+07 business get into the BoundingBox? I didn't add that. All I did was query in lat/lon. Maybe that is where my error remains now. What is your data? a Shapefile? What is the source projection of the data? PostGIS. lat/lng. SRID 4326 I suspect the BoundingBox is invalid because the layer projection is not set to the right value. Those funky numbers look like values in meters, so presumably your data is in a projected coordinate system. In your script you set: $layerOne-setProjection(init=epsg:4326); Already have that line in both $mapObj and in the $layerObj $map-setProjection(init=epsg:4326); .. $layerOne-setProjection(init=epsg:4326); This will work only if your data is in EPSG:4326. If that's not the case then you need to set the layer projection to match the source data. punkish@lucknow$/opt/local/lib/postgresql90/bin/psql -U postgres -d macromap psql (9.0.4) Type help for help. macromap=# SELECT ST_SRID(the_geom) FROM gmna LIMIT 1; st_srid - 4326 (1 row) macromap=# SELECT * FROM geometry_columns WHERE f_table_name = 'gmna'; f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid | type -++--+---+-+--+-- | gmna | gmna | the_geom | 2 | 4326 | MULTIPOLYGON (1 row) macromap=# ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapScript WMS request
On Sep 8, 2011, at 7:43 PM, Daniel Morissette wrote: On 11-09-08 08:40 PM, Mr. Puneet Kishor wrote: On Sep 8, 2011, at 7:16 PM, Mr. Puneet Kishor wrote: PostGIS. lat/lng. SRID 4326 [...] I should have also added the following macromap=# SELECT ST_AsText(the_geom) FROM gmna LIMIT 1; MULTIPOLYGON(((170.095660072181 65.6251237164987,170.158707739831 65.6269635224645,170.173265447057 65.6291258974802,170.2497277762 65.6357072803021,170.257074956711 65.6372005203368,170.267729454865 65.6409199441452,170.283323865029 65.6476938262634,170.30182707 65.657286936117,170.370058904075 65.6852127397289,170.394158265237 65.6971816353387,170.45719236517 65.7228758026517,170.477794791157 65.7331303689249,170.501440218163 65.7431659781412,170.506165498289 65.745957239196,170.509550359131 65.74948784687,170.517163313193 65.7692852345393,170.523452830315 65.7856156337451,170.527911709329 65.7872471861488,170.564509940928 65.8002968138894,170.605805308438 65.815184809157,17 As you can see, everything is in lat/lng. Thanks. That rules out the possibility of a data problem. With PostGIS, the WMS extents reported for a layer cannot be derived from the data. In the shapefile case we use the shapefile's extents, but this is not readily available with postgis, so unless I'm mistaken, MapServer looks up the wms/ows_extent metadata in the layer, and if not found then it falls back on the map's EXTENT for the mandatory BoundingBox and LatLonBoundingBox elements. Maybe call $map-save(/tmp/my.map) in your script after the map and layer have been populated and paste the result... that may give us a hint... wow! this is a super-awesome debugging technique. I have sent you the map file off list to not pollute the entire list serve. Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] MapScript WMS request
On Sep 8, 2011, at 8:28 PM, Daniel Morissette wrote: On 11-09-08 09:02 PM, Mr. Puneet Kishor wrote: On Sep 8, 2011, at 7:43 PM, Daniel Morissette wrote: Maybe call $map-save(/tmp/my.map) in your script after the map and layer have been populated and paste the result... that may give us a hint... wow! this is a super-awesome debugging technique. I have sent you the map file off list to not pollute the entire list serve. I was able to reproduce the issue with the copy of the mapfile you sent off-list. It turns out that mappostgis.c's msPostGISLayerGetExtent() is hardcoded to always return {minx = -2500, miny = -2500, maxx = 2500, maxy = 2500} ...and then it returns MS_SUCCESS. I think this function should either be left unimplemented (this way MapServer would fallback on other mechanisms), or return MS_FAILURE to indicate to the calling code that it didn't do anything useful. A quick search indicates an open ticket about the issue: http://trac.osgeo.org/mapserver/ticket/3585 You could bump the ticket and hope someone works on it at the FOSS4G code sprint next week. The short term fix for you would be to set the ows_extent metadata in your layer: METADATA ows_extent -180 -90 180 90 ... END Thanks Daniel. I will bump the ticket. For now, see below -- Using the my.map file I sent you, with no further modifications to it, I am able to successfully get an image back via [http://localhost.local/cgi-bin/gmna?SERVICE=WMSVERSION=1.1.1REQUEST=GetMapBBOX=-180,-90,180,90SRS=EPSG:4326WIDTH=1200HEIGHT=600LAYERS=gmnaSTYLES=FORMAT=image/pngTRANSPARENT=true] Note, no further modifications is required, that is, not even the ows_extent -180 -90 180 90 bit in the layer METADATA. and I still get a good image. However, if I use the following program to access the same map file, I get the spurious minx = -2500, miny = -2500, maxx = 2500, maxy = 2500 in the GetCapabilities. Finally, if I add the ows_extent -180 -90 180 90 line in the layer METADATA in the my.map file, the GetCapabilities returns the correct bounds now, however, the image is still blank. #!/opt/local/bin/perl use strict; use mapscript; my $wms = new mapscript::OWSRequest(); $wms-setParameter(SERVICE, WMS ); $wms-setParameter(VERSION, 1.1.1 ); $wms-setParameter(REQUEST, GetMap ); $wms-setParameter(BBOX, -180,-90,180,90 ); $wms-setParameter(LAYERS, gmna); $wms-setParameter(SRS, EPSG:4326); $wms-setParameter(WIDTH, 1200); $wms-setParameter(HEIGHT, 600); $wms-setParameter(FORMAT, image/png); $wms-setParameter(TRANSPARENT, true); my $map = new mapscript::mapObj(/Users/punkish/Sites/test/mapscript/my.map); if(!$map) { warn New mapObj() error: $mapscript::ms_error-{message}\n; } my $io = mapscript::msIO_installStdoutToBuffer(); my $dispatch_out = $map-OWSDispatch( $wms ); printf %s\n, mapscript::msIO_getStdoutBufferString(); I have now spent an enormous amount of time on this, and for now, I have to move on. This is just not working out. Maybe I will try some other technique, perhaps this mode=tile to see if I can get MapServer powered maps in my apps. Thanks much for your help. If you (or anyone else) can come up with a bright idea, I will be happy to try it. Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] mode=tile and MapScript
I am trying out mode=tile as detailed at [http://mapserver.org/output/tile_mode.html], and actually, it works great! Might be able to avoid the pains of WMS completely. However, it works great with MapServer CGI. What if I want to use MapScript? In other words, instead of var urlTemplate = 'http://localhost/cgi-bin/myapp?'; urlTemplate += 'layers=layer1 layer2'; urlTemplate += 'mode=tile'; urlTemplate += 'tilemode=gmap'; urlTemplate += 'tile={X}+{Y}+{Z}'; I have var urlTemplate = 'http://localhost/myapp.cgi?'; urlTemplate += 'tile={X}+{Y}+{Z}'; and I add mode=tile and tilemode=gmap on the server side. My question is -- one, will the above work? and, how do I pass mode=tile and tilemode=gmap and the tile={X}+{Y}+{Z} parameters to the program? I didn't see any MapScript documentation for these parameters. I need to translate a call such as [http://localhost/cgi-bin/myapp?layers=layer1mode=tiletilemode=gmaptile=30+46+7] into a MapScript request. Puneet.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] MapScript WMS request
I am trying to convert my MapScript program to a WMS responder. I create my $map where I set all the layers and classes and colors, etc, just like for a normal, non-WMS request that works perfectly correctly. my $map = undef; $map = mapObj(name = 'mymap') unless defined $map; my $req = new mapscript::OWSRequest(); $req-setParameter( SERVICE, WMS ); $req-setParameter( VERSION, 1.1.0 ); $req-setParameter( REQUEST, GetCapabilities ); mapscript::msIO_installStdoutToBuffer(); my $dispatch_out = $map-OWSDispatch( $req ); printf %s\n, mapscript::msIO_getStdoutBufferString(); Except, the above doesn't really do anything for me. I get nothing in my browser. Suggestions? -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] questions re. MapScript
for you MapScript mavens -- A few things have me puzzled about MapScript. I have the following code, and it works -- my $dbh = DBI-connect(dbi:Pg:dbname=$dbname;host=$dbhost;port=$dbport, $dbuser, $dbpswd); my $msh = host=$dbhost port=$dbport dbname=$dbname user=$dbuser password=$dbpswd; my $map = new mapscript::mapObj(); my $classOutline = new mapscript::colorObj; $classOutline-setHex('#44'); # Layer One my $layer_one = new mapscript::layerObj($map); $layer_one-{name} = 'Layer One'; $layer_one-{status} = $mapscript::MS_ON; $layer_one-{type} = $mapscript::MS_LAYER_POLYGON; $layer_one-setConnectionType($mapscript::MS_POSTGIS, ''); $layer_one-{connection} = $msh; $layer_one-{data} = 'the_geom FROM (SELECT gid, class_name, the_geom FROM table1) foo USING UNIQUE gid'; $layer_one-setFilter('gid NOT IN (.. bunch of gids ..)'); $layer_one-{classitem} = 'class_name'; my $sth = $dbh-prepare(SELECT class_name, class_color FROM color_table); $sth-execute; while (my ($class_name, $class_color) = $sth-fetchrow_array) { my $classObj = new mapscript::classObj( $layer_one ); $classObj-{name} = $class_name; $classObj-setExpression( $class_name ); my $styleObj = new mapscript::styleObj($classObj); my $classFill = new mapscript::colorObj; $classFill-setHex($class_color); $styleObj-{color} = $classFill; $styleObj-{outlinecolor} = $classOutline; } Question 0: Is there are more efficient way to accomplish the above? Question 1: I am assuming there is no way I can reuse the same db handle above, once for MapServer, and the other time to make my own queries. Neverthless, I would like to confirm. Question 2: I tried to add a WHERE clause in the data value, but that caused error. I am assuming that is not allowed, but I would like to confirm. Now, here is a really puzzling thing. If I add another layer, exactly after the above pattern, for example, see the code below, MapServer crashes with the message prepareImage() error: Can't call method 'save on an undefined value. Seems like there is an error somewhere, and $map gets all messsed up. # Layer Two my $layer_two = new mapscript::layerObj($map); $layer_two-{name} = 'Layer Two'; $layer_two-{status} = $mapscript::MS_ON; $layer_two-{type} = $mapscript::MS_LAYER_POLYGON; $layer_two-setConnectionType($mapscript::MS_POSTGIS, ''); $layer_two-{connection} = $msh; $layer_two-{data} = 'the_geom FROM (SELECT gid, class_id, the_geom FROM table2) bar USING UNIQUE gid'; $layer_two-{classitem} = 'class_id'; $sth = $dbh-prepare(SELECT class_id, class_color FROM another_color_table); $sth-execute; while (my ($class_id, $class_color) = $sth-fetchrow_array) { my $classObj = new mapscript::classObj( $layer_two ); $classObj-{name} = $class_name; $classObj-setExpression( $class_name ); my $styleObj = new mapscript::styleObj($classObj); my $classFill = new mapscript::colorObj; $classFill-setHex($class_color); $styleObj-{color} = $classFill; $styleObj-{outlinecolor} = $classOutline; } How do I get MapServer to write out detailed error messages? There seems to be an `errorObj` that allows inspection of the MapServer error stack. Only needed for the Perl module as the other language modules expose the error stack through exceptions. Alright, but there is no constructor for this object. How do I use this? -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] why doesn't a view work in the data string?
Another oddity about MapScript. I have the PostGIS functions and definitions installed in the public schema of my db. I have moved the data tables to different schema to keep things tidy. I modified the search_path like so ALTER DATABASE mydb SET search_path = public, data1, data2; The following works fine, which is strange because I would expect it to require the schema prefix (in spite of having modified the search_path, I require the prefix in other clients, such as pgAdmin3) -- $layer_one-{data} = 'the_geom FROM (SELECT gid, class_name, class_color, the_geom FROM table) a_view USING UNIQUE gid'; $layer_one-setFilter('gid NOT IN ( .. a bunch of gids .. )'); Yet, if I make a view with the above logic like so CREATE VIEW data1.a_view AS SELECT gid, class_name, class_color, the_geom FROM data1.table WHERE gid NOT IN ( .. a bunch of gids .. ); and use that to access the data with the following code, I get a crash prepareImage() error: Can't call method 'save' on an undefined value $layer_one-{data} = 'the_geom FROM a_view USING UNIQUE did'; -- Puneet Kishor___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] questions re. MapScript
Thanks Cristiano, for your replies. The most puzzling and show-stopping for me is that as soon as I add another layer, MapServer crashes. See the very end of my original post below. On Sep 3, 2011, at 7:12 PM, Cristiano Sumariva wrote: Question 0: well I do not think it is too much overhead to set some variables in memory for the mapserver objects. But you can do all you need at the file with extension .map and only update what you need in the programming language. So you can call new mapObject = mapscript::map( 'path/file.map' ); // load all your parameters that not change ( or do not change often ) // // update only the snippets you need // // need to set up first layer data to a sql assembled at runtime // // so only grab the reference to the layer you want set // layer = mapObject-getLayer( index /* start on zero */ ) // and update only that property // layer-set( 'data', 'the_geom FROM ( SELECT att FROM table WHERE att OP 'value' ) AS TableFromWhere USING UNIQUE att USING SRID ). You maybe doing something like a did in past. Creating all mapfile configuration at application using forms and storing it inside database schema. That is not much hard to create an manager to do that. You need a couple of tables on some schema/db and create some checks for mapserver enumerations. The most benefits of this strategy is to have a system that will be error free on mapfile syntax and have a very fast mapserver configuration for users that want create map collections from a shared pool of features. Question 2 is on the sample above. You need to wrap the where at a sub query so mapserver can see it like a one entire new table. Question 1: I not much sure but I guess you can not share database descriptors. If you having low speed due to database stuff you can try use a persistent connection for your script so you only open one for mapserver. I guess that mapserver can also use a shared database connection for him but do not remember a sample case for it. Hope you enjoying your map rendering engine. Most times low speed is due to databases not properly indexed. 2011/9/3 Mr. Puneet Kishor punk.k...@gmail.com for you MapScript mavens -- A few things have me puzzled about MapScript. I have the following code, and it works -- my $dbh = DBI-connect(dbi:Pg:dbname=$dbname;host=$dbhost;port=$dbport, $dbuser, $dbpswd); my $msh = host=$dbhost port=$dbport dbname=$dbname user=$dbuser password=$dbpswd; my $map = new mapscript::mapObj(); my $classOutline = new mapscript::colorObj; $classOutline-setHex('#44'); # Layer One my $layer_one = new mapscript::layerObj($map); $layer_one-{name} = 'Layer One'; $layer_one-{status} = $mapscript::MS_ON; $layer_one-{type} = $mapscript::MS_LAYER_POLYGON; $layer_one-setConnectionType($mapscript::MS_POSTGIS, ''); $layer_one-{connection} = $msh; $layer_one-{data} = 'the_geom FROM (SELECT gid, class_name, the_geom FROM table1) foo USING UNIQUE gid'; $layer_one-setFilter('gid NOT IN (.. bunch of gids ..)'); $layer_one-{classitem} = 'class_name'; my $sth = $dbh-prepare(SELECT class_name, class_color FROM color_table); $sth-execute; while (my ($class_name, $class_color) = $sth-fetchrow_array) { my $classObj = new mapscript::classObj( $layer_one ); $classObj-{name} = $class_name; $classObj-setExpression( $class_name ); my $styleObj = new mapscript::styleObj($classObj); my $classFill = new mapscript::colorObj; $classFill-setHex($class_color); $styleObj-{color} = $classFill; $styleObj-{outlinecolor} = $classOutline; } Question 0: Is there are more efficient way to accomplish the above? Question 1: I am assuming there is no way I can reuse the same db handle above, once for MapServer, and the other time to make my own queries. Neverthless, I would like to confirm. Question 2: I tried to add a WHERE clause in the data value, but that caused error. I am assuming that is not allowed, but I would like to confirm. Now, here is a really puzzling thing. If I add another layer, exactly after the above pattern, for example, see the code below, MapServer crashes with the message prepareImage() error: Can't call method 'save on an undefined value. Seems like there is an error somewhere, and $map gets all messsed up. # Layer Two my $layer_two = new mapscript::layerObj($map); $layer_two-{name} = 'Layer Two'; $layer_two-{status} = $mapscript::MS_ON; $layer_two-{type} = $mapscript::MS_LAYER_POLYGON; $layer_two-setConnectionType($mapscript::MS_POSTGIS, ''); $layer_two-{connection} = $msh; $layer_two-{data} = 'the_geom FROM (SELECT gid, class_id, the_geom FROM table2) bar USING UNIQUE gid'; $layer_two-{classitem} = 'class_id'; $sth = $dbh-prepare(SELECT class_id, class_color FROM another_color_table); $sth-execute; while (my ($class_id, $class_color) = $sth-fetchrow_array) { my $classObj = new mapscript
[mapserver-users] could MapServer be closing connection to Pg prematurely?
I have the following code $layer_gmna-{name} = 'gmna'; $layer_gmna-{status} = $mapscript::MS_ON; $layer_gmna-{type} = $mapscript::MS_LAYER_POLYGON; $layer_gmna-{connection} = host=$dbhost port=$dbport dbname=$dbname user=$dbuser password=$dbpswd; $layer_gmna-setConnectionType($mapscript::MS_POSTGIS, ''); $layer_gmna-{data} = 'the_geom FROM ..'; $layer_gmna-{classitem} = 'interval_name'; my $dbh = DBI-connect(dbi:Pg:dbname=$dbname;host=$dbhost;port=$dbport, $dbuser, $dbpswd); my $sth = $dbh-prepare(SELECT interval_name, color_hex FROM intervals_old); $sth-execute or debug $sth-errstr; while (my ($interval_name, $color_hex) = $sth-fetchrow_array) { my $classObj = new mapscript::classObj( $layer_gmna ); $classObj-{name} = $interval_name; $classObj-setExpression( $interval_name ); my $styleObj = styleObj(classObj = $classObj, colorObj = colorObj('hex' = $color_hex)); } By the time I reach the line marked with '', the db connection is closed. I get the following message: DBD::Pg::st execute failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request. at /Users/punkish/Documents/www/geomaps/lib/geomaps.pm line 1225. Maybe MapServer has nothing to do with it, but, is it possible that MapServer efficiently closes all DB connections after it has pulled in the data from the tables? If so, is there a way I can stop it from doing so?___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: could MapServer be closing connection to Pg prematurely?
the following is solved by adding ` {InactiveDestroy = 1}` to the $dbh On Sep 3, 2011, at 9:19 PM, Mr. Puneet Kishor wrote: I have the following code $layer_gmna-{name} = 'gmna'; $layer_gmna-{status} = $mapscript::MS_ON; $layer_gmna-{type} = $mapscript::MS_LAYER_POLYGON; $layer_gmna-{connection} = host=$dbhost port=$dbport dbname=$dbname user=$dbuser password=$dbpswd; $layer_gmna-setConnectionType($mapscript::MS_POSTGIS, ''); $layer_gmna-{data} = 'the_geom FROM ..'; $layer_gmna-{classitem} = 'interval_name'; my $dbh = DBI-connect(dbi:Pg:dbname=$dbname;host=$dbhost;port=$dbport, $dbuser, $dbpswd); my $sth = $dbh-prepare(SELECT interval_name, color_hex FROM intervals_old); $sth-execute or debug $sth-errstr; while (my ($interval_name, $color_hex) = $sth-fetchrow_array) { my $classObj = new mapscript::classObj( $layer_gmna ); $classObj-{name} = $interval_name; $classObj-setExpression( $interval_name ); my $styleObj = styleObj(classObj = $classObj, colorObj = colorObj('hex' = $color_hex)); } By the time I reach the line marked with '', the db connection is closed. I get the following message: DBD::Pg::st execute failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request. at /Users/punkish/Documents/www/geomaps/lib/geomaps.pm line 1225. Maybe MapServer has nothing to do with it, but, is it possible that MapServer efficiently closes all DB connections after it has pulled in the data from the tables? If so, is there a way I can stop it from doing so? ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] zoom out factor as int
On Aug 30, 2011, at 9:16 AM, Carlos Ruiz wrote: Puneet, You have to handle negative integers. For example, to zoom in x2 you have to use +2, to zoom out you have to use -2. Indeed I do... wouldn't have thought this up without your help. Many thanks Carlos. Cheers from México IC Carlos Ruiz - Original Message - From: Mr. Puneet Kishor punk.k...@gmail.com To: MapServer mapserver-users@lists.osgeo.org Cc: Sent: Monday, August 29, 2011 9:49 PM Subject: [mapserver-users] zoom out factor as int how do I express a zoom out factor in zoomPoint( int zoomfactor, pointObj imgpoint, int width, int height, rectObj extent, rectObj maxextent ) : int Obviously, 0.5 won't work as an int is expected. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Re: Invalid SRS given: SRS must be valid for all requested layers. EPSG 23030
On Aug 30, 2011, at 11:21 AM, Amalia Carolina Canavire wrote: hi ,I don't good speak english, but i don't understand you, when you say Projection must be in meters which seem to be the unit for the EPSG:23030 units, you can specify in where may correction in this code, please. thank for you time and helping. Your declared projection EPSG:23030 uses meters, but your extent `EXTENT -82.658149 29.4353788 -82.05008 29.943614` is definitely not in meters (unless, you are plotting a very tiny and strange area of the world that is only a few centimeters wide and long). Make sure your extent and projection units match. 2011/8/30 Rahkonen Jukka jukka.rahko...@mmmtike.fi Hi, I do not understand Spanish but it looks like you have something wrong with projections. MAP EXTENT -82.658149 29.4353788 -82.05008 29.943614 PROJECTION init=epsg:23030 END Projection must be in meters which seem to be the unit for the EPSG:23030 units http://www.epsg-registry.org/report.htm?type=selectionentity=urn:ogc:def:crs:EPSG::23030reportDetail=shortstyle=urn:uuid:report-style:default-with-codestyle_name=OGP%20Default%20With%20Codetitle= The same with wms_extent -82.658149 29.4353788 -82.05008 29.943614 use extents in the EPSG:23030 system and units. -Jukka Rahkonen- Lähettäjä: mapserver-users-boun...@lists.osgeo.org [ mapserver-users-boun...@lists.osgeo.org] käyttäjän Amalia Carolina Canavire [acarolin...@gmail.com] puolesta Lähetetty: 30. elokuuta 2011 16:55 Vastaanottaja: Lista de Usuarios de gvSIG; mapserver-users@lists.osgeo.org Aihe: [mapserver-users] msWMSLoadGetMapParams(): WMS server error. Invalid SRS given: SRS must be valid for all requested layers. EPSG 23030 Hola gente, una duda usando gvsig para poder generar una vista desde un .shp debo seleccionar una proyección epsg 23030, porque no me reconece epsg 4326 (con esta opción mi vista es vacia , a que se debe? Estoy usando gvsig 1.1 por la extensión de publicación, sobre ubuntu. Debido a ello , por las dudas, respeto esta proyección epsg 23030, cuando utilizo vista desde wms, me muestra sin problema, ahora cuando lo hago para web, me sale el error de : msWMSLoadGetMapParams(): WMS server error. Invalid SRS given: SRS must be valid for all requested layers . Si cambio la proyeccion a 4326, no sale el error pero no me muestra nada. Mi codigo es el sgte: MAP NAME map_generated_by_gvsig SIZE 600 400 EXTENT -82.658149 29.4353788 -82.05008 29.943614 SYMBOLSET dmwms1.sym FONTSET fonts.txt LEGEND IMAGECOLOR -1 -1 -1 LABEL FONT vera ANGLE FOLLOW COLOR 0 0 0 ENCODING UTF-8 TYPE truetype SIZE 8 END STATUS ON TRANSPARENT ON END WEB METADATA wms_encoding UTF-8 wms_title Mapserver WMS wms_abstract wms_srs EPSG:23030 wms_onlineresource http://localhost/cgi-bin/mapserv?map=%2Fvar%2Fwww%2FgisParcelsFL%2Fmap%2Fdmwms1.map END END PROJECTION init=epsg:23030 END LAYER NAME tl_2010_12001_roads.shp STATUS ON TYPE LINE DATA /var/www/gisParcelsFL/tl_2010_12001_roads/tl_2010_12001_roads.shp MAXSCALE -1.0 MINSCALE -1.0 TRANSPARENCY 100 SIZEUNITS pixels LABELITEM FULLNAME PROJECTION init=epsg:23030 END CLASS STYLE COLOR 153 153 153 WIDTH 1 END NAME default LABEL FONT vera ANGLE FOLLOW COLOR 0 0 0 TYPE truetype SIZE 7.0 END END METADATA wms_title tl_2010_12001_roads.shp wms_abstract generated by gvSIG wms_extent -82.658149 29.4353788 -82.05008 29.943614 gml_include_items all END END # Layer END # Map File -- ** :) sonrei que te queda lindo :):):):): amy cgc ** -- *** * :) *sonrei que te queda lindo :):):):): **amy **cgc ** * ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] zoom out factor as int
how do I express a zoom out factor in zoomPoint( int zoomfactor, pointObj imgpoint, int width, int height, rectObj extent, rectObj maxextent ) : int Obviously, 0.5 won't work as an int is expected. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] layer classification with MapScript
On Aug 28, 2011, at 8:11 AM, Cristiano Sumariva wrote: You can do database stuff using your programming language to access the database. To create classes there is the msNewClassObj function to append a class to an layer reference. You can get function details in documentation page at http://mapserver.org/mapscript/php/index.html#classes. If you want walk over records from the data statement declared on the data field, maybe using the getShape( ), getNumResults() method on your layer reference may do what you want. But I do not have practice using it. for ( loop = 0; loop layer-getNumResults(); loop + 1 ) dbRowFromDataField = layer-getResult( loop ); class = msnewclass( layer ); class-set( name, dbRowFromDataField.field ); ... The above seems logical, but I think it might have to do with the results from a click query rather than the data retrieved by MS from the data source in the first place. In any case, the following doesn't do anything at all (empty, white image) -- for ( 0 .. $layerObj-getNumResults() - 1) { my $row = $layerObj-getResult( $_ ); my $classObj = new mapscript::classObj( $layerObj ); $classObj-{name} = $row-{interval_name}; my $styleObj = new map script::styleObj( $classObj ); set style color based on $row-{class_color}; } 2011/8/27 Mr. Puneet Kishor punk.k...@gmail.com I have a layer classification issue. I want to do something along the lines of (semi-pseudocode ahead) -- $layerObj-{data} = 'the_geom FROM (SELECT gid, the_geom, class_name, class_color FROM table) t USING UNIQUE gid'; $layerObj-{classitem} = 'class_name'; while (my $row in $layerObj-{data}) { create class with 'name = class_name', 'expression = class_name', 'color = class_color' } How do I iterate over the rows retrieved from the table in order to create classes? I don't see any obvious reference to a db result set.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] layer classification with MapScript
On Aug 28, 2011, at 1:27 PM, Mr. Puneet Kishor wrote: On Aug 28, 2011, at 8:11 AM, Cristiano Sumariva wrote: You can do database stuff using your programming language to access the database. To create classes there is the msNewClassObj function to append a class to an layer reference. You can get function details in documentation page at http://mapserver.org/mapscript/php/index.html#classes. If you want walk over records from the data statement declared on the data field, maybe using the getShape( ), getNumResults() method on your layer reference may do what you want. But I do not have practice using it. for ( loop = 0; loop layer-getNumResults(); loop + 1 ) dbRowFromDataField = layer-getResult( loop ); class = msnewclass( layer ); class-set( name, dbRowFromDataField.field ); ... The above seems logical, but I think it might have to do with the results from a click query rather than the data retrieved by MS from the data source in the first place. In any case, the following doesn't do anything at all (empty, white image) -- for ( 0 .. $layerObj-getNumResults() - 1) { my $row = $layerObj-getResult( $_ ); my $classObj = new mapscript::classObj( $layerObj ); $classObj-{name} = $row-{interval_name}; my $styleObj = new map script::styleObj( $classObj ); set style color based on $row-{class_color}; } Heh, the above code was ridiculous on my part... it would try to create a new class for every single feature. Instead, the following works just fine my $dbh = DBI-connect( .. ); my $sth = $dbh-prepare(SELECT class_name, class_color FROM color_table); $sth-execute; while (my ($class_name, $class_color) = $sth-fetchrow_array) { my $classObj = new mapscript::classObj( $layerObj ); $classObj-{name} = $class_name; $classObj-setExpression( $class_name ); my $styleObj = styleObj(classObj = $classObj, colorObj = colorObj('hex' = $class_color)); } I get all the classes made correctly without having to code them individually. The only minor downside, I have to make two different db calls -- one for MapServer, to get all the features, and one for the color information. Now, on to the next step -- retrieve these color values via a REST API, which is really my original aim. 2011/8/27 Mr. Puneet Kishor punk.k...@gmail.com I have a layer classification issue. I want to do something along the lines of (semi-pseudocode ahead) -- $layerObj-{data} = 'the_geom FROM (SELECT gid, the_geom, class_name, class_color FROM table) t USING UNIQUE gid'; $layerObj-{classitem} = 'class_name'; while (my $row in $layerObj-{data}) { create class with 'name = class_name', 'expression = class_name', 'color = class_color' } How do I iterate over the rows retrieved from the table in order to create classes? I don't see any obvious reference to a db result set.___ maps ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] layer classification with MapScript
Hi Brent, Thanks for the hand-holding. I got the solution for this first part of the challenge using MapScript; no Mapfile required at all. I will write up a more generalized article on this for the docs/wiki. On Aug 28, 2011, at 10:19 AM, Brent Fraser wrote: Puneet, If you don't care about mapserver generating a legend graphic, you could use mapserver CGI's ability (no scripting required) to do attribute binding (get values from a feature's attribute values). I've used a single class def of: CLASS STYLE # Line, Poly and Point outline SYMBOL [sSymbol] OUTLINECOLOR [sOutlineColor] COLOR[sColor] SIZE [sSize] END TEXT ([Label]) LABEL ANGLE AUTO POSITION UR COLOR [lColor] OUTLINECOLOR [lOutlineColor] TYPE truetype FONT 'Arial' SIZE [lSize] END END where the data/connection accessed a view joining the feature table to a class table where the styling values were defined. And you need 3 layer defs, one for points, lines and polygons. But using this technique, there is no way to get a legend graphic show all the classes. So in your PHP code you would need to do a generic database query to get a set of classes, then for each row create a class object and add it to the layer object. Then have mapscript process the features and render a map image by doing a draw() (and a legend graphic by doing a drawLegend()). Or, as others have suggested, you could pass an SLD to mapserver via WMS and request a legend graphic. Best Regards, Brent Fraser On 8/27/2011 5:02 PM, Mr. Puneet Kishor wrote: I have a layer classification issue. I want to do something along the lines of (semi-pseudocode ahead) -- $layerObj-{data} = 'the_geom FROM (SELECT gid, the_geom, class_name, class_color FROM table) t USING UNIQUE gid'; $layerObj-{classitem} = 'class_name'; while (my $row in $layerObj-{data}) { create class with 'name = class_name', 'expression = class_name', 'color = class_color' } How do I iterate over the rows retrieved from the table in order to create classes? I don't see any obvious reference to a db result set.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] baby steps with MapScript (problem)
I am relearning MapScript after years of innocence. I have a fairly simple script like so (also at http://pastebin.com/7rehitjH). The image is created, but is empty, plain white. There is some silliness on my part, something obvious I am overlooking or doing wrong, and I need someone to point it to me. Needless to say, the same map draws fine via MapServer CGI -- my $map = new mapscript::mapObj(); warn New mapObj() error: $mapscript::ms_error-{message}\n unless $map; $map-{status} = $mapscript::MS_ON; # STATUS ON $map-{units} = $mapscript::MS_DD; # UNITS DD $map-setImageType('png'); # IMAGETYPE PNG $map-{imagecolor} = new mapscript::colorObj(255, 255, 255);# IMAGECOLOR 255 255 255 $map-setSize(1000, 600); # SIZE 1000 600 $map-setExtent( -180, -90, 180, 90 ); # EXTENT -180 -90 180 90 $map-selectOutputFormat( 'png' ); # Choose active output format $map-setProjection( proj=latlong ); # PROJECTION # proj=latlong # END my $outputFormatObj = new mapscript::outputFormatObj('GD/PNG'); # DRIVER GD/PNG $outputFormatObj-setExtension('png'); # EXTENSION png $outputFormatObj-setMimetype('image/png'); # MIMETYPE image/png $outputFormatObj-{imagemode} = $mapscript::MS_IMAGEMODE_RGB; # IMAGEMODE RGB | PC256 $map-setOutputFormat( $outputFormatObj ); my $layerObj = new mapscript::layerObj($map); $layerObj-setConnectionType($mapscript::MS_POSTGIS, ''); $layerObj-{connection} = host=127.0.0.1 port=5432 dbname=$db user=$dbuser password=$pwd; $layerObj-{data} = 'the_geom FROM table USING UNIQUE gid'; my $classObj = new mapscript::classObj($layerObj); $classObj-{name} = 'foo'; my $styleObj = new mapscript::styleObj($classObj); $styleObj-{color} = new mapscript::colorObj( 132, 132, 132); $styleObj-{outlinecolor} = new mapscript::colorObj(0, 0, 0); # create an image for drawing. my $img = $map-draw(); warn prepareImage() error: $mapscript::ms_error-{message}\n unless $img; $img-save($tmp_dir/$image_name);___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: baby steps with MapScript (problem)
Never mind... figured out the error, and its working now, On Aug 27, 2011, at 5:02 PM, Mr. Puneet Kishor wrote: I am relearning MapScript after years of innocence. I have a fairly simple script like so (also at http://pastebin.com/7rehitjH). The image is created, but is empty, plain white. There is some silliness on my part, something obvious I am overlooking or doing wrong, and I need someone to point it to me. Needless to say, the same map draws fine via MapServer CGI -- my $map = new mapscript::mapObj(); warn New mapObj() error: $mapscript::ms_error-{message}\n unless $map; $map-{status} = $mapscript::MS_ON; # STATUS ON $map-{units} = $mapscript::MS_DD; # UNITS DD $map-setImageType('png'); # IMAGETYPE PNG $map-{imagecolor} = new mapscript::colorObj(255, 255, 255);# IMAGECOLOR 255 255 255 $map-setSize(1000, 600); # SIZE 1000 600 $map-setExtent( -180, -90, 180, 90 ); # EXTENT -180 -90 180 90 $map-selectOutputFormat( 'png' ); # Choose active output format $map-setProjection( proj=latlong ); # PROJECTION # proj=latlong # END my $outputFormatObj = new mapscript::outputFormatObj('GD/PNG'); # DRIVER GD/PNG $outputFormatObj-setExtension('png'); # EXTENSION png $outputFormatObj-setMimetype('image/png'); # MIMETYPE image/png $outputFormatObj-{imagemode} = $mapscript::MS_IMAGEMODE_RGB; # IMAGEMODE RGB | PC256 $map-setOutputFormat( $outputFormatObj ); my $layerObj = new mapscript::layerObj($map); $layerObj-setConnectionType($mapscript::MS_POSTGIS, ''); $layerObj-{connection} = host=127.0.0.1 port=5432 dbname=$db user=$dbuser password=$pwd; $layerObj-{data} = 'the_geom FROM table USING UNIQUE gid'; my $classObj = new mapscript::classObj($layerObj); $classObj-{name} = 'foo'; my $styleObj = new mapscript::styleObj($classObj); $styleObj-{color} = new mapscript::colorObj( 132, 132, 132); $styleObj-{outlinecolor} = new mapscript::colorObj(0, 0, 0); # create an image for drawing. my $img = $map-draw(); warn prepareImage() error: $mapscript::ms_error-{message}\n unless $img; $img-save($tmp_dir/$image_name); ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] layer classification with MapScript
I have a layer classification issue. I want to do something along the lines of (semi-pseudocode ahead) -- $layerObj-{data} = 'the_geom FROM (SELECT gid, the_geom, class_name, class_color FROM table) t USING UNIQUE gid'; $layerObj-{classitem} = 'class_name'; while (my $row in $layerObj-{data}) { create class with 'name = class_name', 'expression = class_name', 'color = class_color' } How do I iterate over the rows retrieved from the table in order to create classes? I don't see any obvious reference to a db result set.___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] dynamic layer classification
hola, I need some guidance on this (and my MapServer foo is severely rusted). My immediate need is to color a polygon layer (held in PostGIS) based on an attribute in a separate table. The number of CLASSes is considerable, more than 80 or so. This leads to a longer term need -- The coloring of these polys is a crucial and universal need in my field of work, and it horrendously complicated determining the correct color, and the calculations for the appropriate color keep on changing from time to time. In other words, many different applications need this ability to classify polys based on certain attributes. So, I am creating a web app that does nothing but tell what color to use -- you give it a set of attributes, and the web app replies with the color. It would be a RESTful app, sending the color information back as JSON. How could I use this information with MapServer? In an ideal scenario, MapServer would query the data source, then, for each class in the layer, it would send a query to this color app, and the color app would tell MapServer what color to use to render the poly. The same app would be used by other apps, be they MapServer, OL, Polymaps, or even non-mapping apps such as R, etc. Suggestions on how to proceed? -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] dynamic layer classification
On Aug 26, 2011, at 12:39 PM, Brent Fraser wrote: Puneet, I think currently the short answer is Mapscript. I had a similar need last year (http://lists.osgeo.org/pipermail/mapserver-users/2010-March/065050.html) where I needed to have the symbology stored in the database and the classes varied over time (users created new class defs in the database via a web page). Steve Lime suggested an enahancement where classes were defined by a SLD file or url: LAYER NAME 'extreme-symbology' DATA ... CONNECTION ... SLD 'some flle' or 'some url' ... END which is an elegant solution, but currently not implemented... Yes, that would be a very nice solution, precisely the kind of thing I am looking for. In fact, even better would be LAYER .. SLD 'some expression' where 'some expression' could be stored in a file, or retrieve via a URL, or from a db query. But, until that comes along, I could and will use MapScript. I compiled MS 6.0.1 yesterday, and discovered, much to my delight, that MapScript in my favorite programming language (the one that begins with P) is alive and doing well. So, how would I go about implementing this in MapScript? I would have to create the layer definition on the fly, no? Any pointers? Best Regards, Brent Fraser On 8/26/2011 8:35 AM, Mr. Puneet Kishor wrote: hola, I need some guidance on this (and my MapServer foo is severely rusted). My immediate need is to color a polygon layer (held in PostGIS) based on an attribute in a separate table. The number of CLASSes is considerable, more than 80 or so. This leads to a longer term need -- The coloring of these polys is a crucial and universal need in my field of work, and it horrendously complicated determining the correct color, and the calculations for the appropriate color keep on changing from time to time. In other words, many different applications need this ability to classify polys based on certain attributes. So, I am creating a web app that does nothing but tell what color to use -- you give it a set of attributes, and the web app replies with the color. It would be a RESTful app, sending the color information back as JSON. How could I use this information with MapServer? In an ideal scenario, MapServer would query the data source, then, for each class in the layer, it would send a query to this color app, and the color app would tell MapServer what color to use to render the poly. The same app would be used by other apps, be they MapServer, OL, Polymaps, or even non-mapping apps such as R, etc. Suggestions on how to proceed? -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] creating a dynamic thematic map based on attribs in a Pg table
I need a tute (or a pointer to one online) on how to color polys in a thematic map based on values retrieved from a separate table. I have table a --- gid attrib_id the_geom table b --- attrib_id attrib_name color_rgb (values such as 242 242 33 and 255 255 0) I would like to have MS color the polys and name the layers, ideally without having to create the CLASS definitions for each of the 80+ attribs, something akin to LAYER NAME my layer STATUS ON TYPE POLYGON CONNECTIONTYPE POSTGIS .. DATA the_geom FROM (SELECT gid, the_geom, attrib_name, color_rgb FROM a JOIN b ON a.attrib_id = b.attrib_id) view USING UNIQUE gid CLASS NAME [attrib_name] STYLE COLOR[color_rgb] OUTLINECOLOR 0 0 0 END END END How do I accomplish something like above?___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
[mapserver-users] Re: creating a dynamic thematic map based on attribs in a Pg table
Please see the end of the email for a variation on this problem -- On Aug 24, 2011, at 11:14 AM, Mr. Puneet Kishor wrote: I need a tute (or a pointer to one online) on how to color polys in a thematic map based on values retrieved from a separate table. I have table a --- gid attrib_id the_geom table b --- attrib_id attrib_name color_rgb (values such as 242 242 33 and 255 255 0) I would like to have MS color the polys and name the layers, ideally without having to create the CLASS definitions for each of the 80+ attribs, something akin to LAYER NAME my layer STATUS ON TYPE POLYGON CONNECTIONTYPE POSTGIS .. DATA the_geom FROM (SELECT gid, the_geom, attrib_name, color_rgb FROM a JOIN b ON a.attrib_id = b.attrib_id) view USING UNIQUE gid CLASS NAME [attrib_name] STYLE COLOR[color_rgb] OUTLINECOLOR 0 0 0 END END END How do I accomplish something like above? Instead of getting the attrib name and color from the database, I want to get them from a remote web service. Could something like this be accomplished via SLDs? That is, MapServer requests an SLD from a remote server that tells it how to color each of the classes in the layer. Many tia. -- Puneet Kishor ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: [mapserver-users] Visualizing the MapServer 6.0 release..
On May 16, 2011, at 1:45 PM, Jeff McKenna wrote: Watch the changes to MapServer from the year 2000 all the way up to the 6.0 release! http://vimeo.com/gatewaygeomatics/mapserver6-0 Dunno what it means, but looks awesome. (created with Gource ffmpeg through the SVN logs) -jeff -- Jeff McKenna MapServer Consulting and Training Services http://www.gatewaygeomatics.com/ ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users
Re: VS: [mapserver-users] Mapserver search performance
On May 3, 2011, at 3:36 PM, Varun saraf wrote: Hi Puneet, Thanks a lot for the prompt reply. I tried using Excel 2007 and was not able to re-save the dbf file after editing. Also, I am having DBF files with about a million records and Excel tends to hang for these operations. Now you tell us ;-). My sense is that most gui-based tools will choke on million+ rows. You might well want to upgrade to a Pg/PostGIS solution at some point, but I realize that is not what you are asking for... (also, I believe the most recent Excel versions might have lost the DBF translation capabilities -- I am not an Excel person, so I can't confirm... besides, I use Macs, and Excel is most likely hobbled on Macs anyway). Is there some tool other than Excel which can do these operations? I remember using Perl and XBase.pm to do this. It was really very quick and trivial, but it was a long time ago. Choose your language of choice. Try R. Thanks, Varun On Tue, May 3, 2011 at 4:27 PM, Mr. Puneet Kishor punk.k...@gmail.com wrote: On May 3, 2011, at 3:19 PM, Varun saraf wrote: ..Is there a DBF editor out there that can be used to import the fields from any external data source into the shapefile attribute DBF without affecting the structure? I looked for a lot but they do not have the capability of doing a JOIN based on a common field and pulling data into the shapefile DBF automatically. Just use MS-Excel or any program that can open up and write DBF. As long as you are careful to not change the number of rows, just add additional columns, and make sure the column names are not changed, and follow the various DBF limitations, you should be ok. Make sure to keep a backup of the original DBF in case things go ka-pow! Since the DBF data and the geometry are in separate files, there is no issue with adding more attributes provide you follow the care noted above. .. Puneet. ___ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users