Running GDAL/OGR functions from server on onclick client event - gis

This question comes from my poor understanding of how GDAL/OGR is supposed to work server-side, but before trying it I'd like to know if what I want is feasible with this library.
Basically, I am developing a webGIS application where the user should interact with a WFS. I'd like to give the user the possibility to download the data from this WFS as a format that the server does not provide as output so I need to convert it first.
I need the function ogr2ogr with the WFS driver to be able to convert the GML response of the server in (e.g.) Shapefile format.
My very basic question is: how can I call ogr2ogr which is installed on my server when the user click on (e.g.) a "Download" button?
My idea obvioulsy is to tie the onclick event with a JS function that calls ogr2ogr, but here my lack of knowledge in server-side web development does not le me go on.
Am I supposed to prepare a script (like a PHP) that internally calls ogr2ogr, or should I place the GDAL/OGR executables in a cgi-bin folder so that I can point and calling them with the required parameters?

I'd suggest investigating your server-middleware of choice; there's an excellent chance it supports OGR2OGR already if it's Open Source. The big two:
GeoServer has an ogr extension that can do what you want - https://docs.geoserver.org/stable/en/user/extensions/ogr.html
MapServer supports OGR too - https://mapserver.gis.umn.edu/output/ogr_output.html
Alternatively, you may want to consider investigating the WPS standard - but it's probably overkill if you're just changing formats.

Related

Can I make calls to APIs such as youtube-dl and ffmpeg from a chrome-app?

First of all, I haven't started the implementation of the system I'm about to describe, as I didn't want to commit on implementing something I did not know if was possible.
So, what I'm trying to achieve is to build a chrome-app to download the audio from certain websites (e.g. youtube and soundcloud) using youtube-dl, post process it using ffmpeg and then upload it to a cloud service via some api. The reason I want to do it via a chrome-app is because I could do all the work on the client side (no need for servers) and I'd have the ability to insert javascript into the pages using content scripts, which would make the app pretty simple to use (I could create buttons such as 'download song' and stuff like that).
Although I have already read the documentation explaining the NaCl Technical Overview and some of the Application Structure, I still am not sure as to whether I would be able to make these calls via some C/C++ module or if I would get denied due to security reasons.
To summarize: considering that the user has the needed dependencies in his system (youtube-dl, python, ffmpeg and etc.), is it possible to make calls to third party APIs such as the ones described before via a chrome-app using NaCl ?
Thank you all in advance,
Chrome apps are normally sandboxed.
Less so than extensions - they can reach much more system resources via app APIs.
But still, what you mention is executing libraries / utilities out of browser, and it's not normally allowed.
(P)NaCl is tightly sandboxed in this regard. See this old question, it still applies: you can only use 3rd-party code that compiles into NaCl along with your app, not just link to a library. There are some library ports to NaCl, but it's not automatic.
Normally, a few years back you would use a mechanism like NPAPI to reach out and use a library out of browser. It's deprecated, and won't work anymore. In its place, Chrome offers a pipe-like (through stdio) connection to an external program called Native Messaging. You could use it to perform operations with system-level libraries and tools, but the downside is that you can't bundle the native host with your app, you'll need a separate installer.

Can I use a local path to json with Google Maps API

Per the documentation here:
Can I replace:
map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json');
with a local path such as:
C:\path\file.json ?
or must it be hosted on a server?
Thanks
In general, this used to be not allowed by design. It's a violation of the sandbox.
From Wikipedia -> Javascript -> Security:
JavaScript and the DOM provide the potential for malicious authors to deliver scripts to run on a client computer via the web. Browser authors contain this risk using two restrictions. First, scripts run in a sandbox in which they can only perform web-relatedactions, not general-purpose programming tasks like creating files.
However, it's now possible in current browsers using the FILE API specification.
This should in theory allow you to read it using the FileReader interface, although you might need to use something like JSON.parse() (or $.parseJSON if you're using JQuery) to then interpret it in the way you need. Lots more detail and examples of how to do this are here:
http://www.html5rocks.com/en/tutorials/file/dndfiles/

AIR iOS and Android login

I am building an app in AIR/AS3 for iOS and Android which requires user information to be submitted and stored in a remote DB. I guess I will need to build a register/sign in screen but just wondering what the best method to store the session information in the app.
I would like it that if the user closes the app the session remains when they start it again. I currently have suspend on exit in the app.xml file. Should I just remove this?
Cheers
Probably worth giving a flip through of this for some high level ideas (without the seminar it's difficult to get details out of this)
http://www.slideshare.net/marcocasario/local-persistent-data-with-actionscript-3-and-air
If you're using Flex I'd suggest starting here:
http://help.adobe.com/en_US/flex/mobileapps/WSb0a29bf92525419c-54dd253312afbec3ecb-8000.html
Otherwise either using the File/FileStream classes and an XML file or the SQLite options are both good as well depending on what you need to save/restore and how you'll be working with the data.
Learn about sqllite, xml files, and php files. Make the flash file call a xml file that talks to a php file that talks to the mysql server.
Otherwise look here: http://active.tutsplus.com/tutorials/actionscript/create-a-flash-login-system-using-php-and-mysql-part-1/

Is there a working Cocoa MySQL Xcode project?

Or has this been abandoned? I can't seem to find a modern sample project. I haven't been able to make any the old code I find work. I just want to write a simple Mac app that accesses an external MySQL database that's also involved in a PHP website.
The old CocoaMySQL project has been abandoned, but the project has been resurrected as Sequel Pro.
It's open source and you can get the source code here.
If you want a straight library that allows you to access MySQL, you might try the commercial MacSQL framework.
You can also just use the MySQL C API directly, however be careful because if you want to use this in a commercial app the licensing fees are high.
You might find it easier to write some PHP code on the server to deliver the results to your client using JSON or some other lightweight data interchange format. PHP has direct support for JSON and there is a great Cocoa framework that makes it easy to parse and generate JSON code.
This method allows you to completely abstract the database connection from your client, so it is relatively trivial to change the database if necessary in future.
Thanks, Rob, I have actually seen the links to Sequel Pro but I was confused when I got there. Part of my problem is that I am really bad at adding things to an Xcode project. Once I have a project in hand with the correct libraries and whatever all linked up, I can make use of the various methods or functions.
That's why I was asking if someone had a super simple project using MySQL that would hopefully compile for me right out of the box. I can then add all my objects and coding.
Can't seem to find anyone out there willing to hold the hand of us project-challenged. The project settings dialog box and codes that go in various boxes therein are very confusing to me.

Idea Wanted: Raster Online Map (Possibly with ESRI API and some geoprocess model)

(I hope this is a valid question)
As I stated in my title, I'm looking for a fairly easy to moderately easy idea for some sort of online raster analysis map. I'm familiar with ESRI and their really awesome API, as I'm hoping to tackle something on that front. I'm also open to using the mapstraction lib.
Does anyone have any ideas for me?
Thanks!!
I'm not sure you mean image rasters or data rasters. This uses open source packages: MapServer and an AJAX client MsCross. It generates data rasters on the server and displays them in the browser. The rasters are contour plots for a plume of contamination in groundwater.
If you are already familiar with ESRI, then you should look at the ESRI Flex API ESRI Javascript API. You can use both of them to fire up Server side Geoprocessing services.
There are so many ways to skin the cat...
You may want to check the Publishing a GeoProcessing Service section of ESRI help
The basic idea is this... you use ArcMap/ArcCatalog to author a Geoprocessing Model (I am assuming you are familiar with this), which you later expose in an ArcGIS Server as a Geoprocessing Service. Publishing a model as a service is pretty easy provided you already have an ArcGIS Server configured - see the links I provided you above.
Then you can either use the free ArcGIS Explorer application to consume that GeoProcessing Service or write a webapp using Flex, or Javascript or DotNet or even python to consume that webservice.
And yeah, don't consume the webservice synchronously - stick with async.
You do unfortunately not write, what exactly you need. Do you want to display maps on a web page or in a application?
In the latter case i would recommend using http://www.openstreetmap.org/ it seems to be a little tricky in the beginning, buts data base gets better and better. A number of renderes exist, which you can integrate into your application.